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数据迁移相关总结
Apr 29 MySQL
MySQL EXPLAIN输出列的详细解释
May 12 MySQL
mysql在项目中怎么选事务隔离级别
May 25 MySQL
MySQL注入基础练习
May 30 MySQL
解决mysql的int型主键自增问题
Jul 15 MySQL
SQL之各种join小结详细讲解
Aug 04 MySQL
MySQL中的引号和反引号的区别与用法详解
Oct 24 MySQL
Linux7.6二进制安装Mysql8.0.27详细操作步骤
Nov 27 MySQL
MySQL中int (10) 和 int (11) 的区别
Jan 22 MySQL
Linux系统下MySQL配置主从分离的步骤
Mar 21 MySQL
MySQL的存储过程和相关函数
Apr 26 MySQL
MySQL sql模式设置引起的问题
May 15 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扩展ZF――Validate扩展
2008/01/10 PHP
CodeIgniter php mvc框架 中国网站
2008/05/26 PHP
php动态实现表格跨行跨列实现代码
2012/11/06 PHP
PHP接收App端发送文件流的方法
2016/09/23 PHP
javascript学习网址备忘
2007/05/29 Javascript
jscript之Open an Excel Spreadsheet
2007/06/13 Javascript
JavaScript 产生不重复的随机数三种实现思路
2012/12/13 Javascript
使用javascript创建快捷方式的简单实例
2013/08/09 Javascript
JavaScript实现的in_array函数
2014/08/27 Javascript
JQuery分屏指示器图片轮换效果实例
2015/05/21 Javascript
js实现select二级联动下拉菜单
2020/04/17 Javascript
js与applet相互调用的方法
2016/06/22 Javascript
微信小程序 图片宽度自适应的实现
2017/04/06 Javascript
微信小程序媒体组件详解(视频,音乐,图片)
2017/09/19 Javascript
微信小程序实现下载进度条的方法
2017/12/08 Javascript
在vue里面设置全局变量或数据的方法
2018/03/09 Javascript
layui中使用jquery控制radio选中事件的示例代码
2018/08/15 jQuery
微信二次分享报错invalid signature问题及解决方法
2019/04/01 Javascript
JS使用cookie保存用户登录信息操作示例
2019/05/30 Javascript
解决LayUI数据表格复选框不居中显示的问题
2019/09/25 Javascript
浅谈Vue组件单元测试究竟测试什么
2020/02/05 Javascript
Vue 组件的挂载与父子组件的传值实例
2020/09/02 Javascript
[06:15]2016国际邀请赛中国区预选赛单车采访:我顶WINGS
2016/06/27 DOTA
python3.7 sys模块的具体使用
2019/07/22 Python
Django Model层F,Q对象和聚合函数原理解析
2020/11/12 Python
CSS3 transforms应用于背景图像的解决方法
2019/04/16 HTML / CSS
泰国网上购物:Shopee泰国
2018/09/14 全球购物
颇特女士香港官网:NET-A-PORTER香港
2021/03/08 全球购物
2014年国庆节庆祝建国65周年比赛演讲稿
2014/09/21 职场文书
五四青年节活动总结
2015/02/10 职场文书
通知书大全
2015/04/27 职场文书
2015年防汛工作总结
2015/05/15 职场文书
家长对学校的意见和建议
2015/06/03 职场文书
欢迎新生标语2015
2015/07/16 职场文书
纯 CSS 自定义多行省略的问题(从原理到实现)
2021/11/11 HTML / CSS
面试中老生常谈的MySQL问答集锦夯实基础
2022/03/13 MySQL