使用union查詢兩張表資料的時候如何把查詢的資料存放到臨時表中,且為臨時表建立主鍵,求sql語句

2022-02-25 11:44:06 字數 5867 閱讀 4288

1樓:請叫我召哥

一條語句只能做到將表的資料放到臨時表,但是不能為臨時表建立主鍵的.

比如:create table temp_table as select * from table;

如果要建立主鍵的話,就只能寫到一個pl/sql塊裡面比如:declare

begin

execute immediate 'create table temp_table as select * from table';

execute immediate 'alter table temp_table add constraint pk_id primary key on (col_id) ';

end;

2樓:匿名使用者

先建立一個序列,你先要保證你這個union的兩個查詢列完全一致,先建立一個臨時表a ,

create table linshi_a as select 列1,列2 from table1 union select 列1,列2 from table2

再建立一個臨時表

create table linshi_b as select 序列.nextval id(主鍵名),列1,列2 from linshi_a

這樣linshi_b就有了主鍵,主鍵名是id希望可以幫到你哦!

3樓:匿名使用者

select * into #t from a union select * from b --前提兩表列的結構要一致,可以將列名一一列出

alter table #t add constraint pk__#t__id primary key on (id)

sql如何把查詢出來的多個表建立成一個臨時表

4樓:

select * into #temp from

select a,b,c  from table1

union all

select a,b,c  from table2

1、sql server使用select into會自動生成臨時表,不需要事先建立。

select * into #temp from sysobjects

2、sql要把多個表合併成一個要用到union或union all的關鍵字。

3、union或union all的區別是:union會自動壓縮多個結果集合中的重複結果,而union all則將所有的結果全部顯示出來。

5樓:米若明

這個方法不好...

臨時表使用檢視比較正確

基本介紹

應該是create view name

as select * from ...

---------------------------------------

檢視是一個虛擬表,其內容由查詢定義。同真實的表一樣,檢視包含一系列帶有名稱的列和行資料。但是,檢視並不在資料庫中以儲存的資料值集形式存在。

行和列資料來自由定義檢視的查詢所引用的表,並且在引用檢視時動態生成。

對其中所引用的基礎表來說,檢視的作用類似於篩選。定義檢視的篩選可以來自當前或其它資料庫的一個或多個表,或者其它檢視。分散式查詢也可用於定義使用多個異類源資料的檢視。

如果有幾臺不同的伺服器分別儲存組織中不同地區的資料,而您需要將這些伺服器上相似結構的資料組合起來,這種方式就很有用。

通過檢視進行查詢沒有任何限制,通過它們進行資料修改時的限制也很少。

一、檢視的作用

* 簡單性。看到的就是需要的。檢視不僅可以簡化使用者對資料的理解,也可以簡化他們的操作。那些被經常使用的查詢可以被定義為檢視,從而使得使用者不必為以後的操作每次指定全部的條件。

* 安全性。通過檢視使用者只能查詢和修改他們所能見到的資料。資料庫中的其它資料則既看不見也取不到。

資料庫授權命令可以使每個使用者對資料庫的檢索限制到特定的資料庫物件上,但不能授權到資料庫特定行和特定的列上。通過檢視,使用者可以被限制在資料的不同子集上:

使用許可權可被限制在基表的行的子集上。

使用許可權可被限制在基表的列的子集上。

使用許可權可被限制在基表的行和列的子集上。

使用許可權可被限制在多個基表的連線所限定的行上。

使用許可權可被限制在基表中的資料的統計彙總上。

使用許可權可被限制在另一檢視的一個子集上,或是一些檢視和基表合併後的子集上。

* 邏輯資料獨立性。檢視可幫助使用者遮蔽真實表結構變化帶來的影響。

二、檢視的優點

(1)檢視能簡化使用者的操作

(2)檢視機制可以使使用者以不同的方式查詢同一資料

(3)檢視對資料庫重構提供了一定程度的邏輯獨立性

