定义:子查询指一个查询语句嵌套在另一个查询语句内部,在SELECT子句中先计算子查询,子查询的结果作为外层另一个查询的过滤条件,查询可以基于一个表或者多个表。 这个特性从MySQL 4.1开始引入。
子查询作为过滤条件时需要用()
包裹
select dept_name,count(emp_id) from (select dept_name, emp_id,ename,gender from dept inner join emp_part where id=dept_id and gender='男')b group by dept_name;
SELECT * FROM emp_part WHERE dept_id IN (SELECT id FROM dept WHERE dept_location = '北京')
#查询出薪资大于公司平均薪资的员工id,姓名及薪资 SELECT emp_id,ename,salary FROM emp_part WHERE salary > (SELECT AVG(salary) FROM emp_part);
如果一整句查询语句中,某个子查询的结果会被多个父查询引用,通常建议将共用的子查询用简写表示出来
语法: with [表名] as (select…)
# 查询出部门平均薪资大于公司平均薪资的部门名称,部门主管,所在地及部门平均薪资 # 不使用 with ...as select dept_id,dept_name,dept_manager,dept_location,avg_salary from dept inner join (select dept_id,avg(salary) avg_salary from emp_part group by dept_id)b on id=dept_id and avg_salary > (select avg(avg_salary) from (select dept_id,avg(salary) avg_salary from emp_part group by dept_id)b); # 使用 with ...as with dept_avg as (select dept_id,avg(salary) avg_salary from emp_part group by dept_id)select dept_id,dept_name,dept_manager,dept_location,avg_salary from dept inner join dept_avg on id=dept_id and avg_salary > (select avg(avg_salary) from dept_avg);
Powered by:
博客园
Copyright © 2025 等峰也等你
Powered by .NET 9.0 on Kubernetes
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!