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之DML语言
Apr 05 MySQL
mysql死锁和分库分表问题详解
Apr 16 MySQL
MySQL创建高性能索引的全步骤
May 02 MySQL
新手必备之MySQL msi版本下载安装图文详细教程
May 21 MySQL
详解MySQL中的pid与socket
Jun 15 MySQL
为什么代码规范要求SQL语句不要过多的join
Jun 23 MySQL
MySql 8.0及对应驱动包匹配的注意点说明
Jun 23 MySQL
MySQL 十大常用字符串函数详解
Jun 30 MySQL
解决Mysql的left join无效及使用的注意事项说明
Jul 01 MySQL
解决Mysql报错 Table 'mysql.user' doesn't exist
May 06 MySQL
手把手带你彻底卸载MySQL数据库
Jun 14 MySQL
SQL中去除重复数据的几种方法汇总(窗口函数对数据去重)
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
使用PHPMYADMIN操作mysql数据库添加新用户和数据库的方法
2010/04/02 PHP
初识Laravel
2014/10/30 PHP
ThinkPHP提示错误Fatal error: Allowed memory size的解决方法
2015/02/12 PHP
laravel邮件发送的实现代码示例
2020/01/31 PHP
javascript IE中的DOM ready应用技巧
2008/07/23 Javascript
jquery validator 插件增加日期比较方法
2010/02/21 Javascript
JS自动适应的图片弹窗实例
2013/06/29 Javascript
判断一个对象是否为jquery对象的方法
2014/03/12 Javascript
js数组去重的方法汇总
2015/07/29 Javascript
windows下安装nodejs及框架express
2015/08/07 NodeJs
浅谈jquery采用attr修改form表单enctype不起作用的问题
2016/11/25 Javascript
vue.js事件处理器是什么
2017/03/20 Javascript
webpack构建vue项目的详细教程(配置篇)
2017/07/17 Javascript
cocos creator Touch事件应用(触控选择多个子节点的实例)
2017/09/10 Javascript
mac上配置Android环境变量的方法
2018/07/08 Javascript
layui结合form,table的全选、反选v1.0示例讲解
2018/08/15 Javascript
浅谈vue项目4rs vue-router上线后history模式遇到的坑
2018/09/27 Javascript
vue-quill-editor的使用及个性化定制操作
2020/08/04 Javascript
对vue生命周期的深入理解
2020/12/03 Vue.js
Python开发的单词频率统计工具wordsworth使用方法
2014/06/25 Python
Python查找相似单词的方法
2015/03/05 Python
python使用wmi模块获取windows下的系统信息 监控系统
2015/10/27 Python
Python 正则表达式入门(初级篇)
2016/12/07 Python
遗传算法之Python实现代码
2017/10/10 Python
python利用多种方式来统计词频(单词个数)
2019/05/27 Python
如何用Python制作微信好友个性签名词云图
2019/06/28 Python
python flask几分钟实现web服务的例子
2019/07/26 Python
Python性能分析工具Profile使用实例
2019/11/19 Python
Python连接Oracle之环境配置、实例代码及报错解决方法详解
2020/02/11 Python
Python实现名片管理系统
2020/02/14 Python
基于opencv实现简单画板功能
2020/08/02 Python
甜美蛋糕店创业计划书
2014/01/30 职场文书
优秀学生获奖感言
2014/02/15 职场文书
国庆宣传标语
2014/06/30 职场文书
幼儿园教师求职信
2015/03/20 职场文书
Python深度学习之Pytorch初步使用
2021/05/20 Python