(4)檢視可以對機密的資料提供安全保護

三、檢視的安全性

檢視的安全性可以防止未授權使用者檢視特定的行或列,是使用者只能看到表中特定行的方法如下:

1 在表中增加一個標誌使用者名稱的列;

2 建立檢視,是使用者只能看到標有自己使用者名稱的行;

3 把檢視授權給其他使用者。

四、邏輯資料獨立性

檢視可以使應用程式和資料庫表在一定程度上獨立。如果沒有檢視,應用一定是建立在表上的。有了檢視之後,程式可以建立在檢視之上,從而程式與資料庫表被檢視分割開來。

檢視可以在以下幾個方面使程式與資料獨立:

1 如果應用建立在資料庫表上,當資料庫表發生變化時,可以在表上建立檢視,通過檢視遮蔽表的變化,從而應用程式可以不動。

2 如果應用建立在資料庫表上,當應用發生變化時,可以在表上建立檢視,通過檢視遮蔽應用的變化,從而使資料庫表不動。

3 如果應用建立在檢視上,當資料庫表發生變化時,可以在表上修改檢視,通過檢視遮蔽表的變化,從而應用程式可以不動。

4 如果應用建立在檢視上,當應用發生變化時,可以在表上修改檢視,通過檢視遮蔽應用的變化,從而資料庫可以不動。

五、檢視的書寫格式

create view 《檢視名》[(列名組)]

as 《子查詢》

drop view 《索引名》

注意:檢視可以和基本表一樣被查詢,但是利用檢視進行資料增,刪,改操作,會受到一定的限制。

(1)由兩個以上的基本表匯出的檢視

(2)檢視的欄位來自欄位表示式函式

(3)檢視定義中有巢狀查詢

(4)在一個不允許更新的檢視上定義的檢視

六、建立和管理檢視

(建立檢視時注意事項的介紹)

(一). 利用企業管理器建立與管理檢視

1.使用企業管理器建立檢視:

2.使用企業管理器的「嚮導」建立檢視:

3.使用企業管理器的修改檢視:

注意:在 「設計檢視」時完成的工作:

新增表/刪除表 ?新增引用欄位/刪除引用欄位 ?調整欄位順序 ?設定分組

設定過濾條件 ?設定引用欄位是否輸出 ?設定檢視其他屬性

4.使用企業管理器的刪除檢視:

(二). 用t-sql語句建立與管理檢視

(檢視由企業管理器建立的檢視—「專案資訊」其相應的t-sql語句)(「檢視屬性」)

1. 使用create view建立檢視的語法: 參見教材p130~135

例子1: 選擇『員工表』和『專案表』中的部分欄位和記錄建立檢視,並且限制表『員工表』 中的記錄只能是部門為「專案部」的記錄集合,檢視定義為view_part,其程式清單如下:

create view view_part

as select 員工表.編號, 員工表.姓名,員工表.性別,

員工表.所屬部門, 專案表.專案編號, 專案表.名稱

from 專案表 inner join 員工表 on 專案表.負責人 = 員工表.編號

where 員工表.所屬部門='專案部'

例子2:定義檢視時指定別名並加密

create view 專案資訊檢視

(專案名稱,專案客戶,專案負責人,開始日期,[計劃工期(天)])

with encryption

as select 專案表.名稱,客戶表.客戶名稱, 員工表.姓名,專案表.開始日期,

datediff(day,專案表.開始日期,專案表.結束日期)

from 專案表 inner join 員工表 on 專案表.負責人 = 員工表.編號

inner join 客戶表 on 專案表.客戶 = 客戶表.客戶編號

where 員工表.所屬部門='專案部'

使用語句:exec sp_helptext 『專案資訊檢視』顯示訊息為:

「物件備註已加密。」

操作結果如下圖所示

例子5-3:使用with check option子句

問題提出:

若建立檢視ygb_view,其程式清單如下:

