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

MySQL SELECT 語句完整語法詳解:擴展關鍵字、DISTINCT、INTO OUTFILE、JOIN 優化提示

     編輯:MySQL 資料庫相關知識

MySQL SELECT 擴展 ANSI SQL-92,新增 STRAIGHT_JOIN、SQL_SMALL_RESULT、HIGH_PRIORITY 等優化提示。本文完整解析語法結構、各關鍵字用途、INTO OUTFILE/DUMPFILE 匯出、簡單 SELECT 運算與變數賦值技巧。

完整語法結構

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 順序 JOIN優化器選錯 JOIN 順序時
SQL_SMALL_RESULT結果集小,用暫存表而非排序GROUP BY/DISTINCT 結果較少
SQL_BIG_RESULT結果集大,用排序而非暫存表GROUP BY/DISTINCT 結果較多
HIGH_PRIORITY提高查詢優先級(高於更新)即時查詢、報表查詢

⚠️ 多數情況**不需使用**,優化器通常足夠聰明。

DISTINCT / DISTINCTROW / ALL

  • DISTINCT / DISTINCTROW:去除重複列(NULL 視為相等)
  • ALL:預設,保留所有列(寫不寫效果同)

INTO OUTFILE / DUMPFILE 匯出檔案

-- 匯出 CSV(含欄位/列結束符)
SELECT * INTO OUTFILE '/tmp/data.csv'
FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n'
FROM mytable;

-- 匯出單行原始資料(無結束符)
SELECT * INTO DUMPFILE '/tmp/raw.bin' FROM mytable WHERE id=1;
  • 檔案在**伺服器端**建立,**不可預先存在**
  • 需 FILE 權限
  • export_options 語法同 LOAD DATA INFILE

最簡單 SELECT:運算與變數賦值

-- 純運算
SELECT 1+1;        -- 2
SELECT NOW();      -- 目前時間

-- 變數賦值 (MySQL 變數)
SELECT @x := 10;
SELECT @y := @x * 2;  -- @y = 20

-- 結合函數運算
SELECT CONCAT('Hello, ', @name) AS greeting;

💡 PHP 中可利用此特性呼叫 MySQL 函數運算後賦值給 PHP 變數。

實務建議

  • ✅ 盡量用標準語法,僅在確認優化器選錯時加提示
  • ✅ LIMIT 配合 ORDER BY 使用,避免非確定性結果
  • ✅ 匯出檔案路徑需伺服器可寫入,注意權限與安全
  • ✅ 變數賦值用 :=,= 在 SELECT 中為比較運算子
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved