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 相关文章推荐
MySQL Innodb关键特性之插入缓冲(insert buffer)
Apr 08 MySQL
Mysql数据库按时间点恢复实战记录
Jun 30 MySQL
MySQL系列之一 MariaDB-server安装
Jul 02 MySQL
MySQL 1130异常,无法远程登录解决方案详解
Aug 23 MySQL
MySQL 如何限制一张表的记录数
Sep 14 MySQL
Mysql Innodb存储引擎之索引与算法
Feb 15 MySQL
Mysql数据库表中为什么有索引却没有提高查询速度
Feb 24 MySQL
CentOS MySql8 远程连接实战
Apr 19 MySQL
Mysql 数据库中的 redo log 和 binlog 写入策略
Apr 26 MySQL
详解Mysql事务并发(脏读、不可重复读、幻读)
Apr 29 MySQL
MySQL详解进行JDBC编程与增删改查方法
Jun 16 MySQL
MySQL表字段数量限制及行大小限制详情
Jul 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在线代理转向代码
2012/05/05 PHP
php提取身份证号码中的生日日期以及验证是否为成年人的函数
2015/09/29 PHP
46 个非常有用的 PHP 代码片段
2016/02/16 PHP
tp5(thinkPHP5)操作mongoDB数据库的方法
2018/01/20 PHP
YII框架模块化处理操作示例
2019/04/26 PHP
2007/12/23更新创意无限,简单实用(javascript log)
2007/12/24 Javascript
Javascript 面向对象 重载
2010/05/13 Javascript
读jQuery之三(构建选择器)
2011/06/11 Javascript
用js小类库获取浏览器的高度和宽度信息
2012/01/15 Javascript
JQuery入门—编写一个简单的JQuery应用案例
2013/01/03 Javascript
js中indexof的用法详细解析
2013/12/24 Javascript
jQuery中replaceAll()方法用法实例
2015/01/16 Javascript
JavaScript中几种排序算法的简单实现
2015/07/29 Javascript
JavaScript中双向数据绑定详解
2017/05/03 Javascript
Angular 2父子组件之间共享服务通信的实现
2017/07/04 Javascript
jQuery实现下拉菜单动态添加数据点击滑出收起其他功能
2018/06/14 jQuery
JavaScript事件对象深入详解
2018/12/30 Javascript
js实现类似iphone的网页滑屏解锁功能示例【附源码下载】
2019/06/10 Javascript
vue实现一个6个输入框的验证码输入组件功能的实例代码
2020/06/29 Javascript
JavaScript读取本地文件常用方法流程解析
2020/10/12 Javascript
Python中返回字典键的值的values()方法使用
2015/05/22 Python
python中的break、continue、exit()、pass全面解析
2017/08/05 Python
Python文件和流(实例讲解)
2017/09/12 Python
python3 批量获取对应端口服务的实例
2019/07/25 Python
python 接口实现 供第三方调用的例子
2019/08/13 Python
tensorboard 可以显示graph,却不能显示scalar的解决方式
2020/02/15 Python
解决阿里云邮件发送不能使用25端口问题
2020/08/07 Python
Python中用xlwt制作表格实例讲解
2020/11/05 Python
Keds官方网站:购买帆布运动鞋和经典皮鞋
2016/11/12 全球购物
我们的节日元宵活动方案
2014/08/23 职场文书
4S店收银员岗位职责
2015/04/07 职场文书
公司禁烟通知
2015/04/23 职场文书
2015小学语文教师个人工作总结
2015/05/20 职场文书
楚门的世界观后感
2015/06/03 职场文书
Win11安全功能升级:内置防网络钓鱼功能
2022/04/08 数码科技
maven 解包依赖项中的文件的解决方法
2022/07/15 Java/Android