create view ygb_view

as select * from 員工表

where 員工表.性別=『女』執行下列語句,插入新記錄:

insert into ygb_view(姓名,性別,工資)

values(『李立三』,『男』,2300)

插入操作成功,但不合理!

解決辦法:使用with check option,程式清單如下:

create view ygb_view

as select * from 員工表 where 員工表.性別=『女』with check option

同樣,插入新記錄:

insert into ygb_view(姓名,性別,工資) values(『李立三』,『男』,2300)

插入操作將失敗!

2.使用alter view修改檢視 語法:參見教材

3.刪除檢視drop view

使用drop view命令刪除檢視的語法如下: drop view 檢視名1 [, ……]

例: drop view ygb_view

七、使用檢視操作表資料

(一)、通過檢視新增表資料

使用insert語句實現。

注意:檢視是虛擬表,其本身不儲存資料(來自其引用表), 新增的資料是儲存於檢視參照的資料表中。

條件分析:

1)使用者有向資料表插入資料的許可權;

2)檢視只引用表中部分欄位,插入資料時只能是明確其應用的欄位取值;

3)未引用的欄位應具備下列條件之一:

允許空值;設有預設值;是標識欄位;資料型別是timestamp或uniqueidentifer;

4)檢視不能包含多個欄位的組合

5)檢視不能包含使用統計函式的結果;

6)檢視不能包含distinct或group by子句;

7)定義檢視使用with check option,則插入資料應符合相應條件;

8)若檢視引用多個表,一條insert語句只能同一個基表表中資料;

例:首先建立了一個新的檢視:

create view ygb_view

as select * from 員工表 where 員工表.性別=『女』 with check option

然後,通過執行以下語句使用該檢視向基表新增一條新的資料記錄:

insert into ygb_view(姓名,性別,工資) values(『李立平』,『女』,2300)

(二). 更新資料記錄

使用檢視可以更新基表資料記錄(注意使用insert時的限制同樣適用)。

例子3:

(1) update 專案_view

set 專案負責人= 『王大力』 where 專案負責人= 『王立兵』

(2) update 專案_view

set 結束日期= dateadd(day, 50, 結束日期) where 客戶名稱=『cch公司』

(三)、刪除資料記錄

利用delete語句,使用檢視刪除記錄,可以刪除任何基表中的記錄。

注意: 必須指定在檢視中定義過的欄位來刪除記錄;

檢視引用多個表時,無法用delete命令刪除資料。

例子4:delete ygb_view where 員工工資<1500

兩張電信卡可以同時使用嗎可以同時使用兩張電信卡嗎

支援volte功能巧皮塵的手機握舉,且兩張電信手機卡均開通了volte業務的孝禪是可以同時安裝兩張電信手機卡使用的 小夥伴使用抄的是哪款機型?1.r17 pro全網通版襲 移動卡與聯通bai卡 電信卡可以任意du搭配使用zhi,任意一張卡dao可選做上網絡卡。當插兩張電信卡時,非上網絡卡必須開通 v...

兩張excel表怎樣查詢重複身份證號

1 首先,在excel 中選中將進行輸入身份證的單元格。2 接著,右單擊設定單元格格式。3 再接著,從選項中選擇文字格式。4 最後輸入身份證號。5 在圖示的單元格的身份證前輸入一個單引號。6 最後按 擊回車 鍵就能輸入身份證了,快速對比身份證號。選資料,排序,然後分類彙總,彙總方式選計數,凡是計數大...

excel中,兩張表怎麼快速查詢出相同數值

把問題作為內容 郵件主題一定要包含 excel 本人以此為依據辨別非垃圾郵件,以免誤刪 excel問題檔案 注意 若是03後,請一定要另成為03的,把現狀和目標效果表示出來,並說明如何從現狀到的目標效果 作為附件發到yqch134 163.com幫你看下,我直接全部給你找出來 方法 步驟 移動或者複...