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 07 MySQL
教你用eclipse连接mysql数据库
Apr 22 MySQL
解决MySQL存储时间出现不一致的问题
Apr 28 MySQL
MySql新手入门的基本操作汇总
May 13 MySQL
MySQL中VARCHAR与CHAR格式数据的区别
May 26 MySQL
MYSQL(电话号码,身份证)数据脱敏的实现
May 28 MySQL
MySQL系列之十五 MySQL常用配置和性能压力测试
Jul 02 MySQL
SQL实现LeetCode(177.第N高薪水)
Aug 04 MySQL
MySQL 逻辑备份 into outfile
May 15 MySQL
MYSQL事务的隔离级别与MVCC
May 25 MySQL
Mysql中的触发器定义及语法介绍
Jun 25 MySQL
MySQL中正则表达式(REGEXP)使用详解
Jul 07 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
长波知识介绍
2021/03/01 无线电
第十一节 重载 [11]
2006/10/09 PHP
简单示例AJAX结合PHP代码实现登录效果代码
2008/07/25 PHP
百度地图API使用方法详解
2015/08/25 PHP
通过代码实例解析PHP session工作原理
2020/12/11 PHP
JS类定义原型方法的两种实现的区别评论很多
2007/09/12 Javascript
cnblogs中在闪存中屏蔽某人的实现代码
2010/11/14 Javascript
jQuery函数的第二个参数获取指定上下文中的DOM元素
2014/05/19 Javascript
js实现当复选框选择匿名登录时隐藏登录框效果
2015/08/14 Javascript
原生JS实现网络彩票投注效果
2016/09/25 Javascript
概述BootStrap中role=&quot;form&quot;及role作用角色
2016/12/08 Javascript
Vue.js学习之过滤器详解
2017/01/22 Javascript
vue2笔记 — vue-router路由懒加载的实现
2017/03/03 Javascript
JavaScript Canvas绘制圆形时钟效果
2020/08/20 Javascript
微信分享调用jssdk实例
2017/06/08 Javascript
JS滚动到指定位置导航栏固定顶部
2017/07/03 Javascript
JavaScript中in和hasOwnProperty区别详解
2017/08/04 Javascript
JS处理数据四舍五入(tofixed与round的区别详解)
2017/10/26 Javascript
vue axios整合使用全攻略
2018/05/24 Javascript
jQuery实现鼠标移入移出事件切换功能示例
2018/09/06 jQuery
vue-video-player 解决微信自动全屏播放问题(横竖屏导致样式错乱问题)
2020/02/25 Javascript
Vue+Java 通过websocket实现服务器与客户端双向通信操作
2020/09/22 Javascript
Python牛刀小试密码爆破
2011/02/03 Python
python监控键盘输入实例代码
2018/02/09 Python
python web框架中实现原生分页
2019/09/08 Python
Python Django2 model 查询介绍(条件、范围、模糊查询)
2020/03/16 Python
HTML5对手机页面长按会粘贴复制禁用的解决方法
2016/07/19 HTML / CSS
canvas环形倒计时组件的示例代码
2018/06/14 HTML / CSS
CAD制图设计师自荐信
2014/01/29 职场文书
学校安全防火方案
2014/06/07 职场文书
董事长秘书工作职责
2014/06/10 职场文书
2014年重阳节敬老活动方案
2014/09/16 职场文书
2016新年慰问信范文
2015/03/25 职场文书
2015年卫生局工作总结
2015/07/24 职场文书
2015年国庆节标语大全
2015/07/30 职场文书
详解python中[-1]、[:-1]、[::-1]、[n::-1]使用方法
2021/04/25 Python