日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

SQL 基础-- 子查询

發布時間:2025/6/15 数据库 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQL 基础-- 子查询 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

--=========================

--SQL 基礎--> 子查詢

--=========================??

?

/*

一、子查詢

??? 子查詢就是位于SELECTUPDATE、或DELETE語句中內部的查詢

???

二、子查詢的分類

??? 單行子查詢

??????? 返回零行或一行

??? 多行子查詢

??????? 返回一行或多行

??? 多列子查詢

??????? 返回多列

??? 相關子查詢

??????? 引用外部SQL語句中的一列或多列

??? 嵌套子查詢

??????? 位于其它子查詢中的查詢

?

三、子查詢語法 */

??? SELECT select_list

??? FROM table

??? WHERE expr operator

?????? (SELECT select_list

?????? ?FROM table);

?????? ?/*

??? 子查詢(內部查詢)在執行主查詢之前執行一次

??? 然后主查詢(外部查詢)會使用該子查詢的結果?

?

四、子查詢的規則

??? 將子查詢括在括號中

??? 將子查詢放置在比較條件的右側

??? 只有在執行排序Top-N分析時,子查詢中才需要使用ORDER BY 子句

??? 單行運算符用于單行子查詢,多行運算符用于多行子查詢?

?

五、單行子查詢

??? 僅返回一行

??? 使用單行的表較運算符:= ,>, >= ,< , <= ,<>

???

??? WHERE 子句中使用子查詢??? */

??? SQL> select ename,job from emp

??? ? 2? where empno = (

??? ? 3??? select empno from emp

??? ? 4??? where mgr = 7902 );

?

??? ENAME????? JOB

??? ---------- ---------

??? SMITH????? CLERK

???

??? --使用分組函數的子查詢

??? SQL> select ename,job,sal

??? ? 2? from emp

??? ? 3? where sal >

??? ? 4??? (select avg(sal) from emp);

?

??? ENAME????? JOB????????????? SAL

??? ---------- --------- ----------

??? JONES????? MANAGER???????? 2975

??? BLAKE????? MANAGER???????? 2850

??? CLARK????? MANAGER???????? 2450

??? SCOTT????? ANALYST???????? 3000

??? KING?????? PRESIDENT?????? 5000

??? FORD?????? ANALYST???????? 3000

???

??? --HAVING子句中使用子查詢

??? SQL> select deptno,min(sal)

??? ? 2? from emp

??? ? 3? group by deptno

??? ? 4 ?having min(sal) >

??? ? 5????? (select min(sal)

??? ? 6?????? from emp

??? ? 7?????? where deptno = 20);

?

?????? DEPTNO?? MIN(SAL)

??? ---------- ----------

?????????? 30??????? 950

?????????? 10?????? 1300

??????????

??? --FROM 子句中使用子查詢

??? SQL> select empno,ename

??? ? 2? from

??? ? 3????? (select empno,ename

??? ? 4?????? from emp

??? ? 5?????? where deptno = 20);

?

?????? ?EMPNO ENAME

??? ---------- ----------

?????? ? 7369 SMITH

?????? ? 7566 JONES

?????? ? 7788 SCOTT

?????? ? 7876 ADAMS

?????? ? 7902 FORD

???

??? --單行子查詢中的常見錯誤

??? ??? --子查詢的結果返回多于一行

?????? SQL> select empno,ename

?????? ? 2? from emp

?????? ? 3? where sal =

?????? ? 4????? (select sal?????

?????? ? 5?????? from emp

?????? ? 6?????? where deptno = 20);

?????????? (select sal

?????????? ?*

?????? ERROR at line 4:

?????? ORA-01427: single-row subquery returns more than one row

??????

?????? --子查詢中不能包含ORDER BY子句

?????? SQL> select empno,ename

?????? ? 2? from emp

?????? ? 3? where sal >

?????? ? 4????? (select avg(sal)

?????? ? 5?????? from emp

?????? ? 6?????? order by empno);

?????????? ?order by empno)

?????????? ?*

?????? ERROR at line 6:

?????? ORA-00907: missing right parenthesis

??????

?????? --子查詢內部沒有返回行,如下語句可以正確執行,但沒有數據返回

?????? SQL> select ename,job

?????? ? 2? from emp

?????? ? 3? where empno =

?????? ? 4????? (select empno

?????? ? 5?????? from emp

?????? ? 6?????? where mgr = 8000);

?

?????? no rows selected

?

