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 相关文章推荐
.Net Core导入千万级数据至Mysql的步骤
May 24 MySQL
MySQL不使用order by实现排名的三种思路总结
Jun 02 MySQL
MySQL 全文检索的使用示例
Jun 07 MySQL
MySQL系列之八 MySQL服务器变量
Jul 02 MySQL
MySQL 四种连接和多表查询详解
Jul 16 MySQL
MySQL 1130异常,无法远程登录解决方案详解
Aug 23 MySQL
MySQL去除重叠时间求时间差和的实现
Aug 23 MySQL
一篇文章看懂MySQL主从复制与读写分离
Nov 07 MySQL
MySQL 数据类型详情
Nov 11 MySQL
mysql5.7的安装及Navicate长久免费使用的实现过程
Nov 17 MySQL
如何创建一个创建MySQL数据库中的datetime类型
Mar 21 MySQL
MySQL数据库Innodb 引擎实现mvcc锁
May 06 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
windows下PHP APACHE MYSQ完整配置
2007/01/02 PHP
深入php socket的讲解与实例分析
2013/06/13 PHP
mac os快速切换多个PHP版本的方法
2017/03/07 PHP
PHP创建文件及写入数据(覆盖写入,追加写入)的方法详解
2019/02/15 PHP
Yii2.0框架模型多表关联查询示例
2019/07/18 PHP
Jquery 在页面加载后执行的几种方式
2014/03/14 Javascript
完美兼容各大浏览器的jQuery插件实现图片切换特效
2014/12/12 Javascript
jquery马赛克拼接翻转效果代码分享
2015/08/24 Javascript
javascript实现Email邮件显示与删除功能
2015/11/21 Javascript
浅谈bootstrap源码分析之tab(选项卡)
2016/06/06 Javascript
原生js更改css样式的两种方式
2017/03/15 Javascript
基于JS递归函数细化认识及实用实例(推荐)
2017/08/07 Javascript
详解Nuxt.js Vue服务端渲染摸索
2018/02/08 Javascript
微信小程序页面缩放式侧滑效果的实现代码
2018/11/15 Javascript
vue 地图可视化 maptalks 篇实例代码详解
2019/05/21 Javascript
ES6数组与对象的解构赋值详解
2019/06/14 Javascript
js实现自动播放匀速轮播图
2020/02/06 Javascript
python+requests+unittest API接口测试实例(详解)
2017/06/10 Python
Python+Pandas 获取数据库并加入DataFrame的实例
2018/07/25 Python
为什么说Python可以实现所有的算法
2019/10/04 Python
通过实例了解python property属性
2019/11/01 Python
python异常处理和日志处理方式
2019/12/24 Python
快速了解Python开发环境Spyder
2020/06/29 Python
HTML5 本地存储和内容按需加载的思路和方法
2011/04/07 HTML / CSS
Python如何实现单例模式
2016/06/03 面试题
网站设计师的岗位职责
2013/11/21 职场文书
平面设计岗位职责
2013/12/14 职场文书
班主任工作年限证明
2014/01/12 职场文书
关于打架的检讨书
2014/01/17 职场文书
在职党员进社区活动总结
2014/07/05 职场文书
教师党员群众路线教育实践活动心得体会
2014/11/04 职场文书
2015年度电厂个人工作总结
2015/05/13 职场文书
2016年公司新年寄语
2015/08/17 职场文书
党员学习中国梦心得体会
2016/01/05 职场文书
Nginx已编译的nginx-添加新模块
2021/04/01 Servers
详解Python内置模块Collections
2022/03/22 Python