執行SELECT語句查詢表中資料。

注意事項

SELECT語句中子句的執行優先順序為WHERE子句 > GROUP BY分組查詢 > HAVING子句 > ORDER BY排序 > LIMIT和OFFSET。

文法

SELECT
    [ALL | DISTINCT | DISTINCTROW]
    select_expr [, select_expr] ...
    [FROM table_references | join_expr]
    [WHERE where_condition]
    [GROUP BY groupby_condition]
    [HAVING having_condition]
    [ORDER BY order_condition]
    [LIMIT {[offset,] row_count | row_count OFFSET offset}]

參數

參數是否必選說明
ALL | DISTINCT | DISTINCTROW是否去掉重複的欄位,取值範圍如下:
  • ALL(預設):返回欄位中所有重複的值。
  • DISTINCT:去掉重複的欄位,返回去重欄位後的值。
  • DISTINCTROW:去掉重複的行,返回去重行後的值。
select_expr列名或者列運算式,格式為column_name[, column_name][, column_exp],...。更多資訊,請參見列運算式(select_expr)
table_references目標表資訊,可以是表名或者SELECT語句,格式為table_name | select_statement。更多資訊,請參見目標表資訊(table_references)
join_exprJOIN運算式,用於使用Join功能,格式為table_references join_type table_references [ ON join_condition | USING ( join_column [, ...] ) ]。當要使用Join功能時才需要配置此參數。

Join功能允許將兩表或多表進行串連,並返回符合串連條件和查詢條件的資料。更多資訊,請參見Join

where_conditionWHERE子句,可配合不同條件實現相應功能。
  • 配合關係運算子查詢符合指定條件的資料,格式為column_name operator value [AND | OR] [column_name operator value]。更多資訊,請參見WHERE子句(where_condition)
  • 配合匹配查詢或者短語匹配查詢條件實現全文檢索索引。更多資訊,請參見全文檢索索引
groupby_conditionGROUP BY分組查詢,可配合彙總函式使用,格式為column_name。更多資訊,請參見GROUP BY分組查詢(groupby_condition)
having_conditionHAVING子句,可配合彙總函式使用,格式為 aggregate_function(column_name) operator value。更多資訊,請參見HAVING子句(having_condition)
order_conditionORDER BY排序,格式為column_name [ASC | DESC][,column_name [ASC | DESC],...]。更多資訊,請參見ORDER BY排序(order_condition)
row_count本次查詢需要返回的最大行數。
offset本次查詢的資料位移量,預設位移量為0。

列運算式(select_expr)

通過列運算式指定需要查詢的列。使用規則如下:
  • 使用星號(*)查詢所有列,支援配合WHERE子句指定查詢條件。
    SELECT * FROM orders;
    使用WHERE子句作為查詢條件的樣本如下:
    SELECT * FROM orders WHERE orderprice >= 100;
  • 使用列名指定查詢的列。
    SELECT username FROM orders;
  • 使用JSON函數查詢JSON對象
    SELECT coljson, coljson->>'$.a' AS subdoc FROM json_table WHERE pkint = 1;

    關於JSON函數的更多資訊,請參見JSON函數

目標表資訊(table_references)

通過目標表資訊指定需要查詢的表。

SELECT orderprice FROM orders;

WHERE子句(where_condition)

通過WHERE子句查詢滿足指定條件的資料。使用規則如下:

  • 配合算術運算子、關係運算子等構造的簡單運算式使用。
    SELECT * FROM orders WHERE username = 'lily';
    SELECT * FROM orders WHERE orderprice >= 100;
  • 配合邏輯運算子構造的組合運算式使用。
    SELECT * FROM orders WHERE username = 'lily' AND orderprice >= 100;

關於操作符的更多資訊,請參見SQL操作符

GROUP BY分組查詢(groupby_condition)

通過GROUP BY子句對SELECT語句的結果集按照指定條件進行分組。使用規則如下:
  • 按照欄位分組
    SELECT username FROM orders GROUP BY username;
  • 在分組的列上支援使用彙總函式
    SELECT username,COUNT(*) FROM orders GROUP BY username;
  • SELECT的所有列中沒有使用彙總函式的列,必須出現在GROUP BY中。
    SELECT username,orderprice FROM orders GROUP BY username,orderprice;

關於彙總函式的更多資訊,請參見彙總函式

HAVING子句(having_condition)

通過HAVING子句對WHERE子句和GROUP BY分組查詢後的分組結果集進行過濾,查詢滿足條件的分組結果。

通常HAVING子句與彙總函式配合使用,實現過濾。
SELECT username,SUM(orderprice) FROM orders GROUP BY username HAVING SUM(orderprice) < 500;

ORDER BY排序(order_condition)

通過ORDER BY子句按照指定欄位和排序方式對查詢結果集進行排序。使用規則如下:
  • 支援使用ASC或者DESC關鍵字設定排序方式。 預設按照升序(ASC)排列。
    SELECT * FROM orders ORDER BY orderprice DESC LIMIT 10;
  • 支援設定多個欄位進行排序。
    SELECT * FROM orders ORDER BY username ASC,orderprice DESC LIMIT 10;
  • 通常與LIMIT配合使用限定返回的行數。
    SELECT * FROM orders ORDER BY orderprice LIMIT 10;