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

MySQL SELECT 進階技巧大全:從基礎語法到效能優化實戰

     編輯:MySQL 綜合教學

基礎語法靈活運用

1. SQL 多行撰寫提升可讀性

-- 單行
SELECT * FROM article WHERE id=1;

-- 多行(推薦複雜查詢)
SELECT * FROM article
WHERE id = 1;

2. IN 批次查詢替代多條 OR

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

3. CONCAT 結果欄位合併

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

4. LOCATE 字串搜尋定位

SELECT LOCATE('hello', 'hello baby'); -- 返回 1(找到位置)
SELECT LOCATE('world', 'hello baby'); -- 返回 0(不存在)

分組與聚合進階

5. GROUP BY 分組統計

SELECT city, COUNT(*) FROM customer GROUP BY city;
-- 列出每個城市及其客戶數(類似 DISTINCT 但可聚合)

常搭配聚合函數:AVG()、MIN()、MAX()、SUM()、COUNT()

6. HAVING 分組後過濾

SELECT city, COUNT(*), MIN(birth_day)
FROM customer
GROUP BY city
HAVING COUNT(*) > 10;
-- 先分組,再篩選客戶數 > 10 的城市
注意:HAVING 條件必須出現在 SELECT 或 GROUP BY 列中;GROUP BY + HAVING 效能較 WHERE 低,能用 WHERE 先過濾則優先用 WHERE。

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;

-- 典型分頁:每頁 20 筆,第 3 頁
SELECT * FROM article LIMIT 40, 20;

多表查詢與別名規範

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),否則 MySQL 拋出「Column 'user_name' in field list is ambiguous」錯誤。

效能優化小撇步

  • 避免 SELECT *,只取必要欄位
  • WHERE 條件優先於 HAVING 過濾
  • 大表分頁深翻頁時,改用 WHERE id > last_id LIMIT 20 遊標式分頁
  • 善用 EXPLAIN 驗證索引使用情況
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved