Any和Some和ALL 的使用,以及交操作差操作的嵌套查询(Oracle)
SELECT emp.empno,emp.ename,emp.job,emp.sal FROM scott.emp
WHERE sal>any(SELECT sal FROM scott.emp WHERE job='MANAGER');
--上面的意思只要sal>子查询里面返回最小的一个sal值。
--分解出来看看如下:
SELECT sal FROM scott.emp WHERE job='MANAGER';
SELECT emp.empno,emp.ename,emp.job,emp.sal FROM scott.emp
WHERE sal>2975 OR sal>2850 OR sal>2450;
--结果:
EMPNO ENAME JOB SAL
---------- -------------------- ------------------ ----------
7566 JONES MANAGER 2975
7698 BLAKE MANAGER 2850
7788 SCOTT ANALYST 3000
7839 KING PRESIDENT 5000
7902 FORD ANALYST 3000
SAL
----------
2975
2850
2450
EMPNO ENAME JOB SAL
---------- -------------------- ------------------ ----------
7566 JONES MANAGER 2975
7698 BLAKE MANAGER 2850
7788 SCOTT ANALYST 3000
7839 KING PRESIDENT 5000
7902 FORD ANALYST 3000
另:SELECT emp.empno,emp.ename,emp.job,emp.sal FROM scott.emp
WHERE sal>any(SELECT sal FROM scott.emp WHERE job='MANAGER');
等同于语句:
SELECT emp.empno,emp.ename,emp.job,emp.sal FROM scott.emp
WHERE sal>SOME(SELECT sal FROM scott.emp WHERE job='MANAGER');
下面来看ALL的使用:
SELECT emp.empno,emp.ename,emp.job,emp.sal FROM scott.emp
WHERE sal>ALL(SELECT sal FROM scott.emp WHERE job='MANAGER');
--结果:
EMPNO ENAME JOB SAL
---------- -------------------- ------------------ ----------
7788 SCOTT ANALYST 3000
7839 KING PRESIDENT 5000
7902 FORD ANALYST 3000
理解了any和some,去理解ALL,很容易了,当我们WHERE 条件中sal>ALL(...)
表示sal必须大于子查询中返回最大的sal值。
只要我们注意一下,就不难发现ALL于ANY(SOME),在上面的例子中反义。
交操作的嵌套查询
交操作就是集合中交集的概念。
(SELECT deptno FROM scott.emp)
INTERSECT
(SELECT deptno FROM scott.dept);
--结果:
DEPTNO
----------
10
20
30
差操作的嵌套查询
差操作就是集合中差集的概念。(我好久没有理解这差集,现在都忘记了,来记录一下)
属于集合A且不属于集合B的元素总和就是差集。
(SELECT deptno FROM scott.dept)
MINUS
(SELECT deptno FROM scott.emp);
--结果:
DEPTNO
----------
40
--从MS SQL上理解可以相当于语句:
SELECT scott.dept.deptno FROM scott.dept
LEFT OUTER JOIN scott.emp ON scott.emp.deptno=scott.dept.deptno WHERE scott.emp.deptno IS NULL;
--或者:
SELECT scott.dept.deptno FROM scott.dept
LEFT JOIN scott.emp ON scott.emp.deptno=scott.dept.deptno WHERE scott.emp.deptno IS NULL;
--结果:
DEPTNO
----------
40
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架