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

MySQL基礎查詢大全:WHERE/IN/BETWEEN/LIKE/NULL/排序/分組/正則/LIMIT實戰語法速查

     編輯:MySQL 資料庫相關知識

參考表結構

student(id, name, birth, department, address, sex)

核心查詢分類速查表

分類語法示例說明
多列查詢SELECT id, name, birth FROM student;指定列,避免SELECT *
全列查詢SELECT * FROM student;僅調試使用
精確匹配WHERE id=901主鍵/唯一索引最快
範圍查詢WHERE id>=904利用索引範圍掃描
集合查詢WHERE birth IN (1988,1990)等值多選,優化器轉為OR
非集合查詢WHERE birth NOT IN (1990,1998)注意NULL值陷阱
區間查詢WHERE birth BETWEEN 1986 AND 1988包含邊界,等價>= AND <
字符模糊WHERE name LIKE '_三' / '張%'_單字符 %多字符,前綴可用索引
非匹配WHERE name NOT LIKE '張%'全表掃描,慎用
NULL判斷WHERE address IS NULL不可用 = NULL
多條件ANDWHERE name LIKE '張%' AND birth>1985索引合併/複合索引
多條件ORWHERE id=905 OR birth=1988通常全表掃描,考慮UNION ALL改寫
去重SELECT DISTINCT sex FROM student;單列/多列去重
排序ORDER BY birth DESCASC升序 DESC降序,利用索引避免filesort
分組聚合SELECT sex, COUNT(*) FROM student GROUP BY sex;配合聚合函數
正則查詢WHERE birth REGEXP '1988|1990'MySQL 8.0支持ICU正則,性能較差
分頁限制LIMIT 2 / LIMIT 1,3偏移量,行數;深分頁優化用延遲關聯

進階技巧

  • 索引覆蓋:SELECT id, name FROM student WHERE birth=1990若有INDEX(birth, id, name)則無回表
  • 分頁優化:SELECT * FROM t WHERE id > (SELECT id FROM t ORDER BY id LIMIT 100000, 1) LIMIT 20避免大偏移
  • NULL處理:COALESCE(col, '默認值')、IFNULL(col, 0)

基礎查詢是SQL的字母表,熟練組合拼湊出高性能業務查詢,需配合EXPLAIN持續驗證執行計劃。

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