程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> MSSQL >> SQL的Join應用圖解教程

SQL的Join應用圖解教程

編輯:MSSQL

SQL的Join應用圖解教程。本站提示廣大學習愛好者:(SQL的Join應用圖解教程)文章只能為提供參考,不一定能成為您想要的結果。以下是SQL的Join應用圖解教程正文


關於SQL的Join,在進修起來能夠是比擬亂的。我們曉得,SQL的Join語法有許多inner的,有outer的,有left的,有時刻,關於Select出來的成果集是甚麼模樣有點不是很清晰。Coding Horror上有一篇文章(其實不清晰為何Coding Horror也被牆)經由過程 文氏圖 Venn diagrams 說明了SQL的Join。我認為清晰易懂,轉過去。

假定我們有兩張表。

Table A 是右邊的表。
Table B 是左邊的表。
其各有四筆記錄,個中有兩筆記錄是雷同的,以下所示:

id name id name
-- ---- -- ----
1 Pirate 1 Rutabaga
2 Monkey 2 Pirate
3 Ninja 3 Darth Vader
4 Spaghetti 4 Ninja

上面讓我們來看看分歧的Join會發生甚麼樣的成果。

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

id name id name
-- ---- -- ----
1 Pirate 2 Pirate
3 Ninja 4 NinjaInner join
發生的成果集中,是A和B的交集。

Venn diagram of SQL inner join

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

id name id name
-- ---- -- ----
1 Pirate 2 Pirate
2 Monkey null null
3 Ninja 4 Ninja
4 Spaghetti null null
null null 1 Rutabaga
null null 3 Darth VaderFull outer join 發生A和B的並集。然則須要留意的是,關於沒有婚配的記載,則會以null做為值。

Venn diagram of SQL cartesian join

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

id name id name
-- ---- -- ----
1 Pirate 2 Pirate
2 Monkey null null
3 Ninja 4 Ninja
4 Spaghetti null nullLeft outer join 發生表A的完整集,而B表中婚配的則有值,沒有婚配的則以null值代替。

Venn diagram of SQL left join

SELECT * FROM TableA
LEFT OUTER JOIN TableB
ON TableA.name = TableB.name
WHERE TableB.id IS null

id name id name
-- ---- -- ----
2 Monkey null null
4 Spaghetti null null發生在A表中有而在B表中沒有的聚集。

join-left-outer.png

SELECT * FROM TableA
FULL OUTER JOIN TableB
ON TableA.name = TableB.name
WHERE TableA.id IS null
OR TableB.id IS null

id name id name
-- ---- -- ----
2 Monkey null null
4 Spaghetti null null
null null 1 Rutabaga
null null 3 Darth Vader發生A表和B表都沒有湧現的數據集。

join-outer.png 還須要注冊的是我們還有一個是“交差集” cross join, 這類Join沒有方法用文式圖表現,由於其就是把表A和表B的數據停止一個N*M的組合,即笛卡爾積。表達式以下:

SELECT * FROM TableA
CROSS JOIN TableB

這個笛卡爾乘積會發生 4 x 4 = 16 筆記錄,普通來講,我們很罕用到這個語法。然則我們得當心,假如不是應用嵌套的select語句,普通體系都邑發生笛卡爾乘積然再做過濾。這是關於機能來講長短常風險的,特別是表很年夜的時刻。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved