SELECT 陳述式 (SQL Server Compact)

從資料庫中擷取資料列,並且允許從一個或多個資料表選取一個或多個資料列或資料行。這是用來表示查詢動作的主要 SQL 建構。SELECT 不會修改、插入或刪除任何資料。

語法

SELECT select_list 
[ FROM table_source ]
[ WHERE search_condition ] 
[ GROUP BY group_by_expression ] 
[ HAVING search_condition ] 
[ ORDER BY order_expression [ ASC | DESC ] ] 

備註

SELECT 陳述式表示對系統進行的查詢動作。執行這種查詢動作不會更新任何資料。所得的查詢結果是一個資料表,其中每一個資料列的結構都完全相同,都含有相同的資料行。SELECT 陳述式會精確定義此結果資料表中將含有哪些資料行,以及要將哪些資料列擴展這個結果資料表中。SELECT 陳述式不會告訴系統如何執行查詢,而是由系統使用其內部成本型最佳化模組進行評估,自行判斷採用最恰當的方式執行查詢。而且執行結果保證與下列標準執行策略的執行結果相等,唯一的差異在於資料表中各資料列的先後順序,而只要以 ORDER BY 子句指定任何一種順序排列方式,結果就會完全相同。

執行策略

  1. 在 FROM 子句中產生資料表的聯結。若使用明確的 JOIN 語法,則 JOIN 的結果就很明顯。如果 FROM 字句中含有多個以逗號分隔的資料表名稱,這就是資料表的隱含式跨產品聯結。

  2. 若有 WHERE 子句,便對步驟 1 所得結果的資料列執行搜尋條件,只保留符合條件的資料列。

  3. 如果 SELECT 子句中沒有任何彙總運算,而且如果沒有 GROUP BY 子句,則跳到步驟 7。

  4. 如果有 GROUP BY 子句,則會將步驟 2 運算所得的資料列分為多個群組,因此所有群組資料行在每一個群組的所有資料列中具有相同的值。如果沒有 GROUP BY 子句,則將所有資料列放入一個群組中。

  5. 若有指定 HAVING 子句,則針對步驟 4 所產生的每一個群組套用 HAVING 子句,只有符合 HAVING 子句的群組才會被保留。

  6. 對於步驟 5 所產生的每一個群組,根據該群組評估來自 SELECT 子句中的選取清單,以便只產生一個結果資料列。

  7. 若 SELECT 子句包含 DISTINCT 關鍵字,則在步驟 6 所得的結果中刪除重複的資料列。

  8. 如果有 ORDER BY 子句,則根據其順序運算式所指定的方式排列步驟 7 的結果。