在日常資料庫開發與維護中,熟練掌握核心查詢語法是提升效率的關鍵。本文系統整理了 23 條 MySQL 高頻查詢語句,涵蓋數值、字串、日期、邏輯、分頁、統計、分組等核心場景,並附帶關鍵注意事項與最佳實踐,適合開發者收藏備查。
使用比較運算子進行篩選,支援 >、=、<、<>、!=、!>、!<、>=、<= 等謂詞。
SELECT * FROM tb_name WHERE sum > 100;
結合 LIKE 與萬用字元 % 實現前綴、後綴、包含等多種匹配模式。
SELECT * FROM tb_stu WHERE sname = '小劉'; SELECT * FROM tb_stu WHERE sname LIKE '劉%'; SELECT * FROM tb_stu WHERE sname LIKE '%程序員'; SELECT * FROM tb_stu WHERE sname LIKE '%PHP%';
不同資料庫對日期字面值的語法有差異,需注意適配:
WHERE birthday = '2011-04-08'WHERE birthday = #2011-04-08#邏輯欄位通常儲存 'T' / 'F',配合 AND、OR、NOT 進行複合條件過濾。
SELECT * FROM tb_name WHERE type = 'T'; SELECT * FROM tb_name WHERE type = 'F';
使用 <> '' 或 != '' 過濾空字串,並可結合排序。
SELECT * FROM tb_name WHERE address <> '' ORDER BY addtime DESC;
PHP 變數直接嵌入 SQL 時,數值型欄位無需加引號,引擎會自動轉型。
SELECT * FROM tb_name WHERE id = '$_POST[text]';
字串模糊查詢需在變數前後加 %,並用單引號包裹整體。
SELECT * FROM tb_name WHERE name LIKE '%$_POST[name]%';
LIMIT 0, N 可與 ORDER BY 結合實現靈活分頁。
SELECT * FROM tb_name LIMIT 0, $N;
配合 ORDER BY id ASC 取最新插入的 N 筆資料。
SELECT * FROM tb_stu ORDER BY id ASC LIMIT $n;
注意 LIMIT offset, count 中 offset 從 0 開始計算。
SELECT * FROM tb_stu ORDER BY id ASC LIMIT $_POST[begin], $n;
使用別名 total 計算總分並降序取前 N。
SELECT *, (yw+sx+wy) AS total FROM tb_score ORDER BY (yw+sx+wy) DESC LIMIT 0, $num;
BETWEEN ... AND ... 等價於 >= 起始值 AND <= 終止值。
SELECT * FROM tb_stu WHERE age BETWEEN 0 AND 18;
善用 YEAR()、MONTH()、DAY() 函數提取日期部件。
SELECT * FROM tb_stu WHERE MONTH(date) = '$_POST[date]' ORDER BY date;
動態參數直接拼接於 WHERE 子句。
SELECT * FROM tb_stu WHERE age > $_POST[age] ORDER BY age;
DISTINCT必須指定具體欄位名,不可用 *;需配合 WHERE 使用才有實際去重效果。
SELECT DISTINCT column_name FROM table_name WHERE condition;
NOT 與謂詞組合NOT BETWEEN ... AND ... → < 起始值 AND > 終止值IS NOT NULL / IS NULL 判斷空值NOT IN 排除列表值,常用於子查詢結合 GROUP BY 與 COUNT(*) 統計重複值。
SELECT name, age, COUNT(*), age FROM tb_stu WHERE age = '19' GROUP BY date;
預設為 ASC,明確指定 DESC 可提升可讀性。
SELECT column FROM tb_stu WHERE condition ORDER BY column DESC; -- 降序 SELECT column FROM tb_stu WHERE condition ORDER BY column ASC; -- 升序
多欄位排序按聲明順序依次生效,共同限制輸出順序。
SELECT column FROM tb_stu WHERE condition ORDER BY column1 ASC, column2 DESC;
SUM() 可配合 ALL(預設)或 DISTINCT 去重求和;GROUP BY 必須置於 ORDER BY 之前。
SELECT name, SUM(price) AS sumprice FROM tb_price GROUP BY name; SELECT * FROM tb_name ORDER BY mount DESC, price ASC;
GROUP BY 欄位需為非聚合欄位,排序寫在分組之後。
SELECT id, name, SUM(price) AS title, date FROM tb_price GROUP BY pid ORDER BY title DESC;
多欄位分組邏輯類似,聚合運算可包含運算式。
SELECT id, name, SUM(price*num) AS sumprice FROM tb_price GROUP BY pid ORDER BY sumprice DESC;
使用表別名簡化多表關聯聚合查詢。
SELECT a.name, AVG(a.price), b.name, AVG(b.price) FROM tb_demo058 AS a, tb_demo058_1 AS b WHERE a.id = b.id GROUP BY b.type;