我是靠谱客的博主 高高咖啡豆,最近开发中收集的这篇文章主要介绍子查询(select嵌套),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

-- -------------------------------------
--  子查询(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嵌套)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部