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 28 MySQL
mysql升级到5.7时,wordpress导数据报错1067的问题
May 27 MySQL
MySQL 不等于的三种使用及区别
Jun 03 MySQL
python中的mysql数据库LIKE操作符详解
Jul 01 MySQL
MySQL子查询中order by不生效问题的解决方法
Aug 02 MySQL
基于MySql验证的vsftpd虚拟用户
Nov 07 MySQL
一次SQL如何查重及去重的实战记录
Mar 13 MySQL
MySQL分区表管理命令汇总
Mar 21 MySQL
mysql查询结果实现多列拼接查询
Apr 03 MySQL
MySQL数据库如何使用Shell进行连接
Apr 12 MySQL
手把手带你彻底卸载MySQL数据库
Jun 14 MySQL
了解MySQL查询语句执行过程(5大组件)
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
简要剖析PHP的Yii框架的组件化机制的基本知识
2016/03/17 PHP
Laravel等框架模型关联的可用性浅析
2019/12/15 PHP
JS如何将UTC格式时间转本地格式
2013/09/04 Javascript
jQuery使用animate实现ul列表项相互飘动效果示例
2016/09/16 Javascript
JavaScript 深层克隆对象详解及实例
2016/11/03 Javascript
js判断输入框不能为空格或null值的实现方法
2018/03/02 Javascript
vue用Object.defineProperty手写一个简单的双向绑定的示例
2018/07/09 Javascript
5分钟快速掌握JS中var、let和const的异同
2018/09/19 Javascript
vue+webpack中配置ESLint
2018/11/07 Javascript
基于Vue el-autocomplete 实现类似百度搜索框功能
2019/10/25 Javascript
JavaScript console的使用方法实例分析
2020/04/28 Javascript
jQuery编写QQ简易聊天框
2020/08/27 jQuery
Python操作SQLite数据库的方法详解
2017/06/16 Python
python enumerate函数的使用方法总结
2017/11/15 Python
Python爬虫之网页图片抓取的方法
2018/07/16 Python
python通过zabbix api获取主机
2018/09/17 Python
pandas筛选某列出现编码错误的解决方法
2018/11/07 Python
Python逐行读取文件中内容的简单方法
2019/02/26 Python
python爬虫中多线程的使用详解
2019/09/23 Python
python--shutil移动文件到另一个路径的操作
2020/07/13 Python
python实现测试工具(二)——简单的ui测试工具
2020/10/19 Python
Auchan Direct波兰:欧尚在线杂货店
2016/10/19 全球购物
英国男女奢华内衣和泳装购物网站:Figleaves
2017/01/28 全球购物
Veronica Beard官网:在酷、经典和别致之间找到了平衡
2018/01/11 全球购物
牵手50新加坡:专为黄金岁月的单身人士而设的交友网站
2020/08/16 全球购物
销售总监岗位职责
2014/01/04 职场文书
干部培训自我鉴定
2014/01/22 职场文书
出生公证书样本
2014/04/04 职场文书
职业规划实施方案
2014/06/10 职场文书
关于读书的演讲稿600字
2014/08/27 职场文书
贵阳市党的群众路线教育实践活动党(工)委领导班子整改方案
2014/10/26 职场文书
捐助倡议书
2015/01/19 职场文书
公司财务制度:成本管理控制制度模板
2019/11/19 职场文书
python基础之while循环语句的使用
2021/04/20 Python
Python中tkinter的用户登录管理的实现
2021/04/22 Python
一文搞懂Java中的注解和反射
2022/06/21 Java/Android