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的MVCC多版本并发控制的实现
Apr 14 MySQL
MySQL 可扩展设计的基本原则
May 14 MySQL
MySQL注入基础练习
May 30 MySQL
MySQL CHAR和VARCHAR该如何选择
May 31 MySQL
浅谈MySQL 亿级数据分页的优化
Jun 15 MySQL
MySQL去除重叠时间求时间差和的实现
Aug 23 MySQL
深入解析MySQL索引数据结构
Oct 16 MySQL
mysql自增长id用完了该怎么办
Feb 12 MySQL
分享MySQL常用 内核 Debug 几种常见方法
Mar 17 MySQL
MySQL数据库如何使用Shell进行连接
Apr 12 MySQL
SQL语句中EXISTS的详细用法大全
Jun 25 MySQL
MySQL 原理优化之Group By的优化技巧
Aug 14 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
ZF等常用php框架中存在的问题
2008/01/10 PHP
php根据日期判断星座的函数分享
2014/02/13 PHP
thinkphp文件引用与分支结构用法实例
2014/11/26 PHP
php运行报错Call to undefined function curl_init()的最新解决方法
2016/11/20 PHP
让你的博文自动带上缩址的实现代码,方便发到微博客上
2010/12/28 Javascript
jQuery菜单插件superfish使用指南
2015/04/21 Javascript
javascript实现的多个层切换效果通用函数实例
2015/07/06 Javascript
JS实现漂亮的淡蓝色滑动门效果代码
2015/09/23 Javascript
简单总结JavaScript中的String字符串类型
2016/05/26 Javascript
JavaScript实现通过select标签跳转网页的方法
2016/09/29 Javascript
JavaScript获取键盘按键的键码(参照表)
2017/01/10 Javascript
vue生成随机验证码的示例代码
2017/09/29 Javascript
基于jQuery解决ios10以上版本缩放问题
2017/11/03 jQuery
微信小程序图片选择区域裁剪实现方法
2017/12/02 Javascript
vue-cli项目修改文件热重载失效的解决方法
2018/09/19 Javascript
微信小程序 数据缓存实现方法详解
2019/08/26 Javascript
js 将多个对象合并成一个对象 assign方法的实现
2020/09/24 Javascript
[01:33]一分钟玩转DOTA2第三弹:DOTA2&DotA快捷操作大对比
2014/06/04 DOTA
pycharm 使用心得(六)进行简单的数据库管理
2014/06/06 Python
Python操作SQLite简明教程
2014/07/10 Python
在windows下Python打印彩色字体的方法
2018/05/15 Python
python 实现批量xls文件转csv文件的方法
2018/10/23 Python
Django使用中间键实现csrf认证详解
2019/07/22 Python
python实现拼接图片
2020/03/23 Python
改变 Python 中线程执行顺序的方法
2020/09/24 Python
Python模块常用四种安装方式
2020/10/20 Python
python BeautifulSoup库的安装与使用
2020/12/17 Python
CSS3旋转——彩色扇子兼容firefox浏览器
2013/06/04 HTML / CSS
全球最大的生存食品、水和装备专用在线市场:BePrepared.com
2020/01/02 全球购物
实习自我鉴定范文
2013/10/30 职场文书
房地产销售经理岗位职责
2014/01/01 职场文书
2014学校领导四风问题对照检查材料思想汇报
2014/09/22 职场文书
2014年驾驶员工作总结
2014/11/18 职场文书
主持人开幕词
2015/01/29 职场文书
《孙子兵法》:欲成大事者,需读懂这些致胜策略
2019/08/23 职场文书
详解使用内网穿透工具Ngrok代理本地服务
2022/03/31 Servers