程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> Oracle學習筆記14--集合操作和高級子查詢

Oracle學習筆記14--集合操作和高級子查詢

編輯:Oracle教程

Oracel提供了三種類型的集合操作:分別是並(UNION) 、交(INTERSECT)、 差(MINUS)

UNION :將多個操作的結果合並到一個查詢結果中,返回查詢結果的並集,自動去掉重復的部分。

UNION ALL:將多個操作的結果合並到一個查詢結果中,但是保留重復的內容。

INTERSECT: 返回多個操作結果中相同的部分。

MINUS:返回兩個查詢結果的差集,去掉重復的部分。

基本語法格式為:

SELECT * FROM table_name 1

[union , union all , intersect , minus]

SELECT * FROM table_name2

注意:只能有一個Order by 語句 ,並且該語句要放在末尾。語句表達式要使用第一個select的列名,別名或者是位

置編號號。在select 列表中的列名和表達式在數量和數據類型上也要對應。

高級子查詢

子查詢:前面已經說過,即:SQL語句內部嵌套另一個select語句。內部查詢要先於外邊查詢進行,內部查詢返回的

結果要給外部查詢使用。

多列子查詢

在筆記7中的子查詢,都是基於單列的查詢,現在學習的是多列的子查詢。主查詢要與子查詢返回的多個列進行比

較,不在是一個列。

基本語法:

SELECT * FROM table_name

where (column1 , column2) = | in (

SELECT column1 , column2 from table_name2 where ...

)

返回的結果不在是單列,而是多列。外層查詢中where語句後面的多個列名要用括號括起來。

相關子查詢

子查詢中使用主查詢的列。主查詢的每一行的數據都執行一次子查詢。

例,求emp表中工資大於平均工資的員工信息

select * from emp e
where sal > (
select avg(sal) from emp
where deptno = e.deptno
)

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
7566 JONES MANAGER 7839 1981/4/2 2975.00 20
7698 BLAKE MANAGER 7839 1981/5/1 2850.00 30
7788 SCOTT ANALYST 7566 1987/4/19 3000.00 20
7839 KING PRESIDENT 1981/11/17 5000.00 10
7900 JAMES CLERK 7698 1981/12/3 2000.00 30
7902 FORD ANALYST 7566 1981/12/3 3000.00 20

6 rows selected

EXISTS操作符

EXISTS操作符檢查在子查詢中是否存在滿足條件的行,若存在,不在子查詢中繼續尋找,返回true,如不存在,返回false ,繼續子查詢中尋找。NOT EXISTS操作符檢查在子查詢中是否不存在滿足條件的行 。

with子句

使用 WITH子句, 可以避免在 SELECT語句中重復書寫相同的語句塊 WITH子句將該子句中的語句塊執行一次並存儲到用戶的臨時表空間中使用 WITH子句可以提高查詢效率

嵌套子查詢

例:查詢比本部門工資高的員工信息

select deptno , ename,sal , avgsal
from emp e ,(select avg(sal) avgsal from emp group by deptno )
where sal > avgsal

DEPTNO ENAME SAL AVGSAL
------ ---------- --------- ----------
30 JAMES 2000.00 1741.66666
10 CLARK 2450.00 1741.66666
30 BLAKE 2850.00 1741.66666
20 JONES 2975.00 1741.66666
20 SCOTT 3000.00 1741.66666
20 FORD 3000.00 1741.66666
10 KING 5000.00 1741.66666
10 CLARK 2450.00 2175
30 BLAKE 2850.00 2175
20 JONES 2975.00 2175
20 SCOTT 3000.00 2175
20 FORD 3000.00 2175
10 KING 5000.00 2175
20 JONES 2975.00 2916.66666
20 SCOTT 3000.00 2916.66666
20 FORD 3000.00 2916.66666
10 KING 5000.00 2916.66666

17 rows selected

在from語句中,使用了子查詢,查詢出部門的平均工資,從而實現了員工工資與部門平均工資的比較。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved