肖SIR__数据库之子查询__13.0
子查询
=================
一、子查询
定义:一个查询中嵌套另一个查询
---------------------------------------------
二、子查询的分类
(1)标量子查询
(2)列子查询
(3)行子查询
(4)表子查询(运用多)
---------------------------------------------
三、子查询详解
(1)标量子查询(返回一个值)
标量子查询:把一个sql 执行返回的一个值,作为另一个sql的条件,得到的结果是一行一列,一般出现在where之后,
备注:标量子查询允许使用的比较运算符号:
=,!=,>,<,>=,<=
案例:2.财务部门的收入总和;
步骤1:查询财务部门的编号
select dept1 from dept where dept_name='财务';
步骤2:将查询出来的一行一列作为条件,
select sum(incoming) from emp where dept2=(select dept1 from dept where dept_name='财务' );
2、列子查询(返回的结果是一个列)
定义:返回的是一列值
注意点:通常在where 之后使用,使用是in 或not in ,不运行使用比较运算符,因为它有多个值
案例:3.It技术部和财务部门入职员工的员工号、
步骤1:
SELECT dept1 from dept where dept_name='财务' or dept_name='IT技术';
步骤2:SELECT sid from emp where dept2 in (SELECT dept1 from dept where dept_name='财务' or dept_name='IT技术') ;
报错:
3、行子查询
定义:返回的结果是一行多列,一般出现在where 的后面
案例:找出与牛八 年龄和入职时间一样的员工姓名?
步骤1:找出牛八的多年龄 和入职时间 :select age,woektime_start from emp where name="牛八" ;
步骤2:在emp中找到年里和入职时间相同的数据;
select name from emp where (age,woektime_start) in (select age,woektime_start from emp where name="牛八" ) ;
4、表子查询(重点)
定义:返回的是多行多表 (返回的就是一个表),一般接在from 的后面,返回的是一个表
临时表:
as 临时表名
步骤:
(1)select * from ( 合表) where 条件
案例:财务部门的收入总和;
SELECT sum(s.incoming) from (
方法:select * from dept INNER JOIN emp on dept.dept1=emp.dept2 ) s where s.dept_name='财务'
(2)select * from 表1 inner join ( )
案例:.It技术部和财务部门入职员工的员工号
方法:select sid from emp INNER JOIN (select * from dept where dept_name='财务' or dept_name='IT技术' )c ON emp.dept2=c.dept1
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!