子查询:
什么是子查询?一个查询嵌套另一个查询
子查询分
1. 标量子查询 (返回一个值)
标量子查询
把一个sql执行返回的一个值,作为另一个sql的一个条件
得到的结果是一行一列,一般出现在where之后
注意点:标量子查询允许使用的符号
=,!=,> ,>=,=<,<
举例1:查询财务部门所有员工信息
select * from emp where dept2=(select dept1 from dept where dept_name="财务" ) ;
举例2:查询张三所在的部门
select dept_name from dept where dept1=(select dept2 from emp where ame="张三" )
2. 列子查询 (返回一个列)
定义:返回的是一列值
注意点:通常在where 条件的后使用,使用的是in 或not in ,不允许使用=,>,<
例题:
求出工资>2000部门
举例1:
select DISTINCT(dept2) from emp where incoming >5000 ;
select dept_name from dept where dept1 in (select DISTINCT(dept2) from emp where incoming >5000 )
3. 行子查询 (返回一行多列)
指子查询返回的结果集是一行多列
一般出现在where后
举例1:查询和刘十,年龄和工资一样的数据
select age ,dept2,incoming from emp1 where name="牛十
select * from emp1 where (age,dept2) =any (select age ,dept2 from emp1 where name="牛十");
举例二:查询和刘十,年龄和工资一样的数据
select age, incoming from emp where name="刘十"
select * from emp where (age ,incoming)=( select age, incoming from emp where name="刘十")
4. 表子查询 (返回一个表) from的后面指子查询返回的结果是一个表(多行多列)
举例1: 查询每个部门最高工资的部门名称
select dept2,max(incoming) from emp group by dept2
select dept_name ,s.c from dept ,( select dept2,max(incoming) c from emp group by dept2) s where dept.dept1=s.dept2 ;
select DISTINCT(dept_name) from dept inner join (select dept2,age from emp where dept2=101 )as s on dept.dept1=s.dept2 ;
举例2:查询出匹配的部门名称,年龄和工资和刘十一样,
select dept_name from dept ,( select * from emp where (age ,incoming) =any( select age, incoming from emp where name="刘十")) s where dept1=s.dept2 ;
注意:临时表 取别名 ,聚合函数取别名 ,
1、带in关键字的子查询
一个查询预计的条件可能落在另一select语句的查询结果中
2、比较运算符的子查询
= ,> ,>,>= ,=<
3、带any关键字的子查询(拓展知识)
=any 与 in 等效
与比较运算符联合使用,表示子查询返回的任何值比较为真,则返回真
4、some(拓展知识)(拓展知识)
5、带all的关键字的字查询
!=all 或者 <>all 与 not in 等效
表示满足所有的条件
6、带exists 关键字的子查询 (拓展知识)
理解为:将主查询的数据,放到子查询中做条件验证,根据验证结果,来决定主查询的是数据结构
在子查询到记录,则进行外层查询,否则,不执行外层查询
7、合并查询 union 去除重复的记录
union all 不会去除重复的记录
注意:
1、子查询必须放在一对小括号内;
2、“=”是比较运算符,还可以与其他比较运算符一起使用,要求子查询的列只有一个一行一列
3、子查询通常作为where的条件,表子查询一般在from的后面
4、子查询不能包含order by的语句
select a.dept1 from (select * from dept where dept_name="财务" or dept_name="销售")a where dept1>101;
select DISTINCT(dept_name) from dept inner join (select dept2,age from emp where dept2=101 )as s on dept.dept1=s.dept2 ;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架