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 kill不掉线程的原因
May 07 MySQL
MySQL中连接查询和子查询的问题
Sep 04 MySQL
MySQL数据库中varchar类型的数字比较大小的方法
Nov 17 MySQL
如何避免mysql启动时错误及sock文件作用分析
Jan 22 MySQL
Mysql分析设计表主键为何不用uuid
Mar 31 MySQL
详细聊一聊mysql的树形结构存储以及查询
Apr 05 MySQL
MySQL数据库如何使用Shell进行连接
Apr 12 MySQL
MySQL创建管理LIST分区
Apr 13 MySQL
MySQL时区造成时差问题
Apr 13 MySQL
MySQL 自动填充 create_time 和 update_time
May 20 MySQL
MySQL数据库实验实现简单数据库应用系统设计
Jun 21 MySQL
SQLServer常见数学函数梳理总结
Aug 05 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 加密与解密的斗争
2009/04/17 PHP
PHP采用get获取url汉字出现乱码的解决方法
2014/11/13 PHP
thinkPHP5.0框架开发规范简介
2017/03/25 PHP
PHP中PDO事务处理操作示例
2018/05/02 PHP
Javascript 继承机制的实现
2009/08/12 Javascript
jQuery动态效果显示人物结构关系图的方法
2015/05/07 Javascript
js确认框confirm()用法实例详解
2016/01/07 Javascript
html5+javascript实现简单上传的注意细节
2016/04/18 Javascript
javascript解决小数的加减乘除精度丢失的方案
2016/05/31 Javascript
总结JavaScript的正则与其他语言的不同之处
2016/08/25 Javascript
JS禁止查看网页源代码的实现方法
2016/10/12 Javascript
Angular2从搭建环境到开发步骤详解
2016/10/17 Javascript
JavaScript+HTML5实现的日期比较功能示例
2017/07/12 Javascript
VueJS组件之间通过props交互及验证的方式
2017/09/04 Javascript
Angular resolve基础用法详解
2018/10/03 Javascript
JS XMLHttpRequest原理与使用方法深入详解
2020/04/30 Javascript
快速了解Vue父子组件传值以及父调子方法、子调父方法
2020/07/15 Javascript
vant-ui AddressEdit地址编辑和van-area的用法说明
2020/11/03 Javascript
跟老齐学Python之玩转字符串(2)更新篇
2014/09/28 Python
Python数据结构之栈、队列的实现代码分享
2017/12/04 Python
用Python删除本地目录下某一时间点之前创建的所有文件的实例
2017/12/14 Python
基于循环神经网络(RNN)实现影评情感分类
2018/03/26 Python
浅谈Django中的数据库模型类-models.py(一对一的关系)
2018/05/30 Python
opencv python 傅里叶变换的使用
2018/07/21 Python
Django使用redis缓存服务器的实现代码示例
2019/04/28 Python
python实现指定ip端口扫描方式
2019/12/17 Python
Python3实现飞机大战游戏
2020/04/24 Python
美国新蛋IT数码商城:Newegg.com
2016/07/21 全球购物
委托与事件是什么关系?为什么要使用委托
2014/04/18 面试题
《灯光》教学反思
2014/02/08 职场文书
家长对学生的评语
2014/04/18 职场文书
消防安全宣传标语
2014/06/07 职场文书
计划生育证明格式范本
2014/09/12 职场文书
退税申请报告怎么写
2015/05/18 职场文书
大学生党课心得体会
2016/01/07 职场文书
python中的mysql数据库LIKE操作符详解
2021/07/01 MySQL