12.4数据库子查询 一个查询嵌套另一个查询

本文详细介绍了SQL子查询的四种类型:标量子查询、列子查询、行子查询和表子查询,并通过实际案例展示了如何在IT技术部入职员工数据中运用子查询计算财务部门的平均收入和收入总和。
摘要由CSDN通过智能技术生成

一、什么是子查询?

一个查询嵌套另一个查询

例如:题目It技术部入职员工的员工号?

select dept1 from dept where dept_name="iT技术"; #dept 中"iT技术"的编号103

select sid from emp where dept2=103 #103=前面的语句
select sid from emp where dept2=(select dept1 from dept where dept_name="iT技术" )

二、子查询分类?

1、标量子查询   (返回一个值)一行一列

2、列子查询(返回一列多行)

3、行子查询(返回一行,多列)

4、表子查询(返回一个表)   重点

三、详细讲解?

1、标量子查询(返回一个值)

标量子查询,把一个sql执行返回的一个值,作为另一个sql的条件,得到的结果是一行一列,一般出现在where之后

例如:

select   sid  from emp where  dept2=(select dept1 from  dept where  dept_name="iT技术" )

备注点:标量子查询允许使用比较符号

>,< ,=,!=,>=,=< ,<>

2、列子查询(返回一列值)

定义:返回的结果是一列值

select dept1 from  dept where  dept_name="iT技术" or dept_name="财务" ;    #结果:101 ,103

select   sid  from emp where  dept2  in (select dept1 from  dept where  dept_name="iT技术" or dept_name="财务"  )

 3、行子查询(返回一行多列)

指子查询返回的结果是一行多列 ,一般出现在where后面

select  age,incoming  from  emp where  name="刘十"

select * from emp where (age,incoming) =any (select age,incoming from emp where name="刘十")

 4、表子查询(重点)

返回的结果是一个表(多行多列),一般在from  后面

 案例1:将两个表合成一个表,在from后面使用

select * from dept as a inner join emp as b on a.dept1=b.dept2 where dept_name='财务'

select max(c.incoming) from (select * from dept as a inner join emp as b on a.dept1=b.dept2 where dept_name='财务')as c

案例2:

select * from (SELECT sid,name,dept_name,dept1 from dept left join emp on dept.dept1=emp.dept2)s ,(SELECT sid,name,dept_name,dept2 from dept left join emp on dept.dept1=emp.dept2)c where s.dept1=c.dept2
and s.dept_name= "财务"

 注意:

给表取别名  as   临时表名,as可以省略

生成一个临时表  as   临时表名,as也可以省略

1.列出每个部门的平均收入及部门名称;

 2.财务部门的收入总和; 

方法1:先合表当作一个临时表,在对临时表的数据进行操作

select sum(incoming) from (select  *  from   dept    right    join emp   on   dept.dept1=emp.dept2 ) as a where dept_name='财务'

方法2:先合表在接条件

select sum(incoming) from dept inner join emp on dept.dept1=emp.dept2 where dept_name="财务"

方法3:

Select sum(incoming) from (select * from dept as a left join emp as b on a.dept1=b.dept2 where a.dept_name= "财务");

方法4:

select sum(incoming)from emp where dept2=(select dept1 from dept where dept_name="财务");

3.It技术部入职员工的员工号 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值