--子查询
--查询中再嵌套一个查询
--内查询 外查询
--比SIMITH 工资高的人信息
select * from emp where sal>(select sal from emp
where ename ='SMITH'
)
--内查询要在外查询之前执行
--内查询的结果是要被外查询使用
--内查询一定要包含在括号内 放在 比较运算符的右侧
--内查询里面一般不使用order by
select * from emp where deptno=
(select deptno from emp where ename='JONES') and ename not in('JONES')--and ename <>'JONES'
--子查询 分类 单行子查询 多行子查询
--子查询 返回值是空
--内查询 返回为空 外查询 也是空
--内查询 返回一行 单行子查询
--使用的单行比较运算符
--= > < <= >= <>
--例 查询ALLEN部门中比CLARK工资高的人的名字 工资
select ename,sal from emp where sal>(select sal from emp where ename='CLARK')
and deptno=(select deptno from emp where ename='ALLEN')
--所有员工中 比公司平均工资要高的人
--在子查询中可以使用分组函数
select * from emp where sal>(select avg(sal) from emp )
--内查询返回的 结果为多行
--多行比较运算符
-- in 满足其中一个即可
--any 和子查询中返回结果的任意一个比较
--all 和子查询中返回的所有的结果都进行比较 全部符合才可
--查询 比30部门中所有人(任意一人)工资都要高的
--其他部门的信息(名字,工资)
select ename,sal from emp
where sal > all(select sal from emp where deptno=30)and deptno <> 30
select * from emp
--1、列出受雇日期早于其直接上级的所有员工
select e1.ename from emp e1,emp e2
select ename from emp e1 where e1.hiredate < (select e2.hiredate from emp e2 where e1.mgr=e2.empno)
--2、列出在部门'SALES'中工作的员工姓名
select ename,dname from emp e,dept d where e.deptno=d.deptno and dname='SALES'
select ename
--3、查询和姓名中包含字母u的员工在相同部门的员工号和姓名
select empno,ename from emp
where deptno in (select deptno from emp where ename like'%U%') and ename not like '%U%'
--4、查询直接上级是king的员工和工资
select e1.ename,e1.sal from emp e1,emp e2 where e1.mgr=e2.empno and e1.ename='King'
select ename,sal from emp where
mgr in (select empno from emp where ename='KING')
--5、查询各部门中工资比
--本部门平均工资高的
--员工的员工号,姓名和工资
--分组查询
select empno,ename,sal from emp e1 where sal>(
select avg(sal) from emp e2 where e1.deptno=e2.deptno group by deptno)
--查询中再嵌套一个查询
--内查询 外查询
--比SIMITH 工资高的人信息
select * from emp where sal>(select sal from emp
where ename ='SMITH'
)
--内查询要在外查询之前执行
--内查询的结果是要被外查询使用
--内查询一定要包含在括号内 放在 比较运算符的右侧
--内查询里面一般不使用order by
select * from emp where deptno=
(select deptno from emp where ename='JONES') and ename not in('JONES')--and ename <>'JONES'
--子查询 分类 单行子查询 多行子查询
--子查询 返回值是空
--内查询 返回为空 外查询 也是空
--内查询 返回一行 单行子查询
--使用的单行比较运算符
--= > < <= >= <>
--例 查询ALLEN部门中比CLARK工资高的人的名字 工资
select ename,sal from emp where sal>(select sal from emp where ename='CLARK')
and deptno=(select deptno from emp where ename='ALLEN')
--所有员工中 比公司平均工资要高的人
--在子查询中可以使用分组函数
select * from emp where sal>(select avg(sal) from emp )
--内查询返回的 结果为多行
--多行比较运算符
-- in 满足其中一个即可
--any 和子查询中返回结果的任意一个比较
--all 和子查询中返回的所有的结果都进行比较 全部符合才可
--查询 比30部门中所有人(任意一人)工资都要高的
--其他部门的信息(名字,工资)
select ename,sal from emp
where sal > all(select sal from emp where deptno=30)and deptno <> 30
select * from emp
--1、列出受雇日期早于其直接上级的所有员工
select e1.ename from emp e1,emp e2
select ename from emp e1 where e1.hiredate < (select e2.hiredate from emp e2 where e1.mgr=e2.empno)
--2、列出在部门'SALES'中工作的员工姓名
select ename,dname from emp e,dept d where e.deptno=d.deptno and dname='SALES'
select ename
--3、查询和姓名中包含字母u的员工在相同部门的员工号和姓名
select empno,ename from emp
where deptno in (select deptno from emp where ename like'%U%') and ename not like '%U%'
--4、查询直接上级是king的员工和工资
select e1.ename,e1.sal from emp e1,emp e2 where e1.mgr=e2.empno and e1.ename='King'
select ename,sal from emp where
mgr in (select empno from emp where ename='KING')
--5、查询各部门中工资比
--本部门平均工资高的
--员工的员工号,姓名和工资
--分组查询
select empno,ename,sal from emp e1 where sal>(
select avg(sal) from emp e2 where e1.deptno=e2.deptno group by deptno)