閱讀395 返回首頁    go 搜狐


SELECT__數據操作語言_SQL語法參考_雲數據庫 OceanBase-阿裏雲

該語句用於查詢表中的內容。

基本查詢

格式

SELECT 
   [ALL | DISTINCT] 
   selectexpr [AS othername] [, selectexpr ...] 
   [FROM table_references]
   [WHERE where_conditions] 
   [GROUP BY group_by_list] 
   [HAVING search_confitions] 
   [ORDER BY order_list] 
   [LIMIT {[offset,] rowcount | rowcount OFFSET offset}]
   [FOR UPDATE];

SELECT子句說明如下所示。



子句 說明
ALL | DISTINCT 在數據庫表中,可能會包含重複值。指定“DISTINCT”,則在查詢結果中相同的行隻顯示一行;指定“ALL”,則列出所有的行;不指定時,默認為“ALL”。
select_expr 列出要查詢的列名,用“,”隔開。也可以用“*”表示所有列。
AS other_name 為輸出字段重新命名。
FROM table_references 指名了從哪個表或哪些表中讀取數據。(支持多表查詢)
WHERE where_conditions 可選項,WHERE子句用來設置一個篩選條件,查詢結果中僅包含滿足條件的數據。where_conditions為表達式。
GROUP BY group_by_list 用於進行分類匯總。
HAVING search_confitions HAVING子句與WHERE子句類似,但是HAVING子句可以使用累計函數(如SUM,AVG等)。
ORDER BY order_list [ASC | DESC] 用來按升序(ASC)或者降序(DESC)顯示查詢結果。不指定ASC或者DESC時,默認為ASC。
[LIMIT {[offset,] row_count |row_count OFFSET offset}] 強製 SELECT 語句返回指定的記錄數。LIMIT 接受一個或兩個數字參數。參數必須是一個整數常量。如果給定兩個參數,第一個參數指定第一個返回記錄行的偏移量,第二個參數指定返回記錄行的最大數目。初始記錄行的偏移量是 0(而不是 1)。 如果隻給定一個參數,它表示返回記錄行的最大數目,偏移量為0。
FOR UPDATE 對查詢結果所有行上排他鎖,以阻止其他事務的並發修改,或阻止在某些事務隔離級別時的並發讀取。

JOIN句法

JOIN連接分為內連接和外連接。外連接又分為左連接、右連接和全連接。兩個表連接後,可以使用ON指定條件進行篩選。

OceanBase1.0版本裏JOIN可以支持USING子句,JOIN的連接條件中必須至少有一個等值連接條件。

內連接:結果中隻包含兩個表中同時滿足條件的行。

左連接:結果中包含位於關鍵字LEFT [OUTER] JOIN左側的表中的所有行,以及該關鍵字右側的表中滿足條件的行。

右連接:結果中包含位與關鍵字[RIGHT] [OUTER] JOIN右側的表中的所有行,以及該關鍵字左側的表中滿足條件的行。

全連接:結果中包含兩個表中的所有行。

集合操作

OceanBase中的集合操作主要包括UNION、EXCEPT和INTERSECT。

UNION句法

UNION用於合並兩個或多個SELECT語句的結果集。使用UNION需要注意以下幾點:

  • UNION內部的SELECT 語句必須擁有相同數量的列。列也必須擁有相似的數據類型。同時,每條SELECT語句中的列的順序必須相同。

  • 默認地,UNION操作符選取不同的值。如果允許重複的值,請使用UNION ALL。

  • UNION 結果集中的列名總是等於UNION中第一個SELECT語句中的列名。

UNION指令的目的是將兩個或多個SELECT語句的結果合並起來。從這個角度來看,UNION跟JOIN有些類似,因為這兩個指令都可以由多個表格中擷取資料。但是UNION隻是將兩個結果聯結起來一起顯示,並不是聯結兩個表。

EXCEPT句法

EXCEPT用於查詢第一個集合中存在,但是不存在於第二個集合中的數據。

INTERSECT句法

INTERSECT用於查詢在兩個集合中都存在的數據。

DUAL虛擬表

DUAL是一個虛擬的表,可以視為一個一行零列的表。當我們不需要從具體的表來取得表中數據,而是單純地為了得到一些我們想得到的信息,並要通過SELECT完成時,就要借助一個對象,這個對象就是DUAL。一般可以使用這種特殊的SELECT語法獲得用戶變量或係統變量的值。

當SELECT語句沒有FROM子句的時候,語義上相當於FROM DUAL,此時,表達式中隻能是常量表達式。

格式

SELECT 
    [ALL | DISTINCT] 
    select_list 
    [FROM DUAL [WHERE where_condition]] 
    [LIMIT {[offset,] rowcount | rowcount OFFSET offset}];

SELECT…FOR UPDATE句法

格式

SELECT ... FOR UPDATE [WAIT n| NOWAIT]; 

其中:

  • WAIT子句指定等待其他用戶釋放鎖的秒數,防止無限期的等待。

  • NOWAIT不等待行鎖釋放。

SELECT … FOR UPDATE可以用來對查詢結果所有行上排他鎖,以阻止其他事務的並發修改,或阻止在某些事務隔離級別時的並發讀取。即使用FOR UPDATE語句將鎖住查詢結果中的元組,這些元組將不能被其他事務的UPDATE,DELETE和FOR UPDATE操作,直到本事務提交。

注意,目前OceanBase實現有如下限製:必須是單表查詢。

例如:

SELECT * FROM a FOR UPDATE;

IN和OR

OceanBase支持邏輯運算“IN”和“OR”。

最後更新:2016-11-24 11:23:47

  上一篇:go DELETE__數據操作語言_SQL語法參考_雲數據庫 OceanBase-阿裏雲
  下一篇:go 用戶及權限管理__數據庫管理語言_SQL語法參考_雲數據庫 OceanBase-阿裏雲