首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL SELECT 語法完整指南:從基礎查詢到進階技巧

     編輯:關於SqlServer

SELECT 語句核心語法結構

SELECT 語句是 SQL 中最基礎也最重要的資料檢索指令,用於從一個或多個資料表中擷取特定資料列。其完整語法包含多個選用子句,執行順序固定,不可隨意調換:

SELECT [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [HIGH_PRIORITY]
    [DISTINCT | DISTINCTROW | ALL]
    select_expression, ...
    [INTO {OUTFILE | DUMPFILE} 'file_name' export_options]
    [FROM table_references
        [WHERE where_definition]
        [GROUP BY col_name, ...]
        [HAVING where_definition]
        [ORDER BY {unsigned_integer | col_name | formula} [ASC | DESC], ...]
        [LIMIT [offset,] rows]
        [PROCEDURE procedure_name] ]

基本查詢與運算

SELECT 不僅能查詢資料表,也能直接進行純量運算:

mysql> SELECT 1 + 1;
-> 2

欄位別名與引用

使用 AS 為運算式指定別名,別名可用於 ORDER BY、GROUP BY、HAVING 子句:

SELECT CONCAT(last_name, ', ', first_name) AS full_name
FROM mytable ORDER BY full_name;

ORDER BY 和 GROUP BY 也支援以欄位位置(從 1 起算)引用:

SELECT college, region, seed FROM tournament ORDER BY 2, 3;

資料表聯結與別名

FROM 子句指定資料來源,多個資料表即為聯結。資料表可用 tbl_name [AS] alias_name 設定別名,簡化欄位引用:

SELECT t1.name, t2.salary
FROM employee AS t1, info AS t2
WHERE t1.name = t2.name;

排序控制

ORDER BY 預設遞增(ASC),加上 DESC 關鍵字可遞減排序:

SELECT * FROM products ORDER BY price DESC;

HAVING 與 WHERE 的差異

HAVING 用於過濾分組後的彙總結果,執行於查詢最後階段;WHERE 則在分組前過濾原始資料列。錯誤範例:

-- 錯誤:HAVING 不應用於非彙總條件
SELECT col_name FROM tbl_name HAVING col_name > 0;

-- 正確:改用 WHERE
SELECT col_name FROM tbl_name WHERE col_name > 0;

正確用法:搭配彙總函數

SELECT user, MAX(salary) FROM users
GROUP BY user HAVING MAX(salary) > 10;

MySQL 專屬擴展選項

  • STRAIGHT_JOIN:強制優化器依 FROM 子句順序聯結,適用於優化器選擇非最佳路徑時。
  • SQL_SMALL_RESULT:告知優化器結果集較小,改用快速暫存表而非排序。
  • SQL_BIG_RESULT:告知結果集龐大,必要時直接使用磁碟暫存表。
  • HIGH_PRIORITY:提升 SELECT 優先權高於更新語句,僅適用於極快且必須立即完成的查詢。

LIMIT 子句分頁

限制回傳資料列數,支援一或兩個參數:

-- 取第 6-15 筆(偏移量 5,取 10 筆)
SELECT * FROM table LIMIT 5,10;

-- 取前 5 筆
SELECT * FROM table LIMIT 5;

匯出資料到檔案

SELECT ... INTO OUTFILE 'file_name' 將結果寫入伺服器端檔案,檔案不可預存。INTO DUMPFILE 僅寫入單行無格式資料,適合儲存 BLOB。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved