mysql的进阶学习--基础篇--多表查询--子查询

概念

SQL语句中嵌套select语句
子查询的外部语句可以是insert/update/delete/select的任何一个.
也即是说, DML和DQL都可以子查询

根据子查询的结果不同, 分为

标量子查询

常用的操作符是: > < >= <= <>
结果为单个值
例如:
查询销售部的所有员工的信息
select * from emp where dept_id =
(select id from dept where name = '销售部'); 这就是标量子查询

列子查询

结果是一列(是一个字段的一些值, 换言之, 多个标量)
先看几个操作符

操作符说明
in在指定集合范围之内, 多选一
not in不在指定的范围内
any/some子查询返回列表中, 有任意一个满足即可
all子查询返回列表必须都满足

例如:
查询销售部和市场部的所有员工信息
select * from emp where dept_id in
(select id from dept where name = '销售部' or name = '市场部'); 这就是列子查询

再例如:
查询比财务部的所有人工资都高的员工信息
select * from emp where salary > all
(select salary from emp where dept_id =
(select id from dept where name = '财务部') );

再再例如:
查询比研发部的任意一个人工资高的员工信息
select * from emp where salary > some
(select salary from emp where dept_id =
(select id from dept where name = '研发部') );

行子查询

结果是一行(多个字段, 换言之, 单个标量组)
常用的操作符:= <> in not in
例如:
查询和小白的工资和所属领导相同的员工信息
select * from emp where (salary , managerid) =
(select salary , managerid from emp where name = '小白');

表子查询

结果是多行多列(标量组不止一个)
常用的操作符: in
例如:
查询和小白, 小黑的职位和薪资相同的员工的信息
select * from emp where (job, salary) in
(select job , salary from emp where name = '小白' or name = '小黑');

再例如:
查询入职时间是’2001-01-06’之后的员工信息, 及其部门信息
select e.* , d.* from
(select * from emp where entrydate > '2001-01-06' ) e
left outer join
dept d
on e.dept_id = d.id ;

根据子查询的位置, 分为

select之后

from之后

where之后

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值