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

MySQL SELECT 進階技巧總覽:IN、LIMIT、CONCAT、DISTINCT、GROUP BY、HAVING、多表連線與分頁優化

     編輯:MySQL 綜合教學

MySQL SELECT 實戰技巧速查表

掌握這 10 大 SELECT 技巧,覆蓋 90% 日常查詢場景,提升 SQL 可讀度與效能。

1. 多行 SQL 可讀性排版

$sql = "SELECT * FROM article
        WHERE id = 1";  -- 換行不影響執行,長查詢強烈建議分行

2. 批量查詢:IN 操作子

SELECT * FROM article WHERE id IN (1,3,5);

優於多個 OR,優化器可轉為範圍查詢。

3. 結果欄位串接:CONCAT

SELECT CONCAT(id, '-', content) AS res FROM article WHERE id = 1;
-- 回傳 "1-article content"

4. 字串搜尋:LOCATE

SELECT LOCATE('hello', 'hello baby');  -- 1(位置從 1 起算)
SELECT LOCATE('x', 'hello');           -- 0(不存在)

5. 分組聚合:GROUP BY

SELECT city, COUNT(*) FROM customer GROUP BY city;
-- 等價於 DISTINCT city + 計數,常搭配 AVG/MIN/MAX/SUM

6. 分組過濾:HAVING

SELECT city, COUNT(*), MIN(birth_day)
FROM customer
GROUP BY city
HAVING COUNT(*) > 10;

注意:HAVING 欄位必須出現在 SELECT 清單或聚合函數中;GROUP BY + HAVING 較慢,大數據集建議子查詢或索引優化。

7. 子句順序規範

SELECT ...
FROM ...
WHERE ...
GROUP BY ...
HAVING ...
ORDER BY ...
LIMIT ...

嚴格遵循此順序撰寫,避免語法錯誤。

8. 去重:DISTINCT

SELECT DISTINCT city FROM customer ORDER BY id DESC;

9. 分頁與游標:LIMIT

-- 第 101 筆之後所有資料
SELECT * FROM article LIMIT 100, -1;
-- 等價 LIMIT 100, 18446744073709551615(最大無符號長整數)

MySQL 8.0+ 建議使用 OFFSET 100 ROWS FETCH NEXT 10 ROWS ONLY 標準語法。

10. 多表連線查詢

SELECT u.user_name
FROM user u, member m
WHERE u.id = m.id
  AND m.reg_date >= '2006-12-28'
ORDER BY u.id DESC;

同名欄位必須加表別名:u.user_name 而非單獨 user_name,否則報錯 Column 'user_name' in field list is ambiguous。

進階補充:EXPLAIN 驗證執行計畫

EXPLAIN SELECT * FROM article WHERE id IN (1,3,5);
-- 關注 type=range、key=PRIMARY、rows=3 確認索引生效

熟練運用上述技巧,配合 EXPLAIN 持續優化,寫出高效能、易維護的 SQL。

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