SQL中臨時表的建立方法

使用臨時表,可以減少SQL文的執行次數,提高程序的執行效率。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

1. 物理臨時表

與數據表一樣,在數據庫建立的時候建立,長期存在數據庫中。程序在運行的時候,臨時將數據放入其中,在檢查或者修改完成之後,將其中的數據轉移到其他數據表中。程序結束之後,刪除其中的數據。

 

2. 連接式臨時表

與數據庫建立連接的同時建立該臨時表,之後的作用與【物理臨時表】一致。在連接斷開之後,數據庫系統刪除該臨時表。

 

3. 笛卡爾乘積式臨時表

如果操作的數據是兩個表中的數據的笛卡爾乘積,可以在SQL中通過兩個表的內聯,建立這樣的臨時表數據。

 

SELECT * FROM

( SELECT 店鋪CODE, 商品CODE

  FROM T_店鋪表, T_商品表

  WHERE 店鋪CODE IN ('店鋪CODE1', '店鋪CODE2')

  AND 商品CODE IN ('商品CODE1', '商品CODE2')

) AS T_店鋪商品

LEFT JOIN T_其他表

  ON T_其他表.店鋪CODE = T_店鋪商品.店鋪CODE

  AND T_其他表.商品CODE = T_店鋪商品.商品CODE

 

4. 內聯式臨時表

SQL中將數據用查詢固定值的方式內聯形成臨時表,然後用該臨時表聯結其他數據表。

 

SELECT T_企劃_商品.商品CODE, T_企劃_商品.企畫番號, T_企劃_商品.企畫開始日, T_企劃_商品.企畫終了日

FROM

(

  SELECT '00000000000001' AS 商品CODE, '20080515' AS 訂貨開始日, '20080519' AS 訂貨結束日 UNION ALL

  SELECT '00000000000002' AS 商品CODE, '20080516' AS 訂貨開始日, '20080520' AS 訂貨結束日 UNION ALL

  SELECT '00000000000003' AS 商品CODE, '20080515' AS 訂貨開始日, '20080521' AS 訂貨結束日 UNION ALL

  SELECT '00000000000004' AS 商品CODE, '20080514' AS 訂貨開始日, '20080522' AS 訂貨結束日 UNION ALL

  SELECT '00000000000005' AS 商品CODE, '20080513' AS 訂貨開始日, '20080523' AS 訂貨結束日 UNION ALL

  SELECT '00000000000006' AS 商品CODE, '20080512' AS 訂貨開始日, '20080524' AS 訂貨結束日

  ) AS CHECKDATA

INNER JOIN T_企劃_商品

 ON T_企劃_商品.商品CODE = CHECKDATA.商品CODE

 AND T_企劃_商品.訂貨開始日 <= CHECKDATA.訂貨結束日

 AND T_企劃_商品.訂貨結束日 >= CHECKDATA.訂貨開始日

ORDER BY M_企畫_商品.商品CODE

發佈了46 篇原創文章 · 獲贊 9 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章