??? /*?

六、多行子查詢

??? 返回多個行

??? 使用多行比較運算符IN ,ANY ,ALL

???

??? 在多行子查詢中使用IN 操作符? */

??? SQL> select empno,ename,job

??? ? 2? from emp

??? ? 3? where sal in

??? ? 4????? (select max(sal)

??? ? 5?????? from emp

??? ? 6?????? group by deptno);

?

?????? ?EMPNO ENAME????? JOB

??? ---------- ---------- ---------

?????? ? 7698 BLAKE????? MANAGER

?????? ? 7902 FORD?????? ANALYST

?????? ? 7788 SCOTT????? ANALYST

?????? ? 7839 KING?????? PRESIDENT

?????? ?

??? --在多行子查詢中使用ANY 操作符

??? SQL> select empno,ename,job

??? ? 2? from emp

??? ? 3? where sal < any

??? ? 4????? (select avg(sal)

??? ? 5?????? from emp

??? ? 6?????? group by deptno);

?

?????? ?EMPNO ENAME????? JOB

??? ---------- ---------- ---------

??? ??? ? 7369 SMITH????? CLERK

?????? ? 7900 JAMES????? CLERK

?????? ? 7876 ADAMS????? CLERK

?????? ? 7521 WARD?????? SALESMAN

?????? ? 7654 MARTIN???? SALESMAN

?????? ? 7934 MILLER???? CLERK

?????? ? 7844 TURNER???? SALESMAN

?????? ? 7499 ALLEN????? SALESMAN

?????? ? 7782 CLARK????? MANAGER

?????? ? 7698 BLAKE????? MANAGER

?????? ?

??? --在多行子查詢中使用ALL 操作符

??? SQL> select empno,ename,job

??? ? 2? from emp

??? ? 3? where sal > all

??? ? 4????? (select avg(sal)

??? ? 5?????? from emp

??? ? 6*????? group by deptno)

???

?????? ?EMPNO ENAME????? JOB

??? ---------- ---------- ---------

?????? ? 7566 JONES????? MANAGER

?????? ? 7788 SCOTT????? ANALYST

?????? ? 7839 KING?????? PRESIDENT

?????? ? 7902 FORD?????? ANALYST

???

???? /*

七、相關子查詢

??? 子查詢中使用了主查詢中的某些字段,主查詢每掃描一行都要執行一次子查詢 */

?

??? --查詢工資高于同一部門的員工的部門號,姓名,工資

??? SQL> select deptno,ename,sal

??? ? 2? from emp outer

??? ? 3? where sal >

??? ? 4????? (select avg(sal)

??? ? 5?????? from emp inner

??? ? 6?????? where inner.deptno = outer.deptno);

?

?????? DEPTNO ENAME???????????? SAL

??? ---------- ---------- ----------

?????????? 30 ALLEN??????????? 1600

?????????? 20 JONES??????????? 2975

?????????? 30 BLAKE??????????? 2850

?????????? 20 SCOTT??????????? 3000

?????????? 10 KING???????????? 5000

?????????? 20 FORD???????????? 3000

??????????

??? --查詢負責管理其它員工的員工記錄(使用exists)

??? SQL> select empno,ename

??? ? 2? from emp outer

??? ? 3? where exists

??? ? 4???? (select empno

??? ? 5????? from emp inner

??? ? 6????? where inner.mgr = outer.empno);

?

?????? ?EMPNO ENAME

??? ---------- ----------

?????? ? 7566 JONES

?????? ? 7698 BLAKE

?????? ? 7782 CLARK

?????? ? 7788 SCOTT

?????? ? 7839 KING

?????? ? 7902 FORD

??? --查詢不管理其它員工的職員(not exists)

??? SQL> l3

??? ? 3* where exists

??? SQL> c /where/where not

??? ? 3* where not exists

??? SQL> l

??? ? 1? select empno,ename

??? ? 2? from emp outer

??? ? 3? where not exists

??? ? 4???? (select empno

??? ? 5????? from emp inner

??? ? 6*???? where inner.mgr = outer.empno)

??? SQL> /

?

?????? ?EMPNO ENAME

??? ---------- ----------

?????? ? 7369 SMITH

?????? ? 7499 ALLEN

?????? ? 7521 WARD

?????? ? 7654 MARTIN

?????? ? 7844 TURNER

?????? ? 7876 ADAMS

?????? ? 7900 JAMES

?????? ? 7934 MILLER

?????? ?

??? EXISTSNOT EXISTSINNOT IN 的比較

