mysql外连接和联合查询

外连接

left join,right join
在这里插入图片描述

语法结构:

select 字段 from 表1 left [out] join 表2 on 表1.关系字段=表2.关系字段; 

左外连接

例1:

select*from a left join b on a.id=b.id;

左外连接的特点:
1、左外连接“左侧表中“中的使用记录都会被展示出来;右侧表中只展示符合条件的记录,不符合条件的记录将会用null值代替;
2、连接方式:
(1)左侧表中符合条件的记录将会与右侧表中符合条件的记录互相连接
(2)左侧表中不符合条件的将会与右侧表中的”空记录”进行连接;

右外连接

例2:

select*from a right join b on a.id=b.id;

右外连接的特点:
1、右外连接”右侧表中”的所有记录都会被展示出来;左侧表中只展示符合条件的记录,不符合条件的记录将会用null值代替;
2、连接方式:
(1)右侧表中符合条件的记录将会与左侧表中符合条件的记录互相连接
(2)右侧表中不符合条件将会与左侧表中的“空记录”进行连接
左外连接和右外连接逻辑相同,意义相对;

多表连接梳理

(1)内连接
在这里插入图片描述

(2)左外连接:
在这里插入图片描述

(3)右外连接:

在这里插入图片描述

例3:查询没有选课的学生的名字;
(1)子查询方法:
(2)左外连接的方法:
练习:查询没有人选的课程名称;(所涉及的表course,sc)
(1)子查询方法:
(2)左外连接的方法:

例4:查询所授课程没有人选的老师名字(teacher,teaching,sc)
查询没有授课的老师的名字;
teacher:包含所有老师的基本信息
teaching:授课任务
sc:包含选修课的情况

子查询的方法:

select tname from teacher where tno in
(select tno from teaching where cno not in(select cno from sc));

teacher,teaching:tno
teahing,sc:cno

内连接结合外连接的写法:

select tname from teacher 
join taching on teacher.tno=teaching.tno left 
join sc on teaching.cno=sc.cno 
where sc.cno is null;

联合查询

union 和union all
(1)查看union连接的效果
(2)union使用的注意事项:
1、当使用union连接两个子查询时,两个语句拆查询出来的字段数量必须相同,否则无法使用union 进行联合查询;
2、mysql中union和order by、limit联合使用,需要注意的问题:
(1)在union中,在不用括号的情况下,只能用一个order by
(2)limit作用于的是union后的结果集,而不是union后的select语句
错误写法:

select * from student where sname like ‘张%’ order by sname
union
select * from student where sname like ‘’李%‘ order by sname;

例1:查询a01课程成绩最高的前三条记录以及a02课程成绩最高的前三条记录
举例说明:

(select * from sc where cno="a01" order by degree desc limit 3)
union(select * from sc where cno="a02" order by degree desc limit 3)
union(select * from sc where cno="c01" order by degree desc limit 3);

(1)union会过滤掉union两边的select得到的结果集中的重复的行,而union all不会过滤掉重复的行,举例说明;

(select * from sc limit 3)
union(select * from sc limit 3);

例2:查询sc表的前三条记录拼接上sc表的前三条记录;
自连接:属于内连接
自连接:连接是同一张表
from 表名 a,表名 b on a.关系字段=b.关系字段;

自连接什么用:
条件出现在同一个字段;
from sc a,sc b a.sno=b.sno and a.cno=“a01” and b.cno=“a02”;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
左连接和联合查询是关系型数据库中常用的查询操作。 左连接是指从左表中取出所有记录,并根据关联条件将右表中匹配的记录连接起来。如果右表中没有匹配的记录,则用NULL填充。左连接可以使用LEFT JOIN关键字来实现。\[3\] 联合查询是指将两个或多个查询的结果集合并在一起。UNION操作符用于返回两个查询结果集的并集,去除重复记录;而UNION ALL操作符返回两个查询结果集的并集,包括重复记录。联合查询可以使用UNION或UNION ALL关键字来实现。\[2\] 在使用左连接时,可以通过在关联条件中使用"is null"来筛选出右表中没有匹配的记录。而在联合查询中,可以通过在每个查询中使用不同的连接类型(左外连接和右外连接)来实现合并两个表的结果集。\[2\]\[3\] 总结来说,左连接和联合查询都是用于在关系型数据库中进行数据查询的操作。左连接用于连接两个表并返回左表中所有记录以及与之匹配的右表记录,而联合查询用于合并两个或多个查询的结果集。 #### 引用[.reference_title] - *1* [MySQL数据高级查询之连接查询联合查询、子查询](https://blog.csdn.net/weixin_34355715/article/details/92263423)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [mysql 多表联合查询 的七种方式 全部 左连接 右连接 内连接](https://blog.csdn.net/qq_41486847/article/details/123126845)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

侬本多情。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值