dcsxlh

导航

 

一、子查询

定义:一个查询中嵌套另一个查询

二、子查询的分类
(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='财务' );

案例:

(1)查找张三所在的部门名称;

select dept_name from dept WHERE dept1 = (SELECT dept2 from emp WHERE name = '张三');

 

2、列子查询(返回的结果是一个列)
定义:返回的是一列值
注意点:通常在where 之后使用,使用是in 或not in ,不运行使用比较运算符,因为它有多个值

 

案例:3.销售部和财务部门入职员工的员工号、
步骤1:
select  dept1 from  dept  where  dept_name="财务" or  dept_name="销售" 
步骤2:SELECT sid from emp where dept2 in (SELECT dept1 from dept where dept_name='销售"' or dept_name='IT技术') ;

 案例:

求员工收入小于7000元的员工部门名称?

select dept_name from dept where dept1 in (select dept2 from emp where incoming < 7000);


3、行子查询
定义:返回的结果是一行多列,一般出现在where 的后面

步骤1:找出张三多年龄 和工资一样的 :


select age,incoming from emp where name="张三"

 


步骤2:在emp中找到年里和入职时间相同的数据;
案例


select * from emp where (age,incoming) in(select age,incoming from emp where name="张三")

 

4、表子查询(重点)
定义:返回的是多行多表 (返回的就是一个表),一般接在from 的后面,返回的是一个表

临时表:

as 临时表名

步骤:
(1)select * from ( 合表) where 条件
案例:

select * from (
select * from dept left join emp on dept.dept1 = emp.dept2
)s where s.name="张三"


案例:财务部门的收入总和;
SELECT sum(s.incoming) from (
select * from dept INNER JOIN emp on dept.dept1=emp.dept2 ) s where s.dept_name='财务'

(2)
案例:.列出每一个部门中年纪最大的员工姓名,部门名称;
方法:

select * from (
select * from dept left join emp on dept.dept1 = emp.dept2
)s where s.name="张三"
select dept1,max(age) from dept left join emp on dept.dept1 = emp.dept2 group by dept1

 

 案例:


select * from dept left join emp on dept.dept1 = emp.dept2 where (dept1,age)in (select dept1,max(age) from dept left join emp on dept.dept1 = emp.dept2 group by dept1)

 

案例:

select max(d.age) from (select * from dept left join emp on dept.dept1 = emp.dept2 where
dept_name="财务" )d

posted on 2025-04-29 17:35  多测师_肖sir  阅读(90)  评论(0)    收藏  举报