??????? EXISTSIN的不同:

??????????? EXISTS只檢查行的存在性,IN 要檢查實際值的存在性(一般情況下EXISTS的性能高于IN)

??? ??? NOT EXISTSNOT IN

?????? ??? 當值列表中包含空值的情況下,NOT EXISTS 則返回true,NOT IN 則返回false.

??????????

??? --看下面的查詢,查詢部門號不在emp表中出現的部門名稱及位置

??? SQL> select deptno,dname,loc

??? ? 2? from dept d

??? ? 3? where not exists

??? ? 4????? (select 1

??? ? 5?????? from emp e

??? ? 6*????? where e.deptno = d.deptno)

??? ?

?????? DEPTNO DNAME????????? LOC

??? ---------- -------------- -------------

?????????? 40 OPERATIONS???? BOSTON

??? ??

??? --IN與空值

?????????? SQL> SELECT *

???????????? 2??? FROM emp e

???????????? 3??? WHERE e.empno NOT IN (

???????????? 4?????????????????????????? SELECT 7369 FROM dual

???????????? 5?????????????????????????? UNION ALL

???????????? 6?????????????????????????? SELECT NULL FROM dual

???????????? 7????????????????????????? )

???????????? 8? ;

???????????

?????????? EMPNO ENAME????? JOB???????? MGR HIREDATE ?????????SAL????? COMM DEPTNO

?????????? ----- ---------- --------- ----- ----------- --------- --------- ------

???????????

?????????? SQL> SELECT *

???????????? 2??? FROM emp e

???????????? 3??? WHERE e.empno IN ('7369',NULL)

???????????? 4? ;

???????????

?????????? EMPNO ENAME????? JOB???????? MGR HIREDATE????????? SAL????? COMM DEPTNO

?????????? ----- ---------- --------- ----- ----------- --------- --------- ------

??????????? 7369 SMITH????? CLERK????? 7902 1980-12-17???? 800.00?????????????? 20

???????????

????

??? /*?

? ? 注:子查詢要包含在括號內

??? ??? 子查詢一般放在比較條件的右側

??? ??? 除非進行TOPN 分析,否則不要在子查詢中使用ORDER BY */

?

??? /*

八、多列子查詢

??? 1、成對比較

??? 查詢工資為部門最高的記錄 */

??? SQL> select * from scott.emp

??? ? 2? where (sal,job) in

??? ? 3???? (select max(sal),job from scott.emp group by job);

???

?????? ?EMPNO ENAME????? JOB????????????? MGR HIREDATE???????? SAL?????? COMM???? DEPTNO

??? ---------- ---------- --------- ---------- --------- ---------- ---------- ----------

?????? ? 7934 MILLER???? CLERK?????????? 7782 23-JAN-82?????? 1300??????????????????? 10

?????? ? 7499 ALLEN????? SALESMAN??????? 7698 20-FEB-81?????? 1600??????? 300???????? 30

?????? ? 7839 KING?????? PRESIDENT??????????? 17-NOV-81?????? 5000??????????????????? 10

?????? ? 7566 JONES????? MANAGER???????? 7839 02-APR-81?????? 2975??????????????????? 20

?????? ? 7902 FORD?????? ANALYST???????? 7566 03-DEC-81?????? 3000??????????????????? 20

?????? ? 7788 SCOTT????? ANALYST???????? 7566 19-APR-87?????? 3000??????????????????? 20???

??????

?????? /*??????

??? 2、非成對比較,實現了與上述類似的功能*/

??? SQL> select * from scott.emp

??? ? 2? where sal in (select max(sal) from scott.emp group by job)

??? ? 3? and job in (select distinct job from scott.emp);

?

?????? ?EMPNO ENAME????? JOB????????????? MGR HIREDATE???????? SAL?????? COMM???? DEPTNO

??? ---------- ---------- --------- ---------- --------- ---------- ---------- ----------

?????? ? 7934 MILLER???? CLERK?????????? 7782 23-JAN-82?????? 1300??????????????????? 10

?????? ? 7499 ALLEN????? SALESMAN??????? 7698 20-FEB-81?????? 1600??????? 300???????? 30

?????? ? 7566 JONES????? MANAGER???????? 7839 02-APR-81?????? 2975??????????????????? 20

?????? ? 7788 SCOTT????? ANALYST???????? 7566 19-APR-87?????? 3000??????????????????? 20

