在日常資料庫開發與維護中,掌握一些高頻、實用的 SQL 語句能大幅提升工作效率。本文整理了 8 個常見場景的 MySQL 語句,涵蓋日期運算、統計分析、架構查詢與效能優化等核心需求,供開發者快速參考。
利用 TO_DAYS 與 DATE_FORMAT 函數,即可將出生日期轉換為實際年齡:
SELECT DATE_FORMAT(FROM_DAYS(TO_DAYS(NOW()) - TO_DAYS(@dateofbirth)), '%Y') + 0;
原理是計算當前日期與出生日期的天數差,再轉換為年份格式,最後加 0 強制轉為數值型態。
若 dt1、dt2 為 DATETIME 型別,秒數差直接用 UNIX_TIMESTAMP 相減:
UNIX_TIMESTAMP(dt2) - UNIX_TIMESTAMP(dt1)
進一步換算:除以 60 得分鐘、除以 3600 得小時、除以 86400 得天數。
結合 GROUP BY 與 HAVING 即可快速篩選:
SELECT id
FROM tbl
GROUP BY id
HAVING COUNT(*) = N;
需有一張 calendar 表記錄每一天屬性(holiday=0 代表工作日):
SELECT COUNT(*)
FROM calendar
WHERE d BETWEEN Start AND Stop
AND DAYOFWEEK(d) NOT IN (1,7)
AND holiday = 0;
從 information_schema 系統表關聯查詢:
SELECT k.column_name
FROM information_schema.table_constraints t
JOIN information_schema.key_column_usage k
USING (constraint_name, table_schema, table_name)
WHERE t.constraint_type = 'PRIMARY KEY'
AND t.table_schema = 'db'
AND t.table_name = 'tbl';
SELECT
table_schema AS 'Db Name',
ROUND(SUM(data_length + index_length) / 1024 / 1024, 3) AS 'Db Size (MB)',
ROUND(SUM(data_free) / 1024 / 1024, 3) AS 'Free Space (MB)'
FROM information_schema.tables
GROUP BY table_schema;
兩種寫法皆可,利用 CAST 或隱性轉型:
SELECT * FROM `uchome_plug_collect_in`
WHERE `collectid` = 4744346
ORDER BY CAST(unote AS SIGNED) DESC;
SELECT * FROM `uchome_plug_collect_in`
WHERE `collectid` = 4744346
ORDER BY `unote` + 0 DESC;
SELECT
CONCAT(ROUND((INDEX_LENGTH + DATA_LENGTH) / 1024 / 1024, 2), 'MB') AS '總大小',
CONCAT(ROUND(DATA_LENGTH / 1024 / 1024, 2), 'MB') AS '數據大小',
CONCAT(ROUND(INDEX_LENGTH / 1024 / 1024, 2), 'MB') AS '索引大小'
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = '資料庫名'
AND TABLE_NAME = '表名';
這些語句涵蓋了日常開發 80% 的高頻需求,建議收藏備查。實際使用時請根據資料量與業務場景測試效能,必要時加上索引或改寫為 JOIN 以提升速度。