mysql any和all的用法
该知识来源于:https://www.cnblogs.com/jane4321/p/11101317.html
ANY关键字
假设any内部的查询语句返回的结果个数是三个,如:result1,result2,result3,那么,
select ...from ... where a > any(...);
->
select ...from ... where a > result1 or a > result2 or a > result3;
any大于最小,小于最大,符合条件就可以取出相符的值
ALL关键字
ALL关键字与any关键字类似,只不过上面的or改成and。即:
select ...from ... where a > all(...);
->
select ...from ... where a > result1 and a > result2 and a > result3;
all大于最大,小于最小,符合条件就可以取出相符的值
SOME关键字
some关键字和any关键字是一样的功能。所以:
select ...from ... where a > some(...);
->
select ...from ... where a > result1 or a > result2 or a > result3;
--------------------------------------------------------------------------分界线------------------------------------------------------------------------------------
含义:
- 出现在其他语句中的select语句,称为子查询或内查询
- 外部的查询语句,称为主查询或外查询
in的用法
--查询出不与每个部门中最低工资相同的全部雇员信息
SELECT *
FROM emp e
WHERE e.sal NOT IN(
SELECT MIN(sal)
FROM emp
GROUP BY deptno
);
ANY在使用中有如下三种使用形式:
- =ANY:表示与子查询中的每个元素进行比较,功能与IN类似(然而<>ANY不等价于NOT IN)
- >ANY:比子查询中返回结果的最小的要大(还包含了>=ANY)
- <ANY:比子查询中返回结果的最大的要小(还包含了<=ANY)
=ANY
- 查询出每个部门经理的工资
SELECT *
FROM emp
WHERE sal = ANY (
SELECT MIN (sal)
FROM emp
WHERE job='MANAGER'
GROUP BY deptno
);
>ANY
- 查询出每个部门大于经理的工资
SELECT *
FROM emp
WHERE sal > ANY (
SELECT MIN (sal)
FROM emp
WHERE job='MANAGER'
GROUP BY deptno
);
<ANY
- 查询出每个部门小于经理的工资
SELECT *
FROM emp
WHERE sal < ANY (
SELECT MIN (sal)
FROM emp
WHERE job='MANAGER'
GROUP BY deptno
);
ALL操作符有以下三种用法:
- <>ALL:等价于NOT IN(但是=ALL并不等价于IN)
- >ALL:比子查询中最大的值还要大(还包含了>=ALL)
- <ALL:比子查询中最小的值还要小(还包含了<=ALL)
<>ALL
- 查询出每个部门不等于经理的工资
SELECT *
FROM emp
WHERE sal <> ALL (
SELECT MIN (sal)
FROM emp
WHERE job='MANAGER'
GROUP BY deptno
);
<ALL
SELECT *
FROM emp
WHERE sal < ALL (
SELECT MIN (sal)
FROM emp
WHERE job='MANAGER'
GROUP BY deptno
);
>All
SELECT *
FROM emp
WHERE sal > ALL (
SELECT MIN (sal)
FROM emp
WHERE job='MANAGER'
GROUP BY deptno
);
空数据判断 exists
- 在SQL之中提供了一个exists结构用于判断子查询是否有数据返回。如果子查询中有数据返回,则exists结构返回true,反之返回false。
- 用 exists 是否存在,存在返回一条记录,exists 是作为一个查询判断用,所以 select 后返回什么不重要。
SELECT * FROM emp
WHERE EXISTS( --返回空值,没有内容输出
SELECT * FROM emp WHERE empno=9999); --没有这个编号的员工