?????? ? 7902 FORD?????? ANALYST???????? 7566 03-DEC-81?????? 3000??????????????????? 20

?????? ? 7839 KING?????? PRESIDENT??????????? 17-NOV-81?????? 5000??????????????????? 10

?????? ?

???? /*

九、嵌套子查詢

??? 即位于子查詢內部的子查詢,嵌套層數最多可達層。然而應盡量避免使用嵌套子查詢,使用表連接的查詢性能會更高*/

??? SQL> select deptno,Num_emp

??? ? 2? from (select deptno,count(empno) as Num_emp from emp group by deptno) d

??? ? 3? where Num_emp > 3;

?

?????? DEPTNO??? NUM_EMP

??? ---------- ----------

?????????? 30????????? 6

?????????? 20????????? 5

??????

??? /*?????

??? 注意:子查詢對空值的處理

??? 除了count(*)外,都會忽略掉空值 */

?

??? /*

十、更多*/??

Oracle 數據庫實例啟動關閉過程

?

Oracle 10g SGA 的自動化管理

?

使用OEM,SQL*Plus,iSQL*Plus 管理Oracle實例

?

Oracle實例和Oracle數據庫(Oracle體系結構)

?

SQL 基礎-->常用函數

?

SQL基礎-->過濾和排序

?

SQL 基礎-->SELECT 查詢

?

總結

以上是生活随笔為你收集整理的SQL 基础-- 子查询的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: av无线看 | 爱情岛亚洲品质自拍极速福利网站 | www.黄色片网站 | 日韩脚交footjobhd | 黄色理伦片 | 99久久综合国产精品二区 | 欧美色哟哟 | 亚洲激情网址 | 国产高清一区在线 | 成都免费高清电影 | 亚洲美女综合 | 私拍在线 | 国产精品久久久久久久av福利 | 国产精品啊啊啊 | aaa一级片| www国产视频 | 四季av中文字幕一区 | 黄色一级片免费在线观看 | 色戒电影未测减除版 | 51调教丨国产调教视频 | 中文字幕亚洲在线观看 | 国产一区二区视频在线免费观看 | 日韩精品中文字幕一区 | 国产三级精品在线 | 成人动漫av | 精品久久久久久久久久久久久久久久久久 | 污视频软件在线观看 | 奇米网久久 | 天堂视频网| 69网站在线观看 | 久久激情综合 | 亚洲精品你懂的 | 亚洲视频国产视频 | 黄久久久 | 久久久久无码精品国产sm果冻 | jizzjizz日本免费视频 | 欧美色图日韩 | 涩涩视频免费看 | 国产一级大片 | 婷婷久久网 | 亚洲一级理论片 | 日韩午夜片 | www色网站 | www.男人的天堂 | 91黑人精品一区二区三区 | 人人澡人人透人人爽 | 黄色一级片免费 | 色婷婷精品 | 婷婷婷色 | 日韩另类在线 | 蜜桃aaa| 国产高清精品软件丝瓜软件 | 91射| 欧美色啪| 欧美日韩看片 | 欧美成人不卡 | 国产99在线 | 色人阁视频 | 国产色吧 | 国产精品123区 | 国产精品一区二区性色av | 久久精品波多野结衣 | 久久久久国产精品人妻 | 亚洲成人天堂 | 天天操天天干天天插 | 国产精品久久久久久久久久东京 | 久久国产福利一区 | 制服.丝袜.亚洲.中文.综合懂色 | 国产免费叼嘿网站免费 | 王者后宫yin肉h文催眠 | 高贵麻麻被调教成玩物 | 鲁一鲁啪一啪 | 中国女人内谢69xxxx | 苍井空浴缸大战猛男120分钟 | 午夜精品久久久久久久久久久久久蜜桃 | 国产精品一区二区av白丝下载 | 成人久久久久久久 | 后入内射欧美99二区视频 | 国产骚b | 日韩精品一区二区在线播放 | 久久香蕉网站 | 日日色综合 | 99成人| 国产一区二区三区四区在线观看 | 国产精品第1页 | 免费拍拍拍网站 | 日韩av一区二区在线 | 黄片毛片视频 | 1024国产视频 | 日韩精品中文字幕一区二区三区 | 欧美黄网站 | 四虎成人在线观看 | 韩国一区二区三区在线观看 | 57pao国产成永久免费视频 | 国产综合色视频 | 日韩欧美中文字幕精品 | 中出 在线| 亚洲精品一区二区三区婷婷月 | 台湾少妇xxxx做受 |