每天学点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 子句


分享到:


相關文章: