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 Innodb关键特性之插入缓冲(insert buffer)
Apr 08 MySQL
MySQL sql_mode修改不生效的原因及解决
May 07 MySQL
详解GaussDB for MySQL性能优化
May 18 MySQL
如何自己动手写SQL执行引擎
Jun 02 MySQL
解决mysql的int型主键自增问题
Jul 15 MySQL
彻底解决MySQL使用中文乱码的方法
Jan 22 MySQL
mysql中DCL常用的用户和权限控制
Mar 31 MySQL
数据分析数据库ClickHouse在大数据领域应用实践
Apr 03 MySQL
mysql 乱码 字符集latin1转UTF8
Apr 19 MySQL
SQLServer常见数学函数梳理总结
Aug 05 MySQL
MySql统计函数COUNT的具体使用详解
Aug 14 MySQL
DQL数据查询语句使用示例
Dec 24 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
2006/12/14 PHP
使用PHPMYADMIN操作mysql数据库添加新用户和数据库的方法
2010/04/02 PHP
php中实现简单的ACL 完结篇
2011/09/07 PHP
PHP实现多图上传(结合uploadify插件)思路分析
2016/11/30 PHP
PHP缓存工具XCache安装与使用方法详解
2018/04/09 PHP
PHP使用Curl实现模拟登录及抓取数据功能示例
2018/04/27 PHP
PHP实现的ID混淆算法类与用法示例
2018/08/10 PHP
PHP yield关键字功能与用法分析
2019/01/03 PHP
javascript循环变量注册dom事件 之强大的闭包
2010/09/08 Javascript
SeaJS入门教程系列之SeaJS介绍(一)
2014/03/03 Javascript
Nodejs实现多人同时在线移动鼠标的小游戏分享
2014/12/06 NodeJs
webapp框架AngularUI的demo改造之路
2014/12/21 Javascript
Javascript中的五种数据类型详解
2014/12/26 Javascript
使用VS开发 Node.js指南
2015/01/06 Javascript
javascript实现10个球随机运动、碰撞实例详解
2015/07/08 Javascript
简单实现jQuery进度条轮播实例代码
2016/06/20 Javascript
js实现表单提交后不重新刷新当前页面
2016/11/30 Javascript
微信小程序 css使用技巧总结
2017/01/09 Javascript
vue2.0模拟锚点的实例
2018/03/14 Javascript
Vue 菜单栏点击切换单个class(高亮)的方法
2018/08/22 Javascript
搭建基于express框架运行环境的方法步骤
2018/11/15 Javascript
vue组件开发props验证的实现
2019/02/12 Javascript
node.js中 redis 的安装和基本操作示例
2020/02/10 Javascript
Python的Flask框架与数据库连接的教程
2015/04/20 Python
Python中关于Sequence切片的下标问题详解
2017/06/15 Python
python监控键盘输入实例代码
2018/02/09 Python
python中文编码与json中文输出问题详解
2018/08/24 Python
Python操作注册表详细步骤介绍
2020/02/05 Python
css3中新增的样式使用示例附效果图
2014/08/19 HTML / CSS
HTML5中form如何关闭自动完成功能的方法
2018/07/02 HTML / CSS
岗位职责定义及内容
2013/11/08 职场文书
护理专业毕业生自我鉴定总结
2014/03/24 职场文书
《数星星的孩子》教学反思
2014/04/11 职场文书
关爱留守儿童标语
2014/06/18 职场文书
初中同学会活动方案
2014/08/22 职场文书
redis限流的实际应用
2021/04/24 Redis