天天看點

mysql 的常用查詢

Ø 基本常用查詢

Ø 嵌套子查詢

    子查詢是一個嵌套在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類型函數