--例子: 查询工资最低的员工姓名select ename from emp where sal =(selectmin(sal)from emp)-- 按员工姓名分组select ename,min(sal)from emp groupby ename
-- select ename, sal from emp order by sal-- 子查询也叫内部查询, 作用是把子查询执行的结果作为外部查询的条件-- 在嵌套查询中, 子查询要先于外部查询执行--1. 查询最低工资selectmin(sal)from emp;--2. 把查询出的最低工资作为外部查询的条件select ename from emp where sal =800--3. 括号内的查询优先于外部的查询,查询的结果作为外部执行的条件select ename from emp where sal =(selectmin(sal)from emp)--子查询可以使用哪些子句?-- where having from --查询工资比json工资高员工姓名及工资 select ename, sal from emp where sal >(select sal from emp where ename ='JSONS')
单行子查询
子查询的查询结果为一行一列(一个值)
可以使用单行运算符(< , >, = , >= , <=)
1. 显示和雇员7369从事相同工作并且工资大于7876的雇员的姓名及工作
-- 7369的岗位select job from emp where empno =7369-- 7369 的岗位select sal from emp where empno =7876select ename, job, sal from emp
where job =(select job from emp where empno =7369)and sal>(select sal from emp where empno=7876)2查询部门最低工资比20部门最低工资高的部门编号及最低工资
查询20号部门的最低工资
selectmin(sal)from emp where deptno =10--查询每个部门的工资select deptno,min(sal)from emp
groupby deptno
havingmin(sal)<(selectmin(sal)from emp where deptno =10)3 查询哪个部门的员工人数高于各部门平均人数
- 查询各个部门的平均人数
selectavg(count(*))from emp groupby deptno
select deptno,count(*)from emp
groupby deptno
havingcount(*)>(selectavg(count(*))from emp groupby deptno)
--思考:下面SLQ语句是否正确--1.每个部门的最高工资员工姓名(单行子查询不能返回多个行)select deptno
from emp
where sal =(selectmax(sal)from emp groupby deptno)--2.查询与TOM岗位相同的员工(子查询为空值,相当于条件为NULL)select ename, job
from emp
where job =(select job from emp where ename ='TOM')--3.多行子查询 子查询返回的结果有多行,在进行运算时要使用多行运算符select ename, empno, sal
from emp
where sal in(selectmax(sal)from emp groupby deptno)select ename, empno, sal
from emp where sal in(2850,3000,5000)--4.查询谁是经理。--查询MGR字段中出现的员工编号selectdistinct mgr
from emp;select empno, ename
from emp
where empno
in(selectdistinct mgr from emp)--5.查询谁不是经理--子查询返回空值--如果列表中存在null, 那么使用not in 运算符不会得到任何结果select empno, ename
from emp
where empno
notin(selectdistinct mgr from emp)--结果为NULL --改正--在使用多行子查询是,如果用到了not in运算符,必须保证子查询的结果不能存在NULL值select empno, ename
from emp
where empno
notin(selectdistinct mgr from emp where mgr isnotnull)--any 的介绍 任意 有一个符合的条件就行(2,4,5 ,8)-- >any 大于结果中的任意一个(其中某一个即可)比最小的大 3-- <any 小于结果中的任意一个(其中的某一个即可)比最大的小 7-- ==any 相当于 in 从(2,4,5, 8)中任取一个
<