MySQL表的连接

一、内连接

内连接实际上就是利用 where 子句对两种表形成的笛卡儿积进行筛选,我们前面所学习的查询都是内连接,也是在开发过程中使用的最多的连接查询。

语法:

sql 复制代码
select 列 from 表1 inner join 表2 on 连接条件;
-- inner 可以省略,直接写 join

案例:显示Smith的名字和部门名称

sql 复制代码
select emp.name, dept.dname 
from emp join dept 
on emp.deptno = dept.deptno 
where emp.name = 'Smith';

二、外连接

外连接和内连接不一样,内连接只保留匹配成功的数据,而外连接会保留其中一张表的全部数据,匹配不到的地方填充 NULL。外连接分为左外连接和右外连接。

2.1 左外连接

语法:

sql 复制代码
select 列 from 表1 left join 表2 on 连接条件;

左外连接以 left join 左边的这张表作为主表,主表里面所有行都会保留,再去右边的表匹配符合条件的数据。如果右边表没有匹配上对应的记录,右边表的字段就全部填充为 NULL。

对外连接的使用案例使用student和score两张表。

案例:保留所有学生,没成绩的学生成绩列显示 NULL

sql 复制代码
SELECT s.sid, s.sname, sc.cname, sc.grade
FROM student s
LEFT JOIN score sc ON s.sid = sc.sid;

2.2 右外连接

语法:

sql 复制代码
select 列 from 表1 right join 表2 on 连接条件;

右外连接以 right join 右边的这张表作为主表,主表里面所有行都会保留,再去左边的表匹配符合条件的数据。如果左边表没有匹配上对应的记录,左边表的字段就全部填充为 NULL。

案例:保留所有成绩记录,找不到对应学生的学生列显示 NULL

sql 复制代码
SELECT s.sid, s.sname, sc.cname, sc.grade
FROM student s
RIGHT JOIN score sc ON s.sid = sc.sid;

2.3 全外连接

全外连接会保留两张表里所有的数据,不管能不能匹配上。左边表匹配不到的行,右边字段填充 NULL;右边表匹配不到的行,左边字段填充 NULL。

由于MySQL 没有直接提供 FULL OUTER JOIN 语法,需要借助 UNION,合并左外连接和右外连接的结果来模拟。

sql 复制代码
-- 左连接结果 UNION 右连接里排除已经匹配过的行
SELECT *
FROM student s
LEFT JOIN score sc ON s.sid = sc.sid

UNION

SELECT *
FROM student s
RIGHT JOIN score sc ON s.sid = sc.sid
WHERE s.sid IS NULL;
相关推荐
数字新视界1 小时前
机房动环监控系统在提升数据中心能效与安全中的应用探索
大数据·服务器·数据库·动环监控系统·动力与环境监控系统
bksczm2 小时前
MySQL之存储引擎
数据库·mysql
计算机毕设定制辅导-无忧学长2 小时前
《基于微信小程序健康习惯激励系统设计与实现》
java·spring boot·mysql·微信小程序·uniapp·健康习惯激励系统
大模型最新论文速读2 小时前
text-to-sql:从学术玩具到生产落地
数据库·sql
ManageEngineITSM3 小时前
工单分类怎么设计?类别、子类别与自动分派的实用方法
大数据·服务器·数据库·人工智能·分类·数据挖掘
ClouGence3 小时前
MongoDB 双向同步如何防止数据循环?(附实操指南)
数据库·mongodb
TDengine (老段)3 小时前
TDengine IDMP 十大实用功能(7)
数据库·物联网·时序数据库·tdengine·涛思数据·工业数据·idmp
Decay__3 小时前
15_MySQL 数据同步与迁移方案 —— 复制 / DataX / Canal / 异构同步(对标 Oracle GoldenGate)
运维·数据库·sql·mysql·架构
zjx23883 小时前
oracle11g转Gbase8s库SQL常见问题修改
数据库·sql