萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL SELECT 語法完整解析:從基礎到進階應用

前言

SELECT 是 MySQL 中最核心、使用頻率最高的指令。本文系統整理其完整語法、各子句功能與實務技巧,幫助開發者快速掌握查詢精髓。

基本語法架構

SELECT [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [HIGH_PRIORITY]
       [DISTINCT | DISTINCTROW | ALL]
       select_list
       [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]]

關鍵字詳解

MySQL 專有擴展關鍵字

  • STRAIGHT_JOIN:強制優化器依照資料表順序聯結,避免非最佳執行計畫。
  • SQL_SMALL_RESULT / SQL_BIG_RESULT:搭配 GROUP BY 或 DISTINCT 使用,提示優化器結果集大小,決定是用臨時表或排序。
  • HIGH_PRIORITY:賦予該查詢高於更新操作的優先權,適合即時查詢需求。

實務上大多數情況不需使用上述四關鍵字,交由優化器自行判斷即可。

去重選項

  • DISTINCT / DISTINCTROW:過濾重複列,NULL 值視為相同。
  • ALL:預設行為,保留所有列(含重複)。

INTO OUTFILE / DUMPFILE

將結果寫入伺服器端檔案,檔案不可預先存在。OUTFILE 保留欄位/列結尾符,DUMPFILE 僅寫入單行原始資料。

SELECT 列表 (select_list) 組成

  1. *:依 CREATE TABLE 順序的所有欄位。
  2. 指定欄位名稱清單,可自訂順序。
  3. 使用別名:column_name AS alias。
  4. 運算式:欄位、常數、函數、算術/位元運算組合。
  5. 內建函數或聚合函數(COUNT、SUM 等)。
  6. 以上任意組合。

FROM 子句與資料表別名

指定查詢來源資料表,多表以逗號分隔。可使用 tbl_name [AS] alias_name 定義別名,後續 WHERE、HAVING 必須引用別名,別名不可數字開頭。

WHERE 子句與搜尋條件

基本語法:[NOT] expression comparison_operator expression、[NOT] expression [NOT] LIKE "pattern"、[NOT] expression IS [NOT] NULL、[NOT] expression [NOT] BETWEEN expr1 AND expr2、[NOT] col_name join_operator col_name、[NOT] boolean_expression。

比較運算子

符號意義
=等於
>大於
<小於
>=大於等於
<=小於等於
!= / <>不等於

字串比較依字典序,忽略尾部空格;日期比較 < 表較早,> 表較晚;字元與日期類型必須加引號。

LIKE 與萬用字元

  • %:任意長度字串(含零字元)
  • _:單一字元

查詢 DATETIME 建議用 LIKE 避免秒/毫秒差異導致比對失敗。

邏輯運算子優先序

AND 優先於 OR,可用括號改變順序。

GROUP BY 與 HAVING

  • GROUP BY 依指定欄位分組,搭配聚合函數(AVG、COUNT、MAX、MIN、SUM)產生摘要列。
  • HAVING 針對分組後的聚合結果篩選,語法同 WHERE 但可使用聚合函數。
  • ALL 關鍵字(Transact-SQL 擴展)可保留被 WHERE 排除的分組。

ORDER BY 排序

可用欄位名、別名或位置編號(不建議)。ASC 升序(預設),DESC 降序。

LIMIT 限制回傳筆數

  • LIMIT n:前 n 筆。
  • LIMIT offset, n:略過 offset 筆,取 n 筆(offset 從 0 起算)。

實務建議

  • 善用 EXPLAIN 分析執行計畫,確認索引使用情況。
  • 避免 SELECT *,僅取必要欄位減少網路傳輸。
  • 大量資料分頁查詢時,配合索引優化 LIMIT 深分頁效能。
copyright © 萬盛學電腦網 all rights reserved