當前位置:首頁 » 數據倉庫 » 資料庫創建臨時表
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

資料庫創建臨時表

發布時間: 2022-10-16 14:37:12

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

SELECT * INTO #TEMPTABLENAME

FROM

(

SELECT xxxxxx //你的查詢語句

)AS table_source //這個別名是必須的

WHERE xxxxxxxx //你需要的where判斷;

COMMIT或ROLLBACK後可自動刪除該臨時表

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

select * into #temp from sysobjects

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

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

(1)資料庫創建臨時表擴展閱讀

sql語言特點如下:

1、一體化:SQL集數據定義DDL、數據操縱DML和數據控制DCL於一體,可以完成資料庫中的全部工作。

2、使用方式靈活:它具有兩種使用方式,即可以直接以命令方式交互使用;也可以嵌入使用,嵌入到C、C++、FORTRAN、COBOL、JAVA等主語言中使用。

3、語言簡潔,語法簡單,好學好用:在ANSI標准中,只包含了94個英文單詞,核心功能只用6個動詞,語法接近英語口語。

2. mysql 臨時表的建立和用途

我們仍然使用兩個會話,一個會話 run,用於運行主 SQL;另一個會話 ps,用於進行 performance_schema 的觀察:

主會話線程號為 29,

可以看到寫入的線程是 page_clean_thread,是一個刷臟操作,這樣就能理解數據為什麼是慢慢寫入的。

也可以看到每個 IO 操作的大小是 16K,也就是刷數據頁的操作。


結論:

我們可以看到,

1. MySQL 會基本遵守 max_heap_table_size 的設定,在內存不夠用時,直接將表轉到磁碟上存儲

2. 由於引擎不同(內存中表引擎為 heap,磁碟中表引擎則跟隨 internal_tmp_disk_storage_engine 的配置),本次實驗寫磁碟的數據量和實驗 05中使用內存的數據量不同。

3. 如果臨時表要使用磁碟,表引擎配置為 InnoDB,那麼即使臨時表在一個時間很短的 SQL 中使用,且使用後即釋放,釋放後也會刷臟頁到磁碟中,消耗部分 IO。

3. oracle資料庫建立臨時表,sql語句

create table 臨時表名 as
select *
from 原始表
where 月份 = 需要的月份

4. sql如何創建臨時表

網上其實很多相關文章,你可以搜一下,並不一定需要在這里提問。
轉帖一篇給你吧

drop table #Tmp --刪除臨時表#Tmp
create table #Tmp --創建臨時表#Tmp
(
ID int IDENTITY (1,1) not null, --創建列ID,並且每次新增一條記錄就會加1
WokNo varchar(50),
primary key (ID) --定義ID為臨時表#Tmp的主鍵
);
Select * from #Tmp --查詢臨時表的數據
truncate table #Tmp --清空臨時表的所有數據和約束

相關例子:

Declare @Wokno Varchar(500) --用來記錄職工號
Declare @Str NVarchar(4000) --用來存放查詢語句
Declare @Count int --求出總記錄數
Declare @i int
Set @i = 0
Select @Count = Count(Distinct(Wokno)) from #Tmp
While @i < @Count
Begin
Set @Str = 'Select top 1 @Wokno = WokNo from #Tmp Where id not in (Select top ' + Str(@i) + 'id from #Tmp)'
Exec Sp_ExecuteSql @Str,N'@WokNo Varchar(500) OutPut',@WokNo Output
Select @WokNo,@i --一行一行把職工號顯示出來
Set @i = @i + 1
End

臨時表
可以創建本地和全局臨時表。本地臨時表僅在當前會話中可見;全局臨時表在所有會話中都可見。
本地臨時表的名稱前面有一個編號符 (#table_name),而全局臨時表的名稱前面有兩個編號符 (##table_name)。

SQL 語句使用 CREATE TABLE 語句中為 table_name 指定的名稱引用臨時表:

CREATE TABLE #MyTempTable (cola INT PRIMARY KEY)
INSERT INTO #MyTempTable VALUES (1)

如果本地臨時表由存儲過程創建或由多個用戶同時執行的應用程序創建,則 SQL Server 必須能夠區分由不同用戶創建的表。為此,SQL
Server 在內部為每個本地臨時表的表名追加一個數字後綴。存儲在 tempdb 資料庫的 sysobjects 表中的臨時表,其全名由
CREATE TABLE 語句中指定的表名和系統生成的數字後綴組成。為了允許追加後綴,為本地臨時表指定的表名 table_name 不能超過
116 個字元。

除非使用 DROP TABLE 語句顯式除去臨時表,否則臨時表將在退出其作用域時由系統自動除去:

當存儲過程完成時,將自動除去在存儲過程中創建的本地臨時表。由創建表的存儲過程執行的所有嵌套存儲過程都可以引用此表。但調用創建此表的存儲過程的進程無法引用此表。

所有其它本地臨時表在當前會話結束時自動除去。

全局臨時表在創建此表的會話結束且其它任務停止對其引用時自動除去。任務與表之間的關聯只在單個 Transact-SQL 語句的生存周期內保持。換言之,當創建全局臨時表的會話結束時,最後一條引用此表的 Transact-SQL 語句完成後,將自動除去此表。

存儲過程或觸發器中創建的本地臨時表與在調用存儲過程或觸發器之前創建的同名臨時表不同。如果查詢引用臨時表,而同時有兩個同名的臨時表,則不定義針對哪
個表解析該查詢。嵌套存儲過程同樣可以創建與調用它的存儲過程所創建的臨時表同名的臨時表。嵌套存儲過程中對表名的所有引用都被解釋為是針對該嵌套過程所
創建的表,例如:

CREATE PROCEDURE Test2
AS
CREATE TABLE #t(x INT PRIMARY KEY)
INSERT INTO #t VALUES (2)
SELECT Test2Col = x FROM #t
GO
CREATE PROCEDURE Test1
AS
CREATE TABLE #t(x INT PRIMARY KEY)
INSERT INTO #t VALUES (1)
SELECT Test1Col = x FROM #t
EXEC Test2
GO
CREATE TABLE #t(x INT PRIMARY KEY)
INSERT INTO #t VALUES (99)
GO
EXEC Test1
GO

下面是結果集:

(1 row(s) affected)

Test1Col
-----------
1

(1 row(s) affected)

Test2Col
-----------
2

當創建本地或全局臨時表時,CREATE TABLE 語法支持除 FOREIGN KEY 約束以外的其它所有約束定義。如果在臨時表中指定
FOREIGN KEY 約束,該語句將返回警告信息,指出此約束已被忽略,表仍會創建,但不具有 FOREIGN KEY 約束。在 FOREIGN
KEY 約束中不能引用臨時表。

考慮使用表變數而不使用臨時表。當需要在臨時表上顯式地創建索引時,或多個存儲過程或函數需要使用表值時,臨時表很有用。通常,表變數提供更有效的查詢處理。

5. sqlserver怎麼建臨時表

1、表名前使用一個#號,臨時表是局部的,使用兩個#號,臨時表是全局的,在斷開連接後sql會自動刪除臨時表

2、臨時表除了名稱前多了#號外,其他操作與普通表完全一樣。

3、tb_Student是已建立好的表,我們通過臨時表temp把tb_Student表中的內容復制到tb_lizi表中,可以使用如下的代碼實現:
use mcf
SELECT * INTO #temp FROM tb_Student
SELECT * INTO tb_lizi FROM #temp
執行後斷開sql連接並重新連接(也可以退出sq再l重新啟動sql),發現tb_lizi表中的內容tb_Student表中的內容完全一致,實現了復制,同時我們沒有用代碼刪除temp表,但mcf資料庫中卻沒有temp表了,這是因為斷開連接時sql自動刪除了temp表

6. 如何建表(資料庫),臨時用的

1]變數表:[用於存儲過程\觸發器等]
declare @t table(表結構)
插入:insert into @t values(插入的數據)
查詢:select * from @t
存儲過程結束,表消失

2]臨時表分為:

本地臨時表,僅限於當前訪問者訪問,創建方法,如下:
create table #TableName(表結構)
儲存於資料庫tempdb內(硬碟),當前用戶斷開連接,自動刪除
如果使用中不斷開連接,且不需要該臨時表請執行:drop table #TableName

全局臨時表,所有訪問用戶訪問,創建方法,如下:
create table ##TableName(表結構)
儲存於資料庫tempdb內,當所有訪問用戶斷開連接,自動刪除
刪除語句:drop table ##TableName

注,
表結構如:(id int primary key,name varchar(10),sex varchar(2),check(sex in('男','女')))

7. 在oracle可以創建臨時表嗎

oracle可以創建臨時表,ORACLE臨時表有兩種類型:會話級的臨時表和事務級的臨時表。
1)ON
COMMIT
DELETE
ROWS
它是臨時表的默認參數,表示臨時表中的數據僅在事物過程(Transaction)中有效,當事物提交(COMMIT)後,臨時表的暫時段將被自動截斷(TRUNCATE),但是臨時表的結構
以及元數據還存儲在用戶的數據字典中。如果臨時表完成它的使命後,最好刪除臨時表,否則資料庫會殘留很多臨時表的表結構和元數據。
2)ON
COMMIT
PRESERVE
ROWS
它表示臨時表的內容可以跨事物而存在,不過,當該會話結束時,臨時表的暫時段將隨著會話的結束而被丟棄,臨時表中的數據自然也就隨之丟棄。但是臨時表的結構以及元數據還存儲在用戶的數據字典中。如果臨時表完成它的使命後,最好刪除臨時表,否則資料庫會殘留很多臨時表的表結構和元數據。
1:會話級的臨時表的數據和你當前會話有關系,當前SESSION不退出的情況下,臨時表中的數據就還存在,臨時表的數據只有當你退出當前SESSION的時候才被截斷(TRUNCATE
TABLE),如下所示:
會話級別的臨時表創建:
CREATE
GLOBAL
TEMPORARY
TABLE
TMP_TEST
(
ID
NUMBER
,
NAME
VARCHAR2(32)
)
ON
COMMIT
PRESERVE
ROWS;

CREATE
GLOBAL
TEMPORARY
TABLE
TMP_TEST
ON
COMMIT
PRESERVE
ROWS
AS
SELECT
*
FROM
TEST;
操作示例:
SQL>
CREATE
GLOBAL
TEMPORARY
TABLE
TMP_TEST
(

ID
NUMBER
,
NAME
VARCHAR2(32)
)
ON
COMMIT
PRESERVE
ROWS;
Table
created
SQL>
INSERT
INTO
TMP_TEST
SELECT
1,
'kerry'
FROM
DUAL;
1
row
inserted
SQL>
COMMIT;
Commit
complete
SQL>
SELECT
*
FROM
TMP_TEST;
ID
NAME
----------
----------------
1
kerry
SQL>
INSERT
INTO
TMP_TEST
SELECT
2,
'rouce'
FROM
DUAL;
1
row
inserted
SQL>
ROLLBACK;
Rollback
complete
SQL>
SELECT
*
FROM
TMP_TEST;
ID
NAME
----------
----------------------
1
kerry
SQL>
2:事務級的臨時表(默認),這種類型的臨時表與事務有關,當進行事務提交或者事務回滾的時候,臨時表的數據將自行截斷,即當COMMIT或ROLLBACK時,數據就會被TRUNCATE掉,其它的特性和會話級的臨時表一致。
事務級臨時表的創建方法:
CREATE
GLOBAL
TEMPORARY
TABLE
TMP_TEST
(
ID
NUMBER
,
NAME
VARCHAR2(32)
)
ON
COMMIT
DELETE
ROWS;

CREATE
GLOBAL
TEMPORARY
TABLE
TMP_TEST
ON
COMMIT
DELETE
AS
SELECT
*
FROM
TEST;
SQL>
CREATE
GLOBAL
TEMPORARY
TABLE
TMP_TEST
(
ID
NUMBER
,
NAME
VARCHAR2(32)
)
ON
COMMIT
DELETE
ROWS;
Table
created
SQL>
INSERT
INTO
TMP_TEST
SELECT
1,
'kerry'
FROM
DUAL;
1
row
inserted
SQL>
SELECT
*
FROM
TMP_TEST;
ID
NAME
----------
----------------------
1
kerry
SQL>
COMMIT;
Commit
complete
SQL>
SELECT
*
FROM
TMP_TEST;
ID

NAME
----------
------------------------
SQL>

8. oracle 怎麼在存儲過程中創建一個臨時表,在裡面插入數據,再查找這個臨時表的所有數據,最後drop這個表。

Oracle
的臨時表的
處理機制,

SQL
Server
的不一樣。
假如你的臨時表的結構不是每次執行都發生變化的話
那麼就是事先
通過
CREATE
GLOBAL
TEMPORARY
TABLE
語句,把臨時表建立好。
存儲過程裡面,就根據需要,
執行
INSERT
/
SELECT
之類的操作就可以了

9. 用ADO怎樣在access資料庫中創建臨時表

Access並不支持臨時表,
可以建立普通表,用完之後再刪除即可:
Set conn = CurrentProject.Connection
sql = "create table tableName(id integer,cname char(10))"
conn.Execute sql
用完之後:conn.Execute "drop table tableName"

10. sql中臨時表創建與使用

臨時表有兩種類型:
本地臨時表
以一個井號 (#) 開頭的那些表名。只有在創建本地臨時表的連接上才能看到這些表,鏈接斷開時臨時表即被刪除(本地臨時表為創建它的該鏈接的會話所獨享)或者這樣說局部臨時表是有當前用戶創建的,並且只有當前用戶的會話才可以訪問。
全局臨時表
以兩個井號 (##) 開頭的那些表名。在所有連接上都能看到全局臨時表或者這樣說只要這個全局臨時表存在,那麼用戶創建會話後對所有的用戶都是可見的。如果在創建全局臨時表的連接斷開前沒有顯式地除去這些表,那麼只要所有其它任務停止引用它們,這些表即被除去。當創建全局臨時表的連接斷開後,新的任務不能再引用它們(換句話說舊的任務還何以引用)。當前的語句一執行完,任務與表之間的關聯即被除去;因此通常情況下,只要創建全局臨時表的連接斷開,全局臨時表即被除去。
有以下方法可以創建
1)顯示地Creat table,如:
create table #tbl_Line(line varchar(10))
insert into #tbl_Line(line)
select distinct ltrim(rtrim(line_no))
from tbl_pas_scan_seq
where to_wc='A201'
這種方式的好處在於,可自行控制臨時表的結構。
2)用select into table,在建立的同時批量寫入數據,如:
select distinct ltrim(rtrim(line_no)) into #tbl_Line
from tbl_pas_scan_seq
where to_wc='A201'
這種方式的好處在於快捷,臨時表結構依賴於From子句中的相應表和欄位,當然select 子句中對欄位的處理也會有影響。
3) 利用with語句(sql server 2005+版本)
with test(bucode, bunamech)
as
(
select buCode,bunamech from pubBU
)
select * from TEST --- 此時的test就是臨時表,後續語句可以直接引用