当前位置:网站首页>MySQL:连接查询 | 内连接,外连接
MySQL:连接查询 | 内连接,外连接
2022-08-05 06:27:00 【_索伦】
连接查询
连接查询分为内连接查询和外连接查询


场景一:内连接查询
学生、课程、成绩

表的创建




插入数据



查询示例
要查看 zhang san同学某一门课成绩:预置条件 uid = 1, cid = 2

但是这样并不明显,不知道是哪个同学哪门课的成绩。所以需要多表连接查询,普通方法需要两条语句:

内连接查询:
select a.uid, a.name, a.age, a.sex, c.score from student a
inner join exam c on a.uid=c.uid
再加上筛选条件:
select a.uid, a.name, a.age, a.sex, c.score from student a
inner join exam c on a.uid=c.uid where c.uid = 1 and c.cid = 2;
关于 on a.uid=c.uid 如何区分大表小表?
是按照数据量来区分的,数据量少的是小表,因为小表需要整表搜索,然后去大表搜索。
上面语句就是 先从student小表里取出所有uid,然后拿着这些uid去exam大表里搜索。
没有过滤条件:

如果再想查看课程的具体信息,那么需要把课程表再做一次内连接查询:

其他示例:要查询某一门课超过90分的同学具体信息:只需要改变后面的过滤条件即可

效率问题
若要查看所有学生的成绩信息:使用内连接,然后查看SQL的执行计划,发现先去扫描student表,因为该表数据少,所以当作小表
如果指向查询某一个课程的学生成绩信息:
再看SQL执行计划,发现先去扫描exam表去,把exam表当作小表

如果把 b.cid=3放在连接条件里:发现和上面使用where是一样的,所以:
对于inner join内连接,过滤条件写在where的后面和on连接条件里面,效果是一样的

模板:
SELECT a.属性名1,a.属性名2,…,b,属性名1,b.属性名2… FROM table_name1 a
inner join table_name2 b on a.id = b.id
where a.属性名 满足某些条件;
外连接查询
左连接查询
SELECT a.属性名列表, b.属性名列表 FROM table_name1 a LEFT [OUTER] JOIN table_name2 b on
a.id = b.id;
与内连接的区别:把left这边的表所有的数据显示出来,在右表中不存在相应数据,则显示NULL
select a.* from User a left outer join Orderlist b on a.uid=b.uid where a.orderid is null;
如下图:因为给student表里新增了一个学生,而新增的学生并没有课程和成绩,所以显示NULL

右连接查询
SELECT a.属性名列表, b.属性名列表 FROM table_name1 a RIGHT [OUTER] JOIN table_name2 b on
a.id = b.id;
和内连接区别: 把right这边的表所有的数据显示出来,在左表中不存在相应数据,则显示NULL
select a.* from User a right outer join Orderlist b on a.uid=b.uid
where b.orderid is null;
执行计划对比:

示例
若要查询哪个同学没有参加过考试,使用in 子查询的语句为:
select * from student where uid not in(select distinct uid from exam);


使用左连接查询:
select a.* from student a left join exam b on a.uid=b.uid where b.cid is null;

待补充。。
边栏推荐
- 数据库多表关联插入数据
- protobuf根据有关联的.proto文件进行编译
- (4) Rotating object detection data roLabelImg to DOTA format
- JS控制只能输入数字并且最多允许小数点两位
- 1, Citrix XenDesktop 2203 AD domain system installation (1)
- 原来使Maya Arnold也能渲染出高质量作品!超赞小技巧
- 花花省V5淘宝客APP源码无加密社交电商自营商城系统带抖音接口
- PCI Pharma Services宣布斥资数百万美元扩建英国制造设施,以满足市场对支持肿瘤治疗的全球高效药制造服务日益增长的需求
- Detailed explanation of the construction process of Nacos cluster
- 工作3年,回想刚入门和现在的今昔对比,笑谈一下自己的测试生涯
猜你喜欢

MySql面试题总结

淘宝宝贝页面制作
![In-depth analysis if according to data authority @datascope (annotation + AOP + dynamic sql splicing) [step by step, with analysis process]](/img/b5/03f55bb9058c08a48eae368233376c.png)
In-depth analysis if according to data authority @datascope (annotation + AOP + dynamic sql splicing) [step by step, with analysis process]

LabVIEW中如何实现任意形状的不规则按键

Japan Sanitary Equipment Industry Association: Japan's warm water shower toilet seat shipments reached 100 million sets

RNote108---显示R程序的运行进度

Database table insert data

Nacos cluster construction

HelloWorld

【网友真实投稿】为女友放弃国企舒适圈,转行软件测试12k*13薪
随机推荐
1, Citrix XenDesktop 2203 AD domain system installation (1)
MySQL: JDBC programming
【JVM调优】Xms和Xmx为什么要保持一致
export使用
MySQL的主从模式搭建
NACOS Configuration Center Settings Profile
#Sealos#使用工具部署kubernetesV1.24.0
一天学会从抓包到接口测试,通过智慧物业项目深度解析
JS控制只能输入数字并且最多允许小数点两位
合工大苍穹战队视觉组培训Day9——相机标定
2022杭电多校六 1007-Shinobu loves trip(同余方程)
LaTeX uses frame to make PPT pictures without labels
FPGA parsing B code----serial 4
After docker is deployed, mysql cannot connect
The NDK compiler so libraries
Shared memory + inotify mechanism to achieve multi-process low-latency data sharing
淘宝宝贝页面制作
vscode notes
真实字节跳动测试开发面试题,拿下年薪50万offer。
技术分析模式(八)双顶和底