Ø 基本常用查詢
Ø 嵌套子查詢
子查詢是一個嵌套在select、insert、update或delete語句或其他子查詢中的查詢。任何允許使用表達式的地方都可以使用子查詢。子查詢也稱為内部查詢或内部選擇,而包含子查詢的語句也成為外部查詢或外部選擇。
# from (select … table)示例
上面括号中的語句,就是子查詢語句(内部查詢)。在外面的是外部查詢,其中外部查詢可以包含以下語句:
1、 包含正常選擇清單元件的正常select查詢
2、 包含一個或多個表或視圖名稱的正常from語句
3、 可選的where子句
4、 可選的group by子句
5、 可選的having子句
# 示例
# in, not in子句查詢示例
in、not in 後面的子句傳回的結果必須是一列,這一列的結果将會作為查詢條件對應前面的條件。如cid對應子句的id;
# exists和not exists子句查詢示例
exists和not exists查詢需要内部查詢和外部查詢進行一個關聯的條件,如果沒有這個條件将是查詢到的所有資訊。如:id等于student.id;
# some、any、all子句查詢示例
Ø 聚合查詢
1、 distinct去掉重複資料
2、 compute和compute by彙總查詢
compute進行彙總前面是查詢的結果,後面一條結果集就是彙總的資訊。compute子句中可以添加多個彙總表達式,可以添加的資訊如下:
a、 可選by關鍵字。它是每一列計算指定的行聚合
b、 行聚合函數名稱。包括sum、avg、min、max、count等
c、 要對其執行聚合函數的列
compute by适合做先分組後彙總的業務。compute by後面的列一定要是order by中出現的列。
3、 cube彙總
cube彙總和compute效果類似,但文法較簡潔,而且傳回的是一個結果集。
cube要結合group by語句完成分組彙總
Ø 排序函數
排序在很多地方需要用到,需要對查詢結果進行排序并且給出序号。比如:
1、 對某張表進行排序,序号需要遞增不重複的
2、 對學生的成績進行排序,得出名次,名次可以并列,但名次的序号是連續遞增的
3、 在某些排序的情況下,需要跳空序号,雖然是并列
基本文法
# row_number函數
根據排序子句給出遞增連續序号
# rank函數函數
根據排序子句給出遞增的序号,但是存在并列并且跳空
# dense_rank函數
根據排序子句給出遞增的序号,但是存在并列不跳空
# partition by分組子句
可以完成對分組的資料進行增加排序,partition by可以與以上三個函數聯合使用。
# ntile平均排序函數
将要排序的資料進行平分,然後按照等分排序。ntile中的參數代表分成多少等分。
Ø 集合運算
操作兩組查詢結果,進行交集、并集、減集運算
1、 union和union all進行并集運算
2、 intersect進行交集運算
3、 except進行減集運算
Ø 公式表表達式
查詢表的時候,有時候中間表需要重複使用,這些子查詢被重複查詢調用,不但效率低,而且可讀性低,不利于了解。那麼公式表表達式可以解決這個問題。
我們可以将公式表表達式(CET)視為臨時結果集,在select、insert、update、delete或是create view語句的執行範圍内進行定義。
Ø 連接配接查詢
1、 簡化連接配接查詢
2、 left join左連接配接
3、 right join右連接配接
4、 inner join内連接配接
5、 cross join交叉連接配接
6、 自連接配接(同一張表進行連接配接查詢)
Ø 函數
1、 聚合函數
max最大值、min最小值、count統計、avg平均值、sum求和、var求方差
2、 日期時間函數
3、 數學函數
4、 中繼資料
5、 字元串函數
6、 安全函數
7、 系統函數
8、 配置函數
9、 系統統計函數
10、 使用者自定義函數
# 檢視目前資料庫所有函數
# 建立函數
# 修改函數
# 傳回table類型函數