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 05 MySQL
Mysql 性能监控及调优
Apr 06 MySQL
MySql 缓存查询原理与缓存监控和索引监控介绍
Jul 02 MySQL
mysql事务对效率的影响分析总结
Oct 24 MySQL
SQL语法CONSTRAINT约束操作详情
Jan 18 MySQL
MySQL中int (10) 和 int (11) 的区别
Jan 22 MySQL
MySQL实现配置主从复制项目实践
Mar 31 MySQL
MySQL 数据库 增删查改、克隆、外键 等操作
May 11 MySQL
MySql如何将查询的出来的字段进行转换
Jun 14 MySQL
MySQL索引失效场景及解决方案
Jul 23 MySQL
分享很少见很有用的SQL功能CORRESPONDING
Aug 05 MySQL
详解MySQL的内连接和外连接
May 08 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 伪静态技术原理以及突破原理实现介绍
2013/07/12 PHP
Thinkphp自定义代码生成工具及用法说明(附下载地址)
2016/05/27 PHP
Smarty模板常见的简单应用分析
2016/11/15 PHP
如何通过View::first使用Laravel Blade的动态模板详解
2017/09/21 PHP
基于jQuery制作迷你背词汇工具
2010/07/27 Javascript
js动态添加onload、onresize、onscroll事件(另类方法)
2012/12/26 Javascript
js创建子窗口并且回传值示例代码
2013/07/02 Javascript
js的.innerHTML = &quot;&quot;IE9下显示有错误的解决方法
2013/09/16 Javascript
JavaScript中的常见问题解决方法(乱码,IE缓存,代理)
2013/11/28 Javascript
js 通过cookie实现刷新不变化树形菜单
2014/10/30 Javascript
JavaScript获取按钮所在form表单id的方法
2015/04/02 Javascript
jQuery中(function($){})(jQuery)详解
2015/07/15 Javascript
jQuery实现百度登录框的动态切换效果
2017/04/21 jQuery
Vue2.0 实现歌手列表滚动及右侧快速入口功能
2018/08/08 Javascript
angular将html代码输出为内容的实例
2018/09/30 Javascript
jQuery ajax仿Google自动提示SearchSuggess功能示例
2019/03/28 jQuery
微信小程序云开发实现云数据库读写权限
2019/05/17 Javascript
快速对接payjq的个人微信支付接口过程解析
2019/08/15 Javascript
python 读取txt,json和hdf5文件的实例
2018/06/05 Python
老生常谈python中的重载
2018/11/11 Python
使用opencv将视频帧转成图片输出
2019/12/10 Python
python实现数据结构中双向循环链表操作的示例
2020/10/09 Python
python调用有道智云API实现文件批量翻译
2020/10/10 Python
如何将Pycharm中调整字体大小的方式设置为&quot;ctrl+鼠标滚轮上下滑&quot;
2020/11/17 Python
深入解析HTML5的IndexedDB索引数据库
2015/09/14 HTML / CSS
Smashbox英国官网:美国知名彩妆品牌
2017/11/13 全球购物
亚洲独特体验旅游专家:eOasia
2018/08/15 全球购物
全球性的在线鞋类品牌:Public Desire
2019/04/03 全球购物
财务副总经理工作职责
2013/11/25 职场文书
酒店大堂副理的职责范文
2014/02/13 职场文书
致100米运动员广播稿
2014/02/14 职场文书
2014年最新离婚协议书范本
2014/10/11 职场文书
会计主管岗位职责
2015/04/02 职场文书
2015年“7.11”世界人口日宣传活动方案
2015/05/06 职场文书
六一活动主持词
2015/06/30 职场文书
小学英语教师2015年度个人工作总结
2015/10/14 职场文书