每天學點SQL(008) JOIN 表連接


視頻約120秒。碎片時間,關注收藏。


JOIN 表連接

SELECT 語句不限於從單個表中查詢數據,也可以將多個表連接在一起,連接表的過程稱為 JOIN。SQL 提供了多種連接,比如內連接和外連接等。

JOIN 表連接類型


每天學點SQL(008) JOIN 表連接

備註:未展示交叉連接和自連接。

JOIN 表連接類型詳解

每天學點SQL(008) JOIN 表連接

備註:OUTER 可選。MySQL 中不支持全連接,可以使用左外連接 + UNION + 右外連接的方式實現。

JOIN 表連接語法

<code>SELECT 列名1,列名2
FROM 表名1
(INNER/LEFT/RIGHT/FULL) JOIN 表名2/<code>

表連接的意義在於在水平方向上合併兩個或多個數據集,併產生一個結果數據集。

INNER JOIN 內連接詳解

內連接 INNER JOIN 通過兩列之間的關係連接兩個或多個表。

假設有兩個表:表R、表S,分別有4行數據。表R(5,6,7,8),表S(7,8,9,1)。當表R使用內連接與表S連接時,得到的結果是(7,8),它表示表R與表S的交集。

每天學點SQL(008) JOIN 表連接

LEFT JOIN 左外連接詳解

左連接 LEFT JOIN 將返回左表中的所有行,不管右表是否存在匹配的行。

假設有兩個表:表R、表S,分別有4行數據。表R(5,6,7,8),表S(7,8,9,1)。當表R使用左外連接與表S連接時,得到的結果是(5,6,7,8)。

每天學點SQL(008) JOIN 表連接

RIGHT JOIN 右外連接詳解

右連接 RIGHT JOIN 將返回右表中的所有行,不管左表是否存在匹配的行。

假設有兩個表:表R、表S,分別有4行數據。表R(5,6,7,8),表S(7,8,9,1)。當表R使用右外連接與表S連接時,得到的結果是(7,8,9,1)。

每天學點SQL(008) JOIN 表連接

FULL JOIN 全外連接詳解

完全外連接 FULL JOIN 包含連接表中的所有行,若無匹配行,用 NULL 值填充。

假設有兩個表:表R、表S,分別有4行數據。表R(5,6,7,8),表S(7,8,9,1)。當表R使用全外連接與表S連接時,得到的結果是(5,6,7,8,9,1)。

每天學點SQL(008) JOIN 表連接

JOIN 表連接使用示例

假設學生基礎信息表A和學生選修課程表B,包含以下幾個字段:

每天學點SQL(008) JOIN 表連接

表A

每天學點SQL(008) JOIN 表連接

表B

其中,各字段定義為:sid為學生ID、name為姓名、gender為性別,age為年齡,course為選修課程。

INNER JOIN 內連接示例

<code>SELECT COUNT(DISTINCT(A.sid)) AS s_cnt
FROM A
JOIN B ON A.sid = B.sid /<code>

該語句查詢有選修記錄的學生數。

每天學點SQL(008) JOIN 表連接

LEFT JOIN 左外連接示例

<code>SELECT A.sid, A.s_name, B.course
FROM A 
LEFT JOIN B ON A.sid = B.sid 
ORDER BY A.sid/<code>

該語句查詢所有學生的選課明細記錄。匹配不到的行會用NULL 填充。

每天學點SQL(008) JOIN 表連接


碎片時間,關注收藏。


每天學點SQL(008) JOIN 表連接

每天學點SQL(008) JOIN 表連接

往期視頻:

每天學點SQL(001) SELECT語句

每天學點SQL(002) DISTINCT語句

每天學點SQL(003) WHERE子句

每天學點SQL(004) AND 或 OR

每天學點SQL(005) ORDER BY語句

每天學點SQL(006) 聚合函數

每天學點SQL(007) GROUP BY 子句


分享到:


相關文章: