概述
-- -------------------------------------
-- 子查询(select嵌套)
-- SELECT *FROM t1 WHERE column1=(SELECT column1 FROM t2);
-- -------------------------------------
-- 标量子查询:子查询结果为单个值 (数字,字符串,日期等)
-- 1.查询销售部部门id
select id from dept where name = '销售部';
-- 2.查询销售部所有员工信息
select *from emp where id =(select id from dept where name = '销售部');
-- 3.查询A的入职日期
select entrydate from emp where name = 'A';
-- 3.查询指定日期之后入职的员工信息
select *from emp where entrydate >(select entrydate from emp where name = 'B');-- 大于B入职日期的人
-- -------------------------------------
-- 列子查询:子查询返回的结果只有一列(常用操作符:IN,NOT IN, ANY, SOME,ALL)
-- IN 在指定的集合范围内多选1
-- NOT IN 不在指定的集合范围之内
-- ANY 子查询返回列表中,有一个条件满足即可
-- SOME 与ANY一样,能用SOME的地方均可用ANY
-- ALL 子查询列表中所有值都必须满足
-- 1.查询销售部和市场部的部门id
select id from dept where name = '销售部' or name = '市场部';
-- 2.根据部门信息,查询员工信息
select *from emp where deot_id in (select id from dept where name = '销售部' or name = '市场部');
-- 3.查询比财务部所有人工资都高的员工信息
select *from emp where salary > all (select salary from emp where deot_id in (select id from dept where name = '财务部'));
-- 4.查询比市场部中其中一人工资高的员工信息
-- a.查询市场部所有人工资
select salary from emp where deot_id = (select id from dept where name = '市场部');
-- b.查询比市场部中其中一人工资高的员工信息
select *from emp where salary >any (select salary from emp where deot_id = (select id from dept where name = '市场部'));
-- ---------------------------------------
-- 行子查询:子查询返回的结果为一行(返回的结果是一行,也可以是多列)
-- 常用操作符:=,<>,IN,NOT IN
-- 1. 查询与A的薪资及直属领导相同的员工信息
-- a.查询A的薪资及直属领导
select salary,mangerid from emp where name='A';
-- b.查询与A的薪资及直属领导相同的员工信息
select *from emp where (mangerid ,salary)=((select mangerid from emp where name='A') ,(select salary from emp where name='A'));
-- 新的写法,类似于数组
-- ---------------------------------------
-- 表子查询:子查询返回的结果是多行多列的
-- 常用操作符:IN
-- 1. 查询与A,D的薪资及职位相同的员工信息
-- a. 查询与A,D的薪资及职位
select job,salary from emp where name='A' or name='D';
-- b. 查询与A,D的薪资及职位相同的员工信息
select *from emp where (job,salary) in (select job,salary from emp where name='A' or name='D');
-- in 多选一,只有能满足一行的条件就可以了
-- 2. 查询入职日期是‘2005-1-1’之后的员工信息,及其部门信息
-- a. 查询入职日期是‘2005-1-1’之后的员工信息
select *from emp where entrydate>'2005-1-1';
-- b. 查询入职日期是‘2005-1-1’之后的员工信息,及其部门信息
select e.* ,dept.* from (select *from emp where entrydate>'2005-1-1') e left join dept on e.deot_id=dept.id;
-- 把子查询的结果作为一个临时的表,然后使用左外连接进行查询
最后
以上就是高高咖啡豆为你收集整理的子查询(select嵌套)的全部内容,希望文章能够帮你解决子查询(select嵌套)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复