SQL 提供了JOIN
關鍵字來連接多張表的查詢(即連接的是SELECT
結果集)基本分爲以下幾種:
-
內連接:JOIN / INNER JOIN,是最爲常用的一種連接,其效果是隻返回條件匹配的那條數據
- 等值連接:ON 子句中使用了運算符“=”,且連接的兩個字段最好是主鍵
例如select student.name, avg(sc.score) as avg_score from student join score on student.id = sc.id group by name;
name avg_score 趙雷 89.66667 錢電 70.00000 孫風 80.00000 李雲 33.33333 - 不等連接:ON 子句中使用了不等於運算符,例如"<>" "<=>"等(可以搜下 SQL 比較運算符)
- 自連接:一張表連接自身。例如
select * from student a, student b where a.sex = b.sex and a.sex = '男';
相當於做了次笛卡爾積運算,就不全部展示了
id name sex id name sex 1 趙雷 男 1 趙雷 男 2 錢電 男 1 趙雷 男 3 孫風 男 1 趙雷 男 4 李雲 男 1 趙雷 男 - 等值連接:ON 子句中使用了運算符“=”,且連接的兩個字段最好是主鍵
-
外連接:除了返回條件匹配的數據,那些不滿足的數據也會返回。根據連接表的順序可分爲:
- 左(外)連接:LEFT JOIN / LEFT OUTER JOIN
以左表爲基表連接右表,在右表中若沒有匹配到基表中的數據則返回 null
例如select stu.name, avg(sc.score) as avg_score from student stu left join sc on sc.id = stu.id group by stu.name;
name avg_score 趙雷 89.66667 錢電 70.00000 孫風 80.00000 李雲 33.33333 張三 null 李四 null - 右(外)連接:RIGHT JOIN / RIGHT OUTER JOIN
以右表爲基表連接左表,在左表中若沒有右匹配到基表中的數據則返回 null
- 左(外)連接:LEFT JOIN / LEFT OUTER JOIN
-
全(外)連接:FULL JOIN / FULL OUTER JOIN
- 等同於 LEFT JOIN 結果集 UNION RIGHT JOIN 結果集
-
交叉連接:CROSS JOIN (可用","代替)
- 等同於笛卡爾積 (所以不常用)
select * from table1 CROSS JOIN table2;
<=>select * from table1, table2;