SQL 表各種連接查詢圖解

對於SQL的Join,在學習起來可能是比較亂的。我們知道,SQL的Join語法有很多inner的,有outer的,有left的,有時候,對於Select出來的結果集是什麼樣子有點不是很清楚。Coding Horror上有一篇文章,通過文氏圖 Venn diagrams 解釋了SQL的Join。我覺得清楚易懂,轉過來。

假設我們有兩張表。Table A 是左邊的表。Table B 是右邊的表。其各有四條記錄,其中有兩條記錄name是相同的,如下所示:讓我們看看不同JOIN的不同

image

1.INNER JOIN

SELECT * FROM TableA INNER JOIN TableB ON TableA.name = TableB.name

 

image

2.FULL [OUTER] JOIN

(1)

SELECT * FROM TableA FULL OUTER JOIN TableB ON TableA.name = TableB.name

image

image

 

image

 

 

 

4.RIGHT [OUTER] JOIN

RIGHT OUTERJOIN 是後面的表爲基礎,與LEFT OUTER JOIN用法類似。這裏不介紹了。

5.UNION  UNION ALL

UNION 操作符用於合併兩個或多個 SELECT 語句的結果集。 
請注意,UNION 內部的 SELECT 語句必須擁有相同數量的列。列也必須擁有相似的數據類型。同時,每條 SELECT 語句中的列的順序必須相同。UNION 只選取記錄,而UNION ALL會列出所有記錄。

(1)SELECT name FROM TableA UNION SELECT name FROM TableB

image

選取不同值

(2)SELECT name FROM TableA UNION ALL SELECT name FROM TableB

 

image

全部列出來

(3)注意:

SELECT * FROM TableA UNION SELECT * FROM TableB

 

image

 

由於 id 1 Pirate   與 id 2 Pirate 並不相同,不合並

還需要註冊的是我們還有一個是“交差集” cross join, 這種Join沒有辦法用文式圖表示,因爲其就是把表A和表B的數據進行一個N*M的組合,即笛卡爾積。表達式如下:SELECT * FROM TableA CROSS JOIN TableB

這個笛卡爾乘積會產生 4 x 4 = 16 條記錄,一般來說,我們很少用到這個語法。但是我們得小心,如果不是使用嵌套的select語句,一般系統都會產生笛卡爾乘積然再做過濾。這是對於性能來說是非常危險的,尤其是表很大的時候。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章