当前位置: 首页 > news >正文

MySQL—子查询

目录

▐ 子查询概述

▐ 准备工作

▐ 标量子查询

▐ 列子查询

▐ 表子查询

▐ 多信息嵌套


▐ 子查询概述

 •  子查询也称嵌套查询,即在一个查询语句中又出现了查询语句

 •  子查询可以出现在from 后面 或where后面

 •  出现在 from 后称表子查询,结果集一般为多行多列(把查询结果继续当做一张表)

 •  出现在 where 后称标量子查询 列子查询 结果集只有一行一列,或一行多列.

 •  标量子查询的结果集只有一行一列;列子查询的结果集是一列多行 (区别)

 接下来我会通过一个实例,通过代码给大家演示子查询

▐ 准备工作

📰 创建一个员工表(employee)和一个部门表(dept),两个表是关联关系.

-- 创建一个员工表employee(手动加入数据)
CREATE TABLE employee(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(10),
gender VARCHAR(1),
age VARCHAR(3),
money INT ,
deptid INT,
CONSTRAINT FK_employee_dept_on_deptid FOREIGN KEY (deptid) REFERENCES dept(id)
)
-- 创建一个部门表dept并插入数据
CREATE TABLE dept(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(10)
)

📰 我们将在此表的基础上进行子查询

▐ 标量子查询

 •  结果集:只有一行一列

 •  位置:where后

🏷️例如要查询工资最高的员工

SELECT * FROM employee WHERE money =  (SELECT MAX(money) FROM employee)

代码解读:📰

先查询出工资最高是多少(一行一列,最高工资肯定是一个数)

SELECT  MAX(money)  FROM  employee 

再将此作为条件再进行一次查询

SELECT * FROM  employee  WHERE  money =  (SELECT MAX(money) FROM employee)

▐ 列子查询

 •  结果集:一列多行

 •  位置:where后

🏷️例如要查询工资在2000~3000的员工信息

 SELECT * FROM employee WHERE money IN (SELECT money FROM employee WHERE money>2000 AND money<3000)

代码解读:📰

先查询出工资在2000~3000之间的值(一列多行,这个范围的工资值有多个)

SELECT  money  FROM  employee  WHERE  money>2000 AND money<3000

再将此作为条件再进行一次查询,只要工资符合条件的员工就被查询出来

 SELECT * FROM employee WHERE money IN (条件,也就是第一次的查询结果)

▐ 表子查询

 •  结果集:多列多行(可以看做又一张表)

 •  位置:from后

🏷️例如要查询同龄的年龄

 SELECT * FROM (SELECT age,COUNT(*)c FROM employee GROUP BY age)t WHERE  t.c>1

代码解读:📰

通过年龄对员工表分组,并计数每个年龄的人数(多行多列)

SELECT  age, COUNT(*)   FROM  employee  GROUP  BY  age

再将此结果当做一个新表进行二次查询 同龄的年龄,条件就是count(*)>1 )

SELECT * FROM (SELECT age,COUNT(*)c FROM employee GROUP BY age)t WHERE  t.c>1     

< 这里要注意对表的重命名 >

▐ 多信息嵌套

🏷️例如要查询出每个部门工资最高的员工信息

 SELECT * FROM employee s INNER JOIN (SELECT  MAX(money)maxmoney,deptid FROM employee GROUP BY deptid)tON s.money = t.maxmoney AND s.deptid = t.deptid

代码解读:📰

先按部门 分组查询出每个部门的最高工资是多少

SELECT  MAX(money)maxmoney, deptid   FROM  employee  GROUP BY  deptid

再将此查询结果与员工表关联查询

SELECT * FROM  employee s

INNER JOIN                            //内连接

(SELECT  MAX(money)maxmoney, deptid  FROM  employee  GROUP  BY deptid ) t
ON  s.money = t.maxmoney  AND  s.deptid = t.deptid 
  //查询条件

▐ 结语:

       希望这篇关于MySQl数据库—子查询的介绍能对大家有所帮助,欢迎大佬们留言或私信与我交流~~学海漫浩浩,我亦苦作舟!大家一起学习,一起进步!

本人微信: g2279605572


http://www.lryc.cn/news/348012.html

相关文章:

  • ffmpeg 读取流报错: Non-monotonous DTS in output stream
  • yo!这里是socket网络编程相关介绍
  • polars学习-03 数据类型转换
  • IDC 权威认可!Aloudata 入选金融领域中数据管理分析服务最佳实践案例
  • RSA与AES算法比较及应用场景推荐
  • 揭秘 HTTP 代理:增强在线活动的安全性和匿名性
  • 【经验】mysql冷热数据分离
  • 【机器学习-06】Scikit-Learn机器学习工具包进阶指南:机器学习分类模型实战与数据可视化分析
  • 蓝桥杯国赛每日一题:日志统计(双指针)
  • 佛山MES公司(盈致mes系统服务商)助力企业实现智能制造
  • 算法设计课第五周(贪心法实现活动选择问题)
  • Ubuntu20.04右键打不开终端
  • XML元素
  • 融入新科技的SLM27211系列 120V, 3A/4.5A高低边高频门极驱动器兼容UCC27284,MAX15013A
  • 代码随想录算法训练营Day 38| 动态规划part01 | 理论基础、509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯
  • CSS拟物按钮
  • websevere服务器从零搭建到上线(三)|IO多路复用小总结和服务器的基础框架
  • 解决宝塔Nginx和phpMyAdmin配置端口冲突问题
  • 光伏EPC管理软件都有哪些功能和作用?
  • BGP学习一:关于对等体建立和状态组改变
  • ETL工具kettle(PDI)入门教程,Transform,Mysql->Mysql,Csv->Excel
  • 常见地图坐标系间的转换算法JavaScript实现
  • 基于python的大麦网自动抢票工具的设计与实现
  • 2024年5月树莓集团快讯
  • 网站localhost和127.0.0.1可以访问,本地ip不可访问解决方案
  • Docker Dockerfile如何编写?
  • Python数独游戏
  • 24 | MySQL是怎么保证主备一致的?
  • 2.数据类型与变量(java篇)
  • QT设计模式:桥接模式