SQL聯合語句的視覺解釋
我認為Ligaya Turmelle的關於SQL聯合(join)語句的帖子對於新開發者來說是份很好的材料。SQL 聯合語句好像是基於集合的,用韋恩圖來解釋咋一看是很自然而然的。不過正如在她的帖子的回覆中所說的,在測試中我發現韋恩圖並不是十分的匹配SQL聯合語法。
不過我還是喜歡這個觀點,所以我們來看看能不能用上韋恩圖。假設我們有下面兩張表。表A在左邊,表B在右邊。我們給它們各四條記錄。
id name id name -- ---- -- ---- 1 Pirate 1 Rutabaga 2 Monkey 2 Pirate 3 Ninja 3 Darth Vader 4 Spaghetti 4 Ninja
我們用過name欄位用幾種不同方式把這些表聯合起來,看能否得到和那些漂亮的韋恩圖在概念上的匹配。
SELECT * FROM TableA INNER JOIN TableB ON TableA.name = TableB.name id name id name -- ---- -- ---- 1 Pirate 2 Pirate 3 Ninja 4 Ninja
內聯合(inner join)只生成同時匹配表A和表B的記錄集。(如下圖)
——————————————————————————-
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 Vader
全外聯合(full outer join)生成表A和表B裡的記錄全集,包括兩邊都匹配的記錄。如果有一邊沒有匹配的,缺失的這一邊為null。(如下圖)
——————————————————————————-
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 null
左外聯合(left outer join)生成表A的所有記錄,包括在表B裡匹配的記錄。如果沒有匹配的,右邊將是null。(如下圖)
——————————————————————————-
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裡的記錄集,我們用同樣的左外聯合,然後用where語句排除我們不想要的記錄。(如下圖)
——————————————————————————-
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唯一的記錄集,我們用同樣的全外聯合,然後用where語句排除兩邊都不想要的記錄。(如下圖)
———————————————————–
還有一種笛卡爾積或者交叉聯合(cross join),據我所知不能用韋恩圖表示:
SELECT * FROM TableA CROSS JOIN TableB
這個把“所有”聯接到“所有”,產生4乘4=16行,遠多於原始的集合。如果你學過數學,你便知道為什麼這個聯合遇上大型的表很危險。
英文原文;Jeff Atwood,編譯:伯樂線上 – @奇風餘谷
相關文章
- sql的聯結語句詳解SQL
- 畫圖解釋 SQL join 語句圖解SQL
- 檢視低效的SQL語句SQL
- 【python資料探勘課程】十一.Pandas、Matplotlib結合SQL語句視覺化分析PythonSQL視覺化
- 兩表聯查修改的sql語句SQL
- Oracle SQL精妙SQL語句講解OracleSQL
- 聯絡生活來簡化sql語句SQL
- 使用SQL MERGE語句組合表SQL
- 用 Transact-SQL 語句監視SQL
- sql 語句網路除錯和 sql 語句低層傳輸檢視SQL除錯
- 檢視mysql正在執行的SQL語句MySql
- 關聯資料的釋出與視覺化視覺化
- Oracle SQL精妙SQL語句講解(轉)OracleSQL
- Oracle 檢視佔用undo大的sql語句OracleSQL
- sqlserver 檢視和sql語句的效率對比SQLServer
- 檢視造成等待事件的具體SQL語句事件SQL
- SQL聯合查詢中的關鍵語法SQL
- SQL語句SQL
- SQL語句IN的用法SQL
- 常用的SQL語句SQL
- 常用的SQL 語句SQL
- SQL 語句 as 的用法SQL
- oracle的sql語句OracleSQL
- Java中如何解析SQL語句、格式化SQL語句、生成SQL語句?JavaSQL
- SQLite SQL語句結構詳解SQLite
- DAAM:首次利用視覺語言學解釋大型擴散模型視覺模型
- 通過圖表簡化sql語句的表關聯SQL
- 一些sql語句的詳細解釋[更新:2006.5.23]SQL
- SQL語句大全—檢視錶空間(二)SQL
- SQL語句大全—檢視錶空間(一)SQL
- Oracle釋出一個SQL語句的處理過程OracleSQL
- sql 中的with 語句使用SQL
- SQL語句的優化SQL優化
- sql語句的簡化SQL
- 實用的SQL語句~!SQL
- 深入瞭解視覺語言模型視覺模型
- sql語句大全SQL
- 共享SQL語句SQL