Oracle 高級查詢-【聯合語句】【聯合查詢】【層次查詢】
- 2019 年 11 月 21 日
- 筆記
版權聲明:本文為部落客原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
本文鏈接:https://blog.csdn.net/wangtongxue123456/article/details/79681860
- Orcle高級查詢
- 基本查詢
- 基本語法
- where 子句
- 利用distinct 獲取唯一性記錄
- order by 子句
- group by 子句
- having 子句
- 子查詢
- 聯合語句
- union 查詢
- union all 查詢
- intersect 查詢
- minus 查詢
- 聯接查詢
- 等值聯接
- 不等值聯接
- 內連接
- 外聯接
- 左聯接
- 右連接
- 完全連接
- 自連接
- 層次化查詢
- 基本查詢
Orcle高級查詢
DDL:數據定義語言 — CREATE、ALTER、DROP、TRUNCATE TPL:事務處理語言 — COMMIT、ROLLBACK、SAVEPOINT、SET TRANSACTION DCL:數據控制語言 — GRANT、REVOKE DML:數據操作語言 — SELECT、UPDATE、INSERT、DELETE
基本查詢
selct 是查詢中的首要關鍵字,select 用於指定查詢所獲得的結果列。select 列表後需要緊跟 from 字句
基本語法
SELECT column_name,...| * from table_name ,...
where 子句
where 子句用於過濾from 子句所獲得的所有數據源
SELECT column_name,...| * from table_name ,... WHERE expressions -- expressions 過濾條件
利用distinct 獲取唯一性記錄
distinct 關鍵字用於獲得唯一性記錄,被distinct 限制的既可以是單個列,也可以是多個列組合。
SELECT DISTINCT column_name,...| * from table_name ,...
order by 子句
order by 子句可以將查詢的結果,按照一定的順序進行排序。當排序列的數據類型是字元串時,將按照字元串在字母表中的順序進行排序
SELECT column_name,...|* FROM table_name,... WHERE expressions order by column_name asc | desc -- asc 升序 desc 降序
group by 子句
group by 子句用於對記錄集合進行分組,一旦使用分組之後,select 語句的真實操作目標為各個分組數據,每次循環處理的也是各個分組,而不是單條記錄、
SELECT column_name,... | * FROM table_name,... WHERE expressions group by column_name,...
對於需要分組查詢的子句,ORDER BY 需要置於groub by 後面,並且排序欄位需要是 groub by 的分組欄位
having 子句
where 子句會對form 子句所定義的數據源進行條件過濾,但是針對group by 子句形成的分組之後的結果集,where 子句將無能為力,為了過濾 group by 子句所生成的結果集,可以使用having 子句、
SELECT column_name,.. | * FROM table_name,... WHERE expressions groub by column_name,... having expressions
子查詢
子查詢是指嵌套在查詢語句中的查詢語句,子查詢出現的位置一般為條件語句,如where 條件。Orcle 會首先執行子查詢,然後執行父查詢、 子查詢是完整的查詢語句。子查詢首先生成結果集,並將結果集應用於條件語句。 子查詢可以出現在插入,查詢,更新和刪除語句中。建立子查詢的目的是更加有效的限制where 子句中的條件,並可以將複雜的查詢邏輯梳理的更加清晰。 子查詢可以訪問父查詢中的數據源,但是父查詢不能夠訪問子查詢from子句所定義的數據源。子查詢是根據父查詢中的每條記錄執行的。 子查詢可以使用子查詢的位置 : where,select,having,from 不可以使用子查詢的位置:group by 一般不在子查詢中使用排序
聯合語句
聯合語句是指兩個或多個select 語句是並列關係,並且對這些select語句所捕獲的記錄集進行集合操作。以獲得最終的結果集。這些聯合語句包括以下幾種:union 查詢,union all 查詢,intersect 查詢 minus 查詢
union 查詢
union 查詢是指兩個查詢結果集進行並集操作,並將重複記錄剔除,既想當並集操作之後,在執行一次distinct操作。
SELECT column_name,... | * FROM table_name union SELECT column_name,... | * FROM table1_name WHERE ....
union all 查詢
union all 查詢和union 查詢同為並集操作,但union all 查詢並不刪除最終結果集中的重複記錄。因此union all 的操作要快於union 。
SELECT column_name,... | * FROM table_name union all SELECT column_name,... | * FROM table1_name WHERE ....
intersect 查詢
intersect 查詢用於獲得兩個結果集的交集。
SELECT column_name,... | * FROM table_name where ... intersect ` SELECT column_name,... | * FROM table1_name WHERE ....
minus 查詢
minus 查詢用於獲得兩個結果集合的差集,只會顯示在第一個結果集中存在但第二個結果集中不存在的數據,並且會以第一列結果進行排序
SELECT column_name,... | * FROM table_name where ... minus SELECT column_name,... | * FROM table1_name WHERE ....
聯接查詢
聯接用於指定多數據源之間如何組合,以形成最終的數據源。如果沒有未顯示指定聯接,那麼將獲得多個數據源的笛卡爾積。
什麼是多表查詢
從多個表中獲取數據就是多表查詢。
笛卡爾積
兩個集合X和Y的笛卡尓積(Cartesian product),又稱直積,表示為X × Y
等值聯接
等值聯接將多個數據源進行查詢,連接條件是等號
SELECT * FROM table_name t,table2_name t2 where t1.column_name=t2.column;
不等值聯接
等值聯接將多個數據源進行查詢,連接條件不是等號
SELECT * FROM table_name t,table2_name t2 where t1.column_name=t2.column;
內連接
外聯接
核心:通過外鏈接,把對於連接條件不成立的記錄,仍然包含在最後的結果中
左聯接
select * from table_a_name left join table_b_name on '條件' 可以簡寫為 select * from table_a_name.table_b_name where a=b(+)
右連接
完全連接
自連接
核心:通過別名,將同一張表視為多張表
select a.name_a,b.nameb from table_name a,table_name b where 條件
注意 不適合操作大表