首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL SELECT 語法全解析:從基礎查詢到進階優化提示、DISTINCT、INTO OUTFILE、JOIN、子查詢、LIMIT 與 PROCEDURE

     編輯: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:強制按 FROM 順序連表,優化器選錯順序時使用。
  • SQL_SMALL_RESULT / SQL_BIG_RESULT:配合 GROUP BY/DISTINCT,告知結果集大小,優化器選擇臨時表 vs 排序。
  • HIGH_PRIORITY:提升 SELECT 優先級高於寫操作,慎用。

去重選項

  • DISTINCT/DISTINCTROW:結果集去重,NULL 視為相等只保留一行。
  • ALL:默認行為,無效關鍵字。

導出文件

  • INTO OUTFILE 'file':導出帶列/行終止符的文本,export_options 語法同 LOAD DATA INFILE。
  • INTO DUMPFILE 'file':僅寫入單行原始數據,無格式化。
  • 文件在服務端創建,不可預存,需 FILE 權限。

select_list 表達式

  1. *:按建表順序所有列。
  2. 指定列名列表,可調整順序。
  3. 別名:col AS alias 或 col alias。
  4. 表達式:列、常量、函數、算術/位運算組合。
  5. 聚合函數:COUNT/SUM/AVG/MIN/MAX 等。

FROM 與表別名

  • 多表用逗號分隔,順序不影響結果。
  • 別名:tbl_name [AS] alias,後續引用必須用別名,不能以數字開頭。

WHERE 條件構建

  • 基本:expr comp_op expr,comp_op:=, >, <, >=, <=, !=, <>。
  • 字符串比較:< 更靠近字母表頭,> 更靠近尾部;忽略尾部空格。
  • 日期比較:< 早於,> 晚於;字符/日期類型需加引號。
  • IS [NOT] NULL、[NOT] BETWEEN ... AND ...、[NOT] LIKE 'pattern'、[NOT] IN (...)。
  • LIKE 通配符:% 任意長度,_ 單字符;datetime 建議用 LIKE '%9:20%' 避免秒/毫秒干擾。
  • 邏輯:AND 優先級高於 OR,可用括號改變順序。

GROUP BY / HAVING

  • GROUP BY col [, col...]:分組聚合,SELECT 列必須為分組列或聚合函數。
  • HAVING:分組後過濾,可用聚合函數;WHERE 不可用聚合函數。
  • WITH ROLLUP:產生超級聚合行(MySQL 擴展)。

ORDER BY

  • 引用方式:列名、別名、位置(1 為第一列),不建議用位置。
  • ASC(默認升序)、DESC 降序。

LIMIT 分頁

  • LIMIT n = LIMIT 0, n:前 n 行。
  • LIMIT offset, n:跳過 offset 行取 n 行,offset 從 0 開始。

PROCEDURE

歷史遺留擴展,用於結果集後處理(如 ANALYSE()),現代版本極少使用,了解即可。

實戰建議

  • 避免 SELECT *,顯式列出所需列,減少網絡/IO/緩存壓力。
  • 大表分頁 LIMIT 100000, 20 性能差,改用游標/ID 範圍查詢。
  • 善用 EXPLAIN 驗證索引使用、掃描行數、臨時表/文件排序。
  • 優化器提示僅作最後手段,優先優化索引與 SQL 結構。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved