千家信息网

mysql 连接查询(俗称连表查询)内连接、外连接、自然连接

发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,连接查询的分类本文讨论中用到的测试数据``create table student(id int primary key auto_increment,name varchar(10));insert
千家信息网最后更新 2025年02月02日mysql 连接查询(俗称连表查询)内连接、外连接、自然连接

连接查询的分类

本文讨论中用到的测试数据
``create table student(
id int primary key auto_increment,
name varchar(10)
);
insert into student values
(null,'xiaohong'),
(null,'xiaoming'),
(null,'xiaogang'),
(null,'xiaoliang');

create table score(
id int primary key auto_increment,
stu_id int not null,
score decimal(5,2)
);
insert into score values
(null,1,300.45),
(null,2,400.35),
(null,3,500);``

内连接

inner join / join

由于mysql默认是内连接,所以,join 等同于 inner join
以两个表举例,内连接只返回在连接过程中有连接匹配的记录。也就是说,根据连接条件,两个表中都有对应的数据存在的记录,才会返回。
举例:
select stu.id,stu.name,s.score from student as stu inner join score as s on stu.id = s.stu_id;

如上图所示,由于小亮没有成绩,所以小刚没有出现在最终的结果中。

连接条件分析:

连接条件可以使用 on using where
区别:on 在连表查询中,任何情况下都可以使用on,而且建议使用 on。on 是在连表的过程中,根据on条件判断是否保留连表的结果。
using 是在连表查询的字段名一致时,可以使用。如 using(id)。using 条件中使用的字段,返回结果中只有一遍。
where 是在连表操作完成后,再根据where条件进行数据过滤。不建议使用,因为这样效率很低。

外连接

外连接查询时,允许另一方存在与之不匹配的数据。外连接的连接条件不可使用 where,须使用 on 或者 using其中的一种,其它都与内连接一致。

左外连接(left outer join / left join):

左表为主表,即使右表没有与左表匹配的记录,也返回左表的记录。而右表与左表不匹配的记录将被忽略。
举例:
select * from student as stu left join score as s on stu.id = s.stu_id;
结果如下:
+----+-----------+------+--------+--------+
| id | name | id | stu_id | score |
+----+-----------+------+--------+--------+
| 1 | xiaohong | 1 | 1 | 300.45 |
| 2 | xiaoming | 2 | 2 | 400.35 |
| 3 | xiaogang | 3 | 3 | 500.00 |
| 4 | xiaoliang | NULL | NULL | NULL |
+----+-----------+------+--------+--------+

右外连接(right outer join / right join):

右表为主表,即使左表没有与之匹配的记录,也返回右表的记录。
举例:
select * from score as s right join student as stu on s.stu_id=stu.id;
+------+--------+--------+----+-----------+
| id | stu_id | score | id | name |
+------+--------+--------+----+-----------+
| 1 | 1 | 300.45 | 1 | xiaohong |
| 2 | 2 | 400.35 | 2 | xiaoming |
| 3 | 3 | 500.00 | 3 | xiaogang |
| NULL | NULL | NULL | 4 | xiaoliang |
+------+--------+--------+----+-----------+

全外连接(full join):mysql 暂不支持,可以用union模拟实现。

自然连接

natural join (同 join)

natural left join (同 left join)

natural right join (同 right join)

自然连接会自动判断,以两个表中相同的字段为连接条件,返回查询结果。

注意:内连接不写连接条件会出现笛卡尔积的结果,应该避免这种情况,而外连接不写连接条件会报错

条件 结果 查询 数据 两个 字段 是在 自然 一致 建议 情况 过程 相同 一方 上图 中用 也就是 也就是说 只有 小刚 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 网络安全法规定 大众传播 国外服务器的邮箱 南阳理工智能软件开发方向 网络安全专业需要读研吗 数据库课后习题第12章 北京职业软件开发价格行情 校园安全之网络安全 为什么要报计算机网络技术 手机网络安全检测软件有哪些 瓯海区现代化刀片服务器欢迎咨询 区块链数据库靠谱吗 南京互联网科技园 学软件开发的基础知识 广州探途网络技术有限 吉安高性价比服务器哪家比较好 洛阳讯昂网络技术有限公司 网络安全须知简介 原神服务器不联通 岳阳软件开发公司地址 胡莱三国多久开一次新服务器 国家建立网络安全机制 服务器鉴定故障 常熟原则软件开发推荐咨询 珠海服务软件开发费用是多少 表扬网络安全知识丰富的人 2台服务器的集群搭建 指纹识别软件开发毕业设计 洛阳讯昂网络技术有限公司 自考专科计算机网络技术 查看当前数据库的名称
0