Mysql 多表连接查询
本文部分內容參考了:Mysql 多表查詢詳解、圖解SQL的各種連接,同時感謝原作者的整理與創作;
另外,推薦:
Mysql 連接的使用 – 菜鳥教程
MySQL 8.0參考手冊 – 官方手冊
在一般的業務情況下,我們大致將 Mysql多表連接 分為如下幾種:
- 內連接:INNER JOIN – 可簡寫為 JOIN;
- 左外連接:LEFT OUTER JOIN – 可簡寫為 LEFT JOIN;
- 右外連接:RIGHT OUTER JOIN – 可簡寫為 RIGHT JOIN;
- 全連接:使用 UNION 完成;
- 交叉連接:CROSS JOIN – 也稱為 笛卡兒乘積連接,大抵不使用;
內連接 – INNER JOIN:
SQL 語句:
SELECT * FROM a INNER JOIN b ON(a.id = b.id)解釋:
查詢出 a表 和 b表 的 交集;
圖例:
左外連接 – LEFT OUTER JOIN:
SQL 語句:
SELECT * FROM a LEFT OUTER JOIN b ON(a.id = b.id)解釋:
查詢出 左邊表 -- 即a表 的完全集,而 右邊表 -- 即b表 中匹配的則有值,沒匹配的以 null 值取代;
圖例:
右外連接 – RIGHT OUTER JOIN:
SQL 語句:
SELECT * FROM a RIGHT OUTER JOIN b ON(a.id = b.id)解釋:
與 左外連接相反 ,查詢出 右邊表 -- 即b表 的完全集,而 左邊表 -- 即a表 中匹配的則有值,沒匹配的以 null 值取代;
圖例:
全連接 – UNION:
事實上由于 Mysql 不支持 FULL JOIN,所以我們將使用 UNION 來完成 全連接;
SQL 語句:
SELECT * FROM a LEFT OUTER JOIN b ON(a.id = b.id) UNION SELECT * FROM a RIGHT OUTER JOIN b ON(a.id = b.id)解釋:
全連接 是 左右外連接 的并集,連接表包含被連接的表的所有記錄,如果缺少匹配的記錄,,則以 null 取代;
圖例:
交叉連接 – CROSS JOIN:
關于 交叉連接 的教程,可以參考:MySQL交叉連接(CROSS
JOIN),本文此處便是轉載于此;
CROSS JOIN 子句從連接的表返回行的 笛卡兒乘積;
假設使用 CROSS JOIN 連接兩個表;
結果集將包括兩個表中的所有行,其中結果集中的每一行都是第一個表中的行與第二個表中的行的組合;
當連接的表之間沒有關系時,會使用這種情況;
要特別注意的是,如果每個表有 1000 行,那么結果集中就有 1000 x 1000 = 1,000,000 行,那么數據量是非常巨大的;
SQL 語句:
SELECT * FROM a CROSS JOIN b/*** 注意: * 與 INNER JOIN 或 [LEFT, RIGHT] OUTER JOIN 子句不同* CROSS JOIN 連接沒有 ON 條件*/添加了 WHERE 子句后,如果 a表 和 b表 有關系,則 CROSS JOIN 的工作方式與 INNER JOIN 類似,SQL 語句為:
SELECT * FROM a CROSS JOIN b WHERE a.id = b.id本文至此已結束,若有疏漏,還望諸位提醒更正
總結
以上是生活随笔為你收集整理的Mysql 多表连接查询的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android系统中SD卡各文件夹名称功
- 下一篇: mysql多数据表关联查询慢问题解决方案