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 29 MySQL
MySQL 分页查询的优化技巧
May 12 MySQL
MySQL中in和exists区别详解
Jun 03 MySQL
MySQL系列之六 用户与授权
Jul 02 MySQL
MySQL系列之十四 MySQL的高可用实现
Jul 02 MySQL
MySQL一些常用高级SQL语句
Jul 03 MySQL
MySQL 5.7常见数据类型
Jul 15 MySQL
MYSQL如何查看进程和kill进程
Mar 13 MySQL
MySQL数据库 安全管理
May 06 MySQL
MySQL聚簇索引和非聚簇索引的区别详情
Jun 14 MySQL
MySQL数据库之内置函数和自定义函数 function
Jun 16 MySQL
MySQL实现字段分割一行转多行的示例代码
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
PHP中使用gettext解决国际化问题的例子(i18n)
2014/06/13 PHP
PHP实现AES256加密算法实例
2014/09/22 PHP
PHP微信红包API接口
2015/12/05 PHP
php mysql_list_dbs()函数用法示例
2017/03/29 PHP
ThinkPHP中create()方法自动验证实例
2017/04/26 PHP
在laravel框架中使用model层的方法
2019/10/08 PHP
htm调用JS代码
2007/03/15 Javascript
什么是JavaScript
2009/08/13 Javascript
JQuery学习笔记 nt-child的使用
2011/01/17 Javascript
jquery默认校验规则整理
2014/03/24 Javascript
Javascript优化技巧之短路表达式详细介绍
2015/03/27 Javascript
JavaScript入门系列之知识点总结
2016/03/24 Javascript
JS回调函数简单用法示例
2017/02/09 Javascript
nodejs实现邮件发送服务实例分享
2017/03/29 NodeJs
详解如何构建Angular项目目录结构
2017/07/13 Javascript
JavaScript实现带有子菜单和控件的slider轮播图效果
2017/11/01 Javascript
小程序封装路由文件和路由方法(5种全解析)
2019/05/26 Javascript
JS回调函数深入理解
2019/10/16 Javascript
Javascript Web Worker使用过程解析
2020/03/16 Javascript
JavaScript 装逼指南(js另类写法)
2020/05/10 Javascript
[01:15]PWL S2开团时刻第二期——他们杀 我就白给
2020/11/25 DOTA
python使用mysqldb连接数据库操作方法示例详解
2013/12/03 Python
Python序列之list和tuple常用方法以及注意事项
2015/01/09 Python
基于python的Tkinter编写登陆注册界面
2017/06/30 Python
Python实现正整数分解质因数操作示例
2018/08/01 Python
python实现抠图给证件照换背景源码
2019/08/20 Python
用python给csv里的数据排序的具体代码
2020/07/17 Python
如何用python免费看美剧
2020/08/11 Python
CSS3制作彩色进度条样式的代码示例分享
2016/06/23 HTML / CSS
英国、欧洲和全球租车服务:Avis英国
2016/08/29 全球购物
const和static readonly区别
2013/05/20 面试题
实习教师自我鉴定
2013/12/12 职场文书
学校联谊活动方案
2014/02/15 职场文书
导游词之澳门妈祖庙
2019/12/19 职场文书
利用Python实现Picgo图床工具
2021/11/23 Python
vue如何清除浏览器历史栈
2022/05/25 Vue.js