SQL语句多表联合查询的方法示例


Posted in MySQL onApril 18, 2022

前言

最近面试实习生,发现一般来说,公司喜欢通过一些 SQL 语句来考察你对数据库的使用熟不熟悉。所以我来总结一下我在面试中遇到多表联查是怎么联查的。

三表联查

首先来说多表联查的一些知识点。

多表是指等于或者多余三个表以上的数据库查询。多表联查的类型有:

  • 内连接:join,inner join
  • 外连接:left join,left outer join,right join,right outer join,union
  • 交叉连接:cross join

解释一下,外连接是指将两个表进行合并,如果有不相同的列,那么另外一个表将显示 null。而内连接是指内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。也就是说,运算符可以是 =,也可以是 >、>=、<=、<、!>、!<和<>。

内连接

假如我们有两个表

student.table
id name clsId
1  tjc    1
2  zhangsan    2
3 李四    3
4  刘五    4
5  黄六    5
class.table
clsId clsName
1        软件1班
2        软件2班
3        软件3班
4        软件4班

为了查询上面两个表,我们可以使用两种查询语句:

select * from student as s,class as as c where s.clsId = class.clsId
select * from student as s inner join class as c on s.clsId = class.clsId

两种结果都是:

id name clsId clsId clsName

1  tjc    1        1        软件1班

2  zhangsan    2        2        软件2班

3 李四    3        3        软件3班

4  刘五    4        4        软件4班

外连接

外连接跟内连接不同之处,如果查询的表中,如果通过关联标示符中,一个表的数据而另外一个表没有响应的数据项,那么就显示 null。

左连接

查询 SQL 语句为:

select * from student as s left join class as c on s.clsId = c.clsId

以左表为基准,如果右表没有相应的数据项,那么右表显示为 null。

右连接

select * from student as s right join class as c on s.clsId = c.clsId

以右表为基准,如果左表没有相应的数据项,那么左表显示为 null。

全连接

select * from student as s full outer join class c on s.clsId = c.clsId

完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。

交叉连接

交叉联接返回左表中的所有行,左表中的每一行与右表中的所有行组合。交叉联接也称作笛卡尔积。

select * from student as s cross join class as c order by s.id

附:多表联合查询训练

示例:求既学过“001”号课又学过 “002”号课的所有学生的学号

Select S1.S# From SC S1, SC S2
Where S1.S# = S2.S# and S1.C#=‘001'
and S2.C#=‘002 ;

示例:求“001”号课成绩比“002”号课成绩高的所有学生的学号

Select S1.S# From SC S1, SC S2
Where S1.S# = S2.S# and S1.C#=‘001'
and S2.C#=‘002' and S1.Score > S2.Score;

总结

到此这篇关于SQL语句多表联查实现的文章就介绍到这了!

MySQL 相关文章推荐
如何使用Maxwell实时同步mysql数据
Apr 08 MySQL
MySQL8.0.24版本Release Note的一些改进点
Apr 22 MySQL
MySQL 角色(role)功能介绍
Apr 24 MySQL
zabbix监控mysql的实例方法
Jun 02 MySQL
MySQL中的布尔值,怎么存储false或true
Jun 04 MySQL
面试提问mysql一张表到底能存多少数据
Mar 13 MySQL
一条慢SQL语句引发的改造之路
Mar 16 MySQL
在MySQL中你成功的避开了所有索引
Apr 20 MySQL
Mysql 数据库中的 redo log 和 binlog 写入策略
Apr 26 MySQL
Mysql数据库事务的脏读幻读及不可重复读详解
May 30 MySQL
Mysql将字符串按照指定字符分割的正确方法
May 30 MySQL
MySQL下载安装配置详细教程 附下载资源
Sep 23 MySQL
Mysql 如何合理地统计一个数据库里的所有表的数据量
Apr 18 #MySQL
MySQL三种方式实现递归查询
Apr 18 #MySQL
Mysql 8.x 创建用户以及授予权限的操作记录
Golang连接并操作MySQL
Apr 14 #MySQL
以MySQL5.7为例了解一下执行计划
Apr 13 #MySQL
MySQL时区造成时差问题
Mysql调整优化之四种分区方式以及组合分区
Apr 13 #MySQL
You might like
php关于array_multisort多维数组排序的使用说明
2011/01/04 PHP
php中数字0和空值的区别分析
2014/06/05 PHP
PHP的mysqli_query参数MYSQLI_STORE_RESULT和MYSQLI_USE_RESULT的区别
2014/09/29 PHP
php检测apache mod_rewrite模块是否安装的方法
2015/03/14 PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
2017/11/14 PHP
JavaScript中的Screen屏幕对象
2008/01/16 Javascript
JS获得URL超链接的参数值实例代码
2013/06/21 Javascript
深入理解Javascript中的循环优化
2013/11/09 Javascript
js实现二级菜单渐隐显示
2015/11/03 Javascript
简单的JS轮播图代码
2016/07/18 Javascript
js实现简易聊天对话框
2017/08/17 Javascript
浅谈vue-lazyload实现的详细过程
2017/08/22 Javascript
ionic选择多张图片上传的示例代码
2017/10/10 Javascript
jQuery实现的淡入淡出与滑入滑出效果示例
2018/04/18 jQuery
Vuex modules模式下mapState/mapMutations的操作实例
2019/10/17 Javascript
[01:07]DOTA2次级职业联赛 - Fpb战队宣传片
2014/12/01 DOTA
Windows系统配置python脚本开机启动的3种方法分享
2015/03/10 Python
Python解析xml中dom元素的方法
2015/03/12 Python
python实现的简单抽奖系统实例
2015/05/22 Python
插入排序_Python与PHP的实现版(推荐)
2017/05/11 Python
python 对多个csv文件分别进行处理的方法
2019/01/07 Python
python matplotlib画盒图、子图解决坐标轴标签重叠的问题
2020/01/19 Python
Python基于read(size)方法读取超大文件
2020/03/12 Python
python时间time模块处理大全
2020/10/25 Python
分布式全文检索引擎ElasticSearch原理及使用实例
2020/11/14 Python
ebookers英国:隶属全球最大的在线旅游公司Expedia
2017/12/28 全球购物
澳大利亚百货公司:David Jones
2018/02/08 全球购物
Under Armour安德玛中国官网:美国高端运动科技品牌
2018/03/09 全球购物
《蚂蚁和蝈蝈》教学反思
2014/02/24 职场文书
2015年宣传部工作总结范文
2015/03/31 职场文书
高中运动会广播稿
2015/08/19 职场文书
护士自荐信范文(2016推荐篇)
2016/01/28 职场文书
Oracle更换为MySQL遇到的问题及解决
2021/05/21 Oracle
MySQL七种JOIN类型小结
2021/10/24 MySQL
原型和原型链 prototype和proto的区别详情
2021/11/02 Javascript
Android开发手册TextInputLayout样式使用示例
2022/06/10 Java/Android