iT邦幫忙

2022 iThome 鐵人賽

DAY 23
0
自我挑戰組

C# 和 SQL 探索之路系列 第 23

Day 23: SQL 暫存資料表與資料表連接

  • 分享至 

  • xImage
  •  

大家好,今天終於要開始介紹 SQL 了 ~
之後的 SQL 文章,會以 MS SQL 為基礎做講解。

暫存資料表與 SELECT INTO

在 SQL Server 中的暫存表分為 3 個類型:

  1. [#Table] 暫存資料表:只有建立者可以使用
  2. [##Table] 暫存資料表:所有人都可以使用
  3. [@Table] 資料表變數:批次資料執行完後立即從記憶體被刪除

可以使用 SELECT INTO 的語法將 SELECT 的結果插入到新的暫存表,以供暫時性的紀錄或計算使用,其插入方式如下:

SELECT Column1, Column2… 
INTO [#Table_name] 
FROM [Tables]

不過 SELECT INTO 不能插入至已存在的資料表,如果需要覆蓋的話,應該要先使用 DROP TABLE 指令:

DROP TABLE [#Table_name]

另外,可以加上 WHERE 0=1,只複製資料表結構,而不複製裡面的內容。

SELECT Column1, Column2… 
INTO [#Table_name] 
FROM [Tables]
WHERE 0=1

JOIN

  • INNER JOIN:只會返回兩個資料表都符合連接結果 (條件) 的資料。
  • LEFT JOIN:只要左方的資料表符合條件,就取回資料。右方資料表不存在的欄位為 NULL
  • RIGHT JOIN:只要右方的資料表符合條件,就取回資料。左方資料表不存在的欄位為 NULL

(對我來說,通常會將左方資料表稱為主資料表,右方資料表稱為子資料表,較能區分連接後的結果。)

推薦以下參考資料中的圖解,可以快速理解各種 JOIN 的關係。

WHERE 和 INNER JOIN 的易讀性

當連接多個資料表時,使用 INNER JOIN 會比 WHERE 來得更容易閱讀。這是因為

SELECT * FROM table_a As a
INNER JOIN table_b AS b ON a.f_key=b.p_key
WHERE a.id='A01'

只單純的包含了在哪些值相同時連接資料,而 Where 則可以同時包含限定條件 (Which) 和連接 (Where-from),因此有多組資料表連接時,會比較需要花時間閱讀與理解。

SELECT * FROM table_a AS a, table_b AS b
WHERE a.f_key=b.p_key AND a.id='A01'

上一篇
Day 22: C# 使用 Region 的優缺點
下一篇
Day 24: SQL 語法: UNION、NOT EXISTS、CASE
系列文
C# 和 SQL 探索之路30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言