mysql连接查询详解
作者:one?2?1? 时间:2024-01-15 16:42:11
1.连接查询
作用:当查询结果的列来源于多张表时,需要将多张表连接成一个大的数据集,再选择合适的列返回
2、连接类型
内连接
定义:
内连接查询:查询结果为两个表匹配到的数据
语法1:
select * from 表1
inner join 表2 on 表1.列 = 表2.列
例:查询学生信息及学生成绩
语法2:
select * from 表1,表2 on 表1.列 = 表2.列
注:通常不使用此语法,效率较低
3个表连接
-- 查询学生信息及学生的课程对应的成绩
显示指定列
左连接
定义:
查询的结果为两个表匹配到的数据加左表特有的数据,对于右表中不存在的数据(匹配不到)使用null填充
语法:
select * from 表1
left join 表2 on 表1 .列 = 表2.列
例:
查询所有学生的成绩,包括没有成绩的学生
例:
查询所有学生的成绩,包括没有成绩的学生,需要显示课程名
右连接
定义:
右连接查询:查询结果为两个表匹配到的数据加右表特有的数据,对于左边中不存在的数据使用null填充
语法:
select * from 表1
right join 表2 on 表1 .列 = 表2.列
例:查询所有学生的成绩,包括没有成绩的学生
例:
查询所有学生的成绩,包括没有成绩的学生,需要显示课程名
自关联
定义
连接查询的一种应用,对同一个表查询多次,把查询多次得到的结果连接组成新的结果
主要应用场景:数据有上下级关系,并且存于同一个表中
例:查询河南省的所有城市
例:查询郑州市的所有区县
例:查询河南省所有区县
子查询
定义
在一个select 语句中,嵌入另外一个select语句,那么嵌入的那个select语句称之为子查询语句
主查询
外城的select称之为主查询语句
主查询和子查询的关系
子查询是嵌入到主查询中子查询是辅助主查询的,要么充当条件,要么充当数据源子查询是可以独立存在的语句是一条转正的select语句
子查询充当条件
以下例子中子查询返回结果只有一个值(一行一列),这种称之为标量子查询
例1:查询大于平均年龄的学生
-- 查询班里学生的平均年龄
SELECT AVG(age) FROM students --21.5833
-- 查询大于平均年龄的学生
SELECT * from students where age > 21.5833
SELECT * FROM students where age >(SELECT AVG(age) FROM students);
以下例子返回数据结果是一列数据(一列多行),这种称之为列子查询
例: 查询18岁学生的成绩,要求显示成绩
-- 学生表中查询18岁学生的学号
SELECT studentNo from students WHERE age = 18
-- 成绩表中根据学号查询成绩
SELECT * FROM scores where studentNo in ('002','006' )
SELECT * FROM scores where studentNo in (SELECT studentNo from students WHERE age = 18 )
以下例子查询的结果是一行(一行多列),这种称之为行子查询
例:查询和王昭君同班、同龄的学生信息
SELECT class,age from students where name = '王昭君'
SELECT * from students where class = '1班' and age = 20
SELECT * from students where (class,age) = ('1班' , '20')
SELECT * from students where (class,age) = (SELECT class,age from students where name = '王昭君')
子查询充当数据源
以下例子子查询返回的结果是多行多列(相当于一个表),这种称之为表级子查询;
例:查询数据库和系统测试的课程成绩
子查询 * 定关键字使用
in范围
格式:主查询where条件in(列子查询)
any|some任意一个
格式:主查询where 列 = any(列子查询)
在条件查询的结果中匹配任意一个几个,等价于in
all
格式:主查询where列 = all(列子查询):等价于里面所有
格式:主查询where列<>all(列子查询):不等于其中所有
来源:https://blog.csdn.net/weixin_45490820/article/details/124470657
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
浅析Python中的多重继承
![](https://img.aspxhome.com/file/2023/0/127080_0s.png)
在ASP.NET 2.0中操作数据之二十七:创建自定义排序用户界面
![](https://img.aspxhome.com/file/2023/0/76350_0s.png)
Python数字图像处理代数之加减乘运算
![](https://img.aspxhome.com/file/2023/7/82667_0s.png)
微信小程序实现顶部搜索框
![](https://img.aspxhome.com/file/2023/2/132522_0s.jpg)
Python文件的操作处理详解
![](https://img.aspxhome.com/file/2023/8/112148_0s.png)
在Python中使用matplotlib模块绘制数据图的示例
![](https://img.aspxhome.com/file/2023/4/83714_0s.png)
分享整理的12条sql语句连同数据
通过实例解析Python RPC实现原理及方法
![](https://img.aspxhome.com/file/2023/7/70177_0s.png)
Python闭包技巧介绍
python区块链简易版交易实现示例
![](https://img.aspxhome.com/file/2023/0/107280_0s.png)
MySQL中通过EXPLAIN如何分析SQL的执行计划详解
![](https://img.aspxhome.com/file/2023/3/76443_0s.png)
Python MongoDB 插入数据时已存在则不执行,不存在则插入的解决方法
Numpy中的repeat函数使用
![](https://img.aspxhome.com/file/2023/1/100771_0s.png)
Python数据结构与算法之算法分析详解
![](https://img.aspxhome.com/file/2023/7/125057_0s.png)
PL/SQL 类型格式转换
pycharm 激活码及使用方式的详细教程
![](https://img.aspxhome.com/file/2023/1/120911_0s.png)
SqlServer 表连接教程(问题解析)
![](https://img.aspxhome.com/file/2023/1/122381_0s.jpg)
在Python的Django框架中调用方法和处理无效变量
在VSCode中添加Python解释器并安装Python库的方法
![](https://img.aspxhome.com/file/2023/1/112431_0s.png)