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

實用 MySQL 常用語句大全:從年齡計算到主鍵查詢

     編輯:MySQL 綜合教學

實用 MySQL 常用語句大全:從年齡計算到主鍵查詢

在日常資料庫開發與維護中,掌握一些高頻、實用的 SQL 語句能大幅提升工作效率。本文整理了 8 個常見場景的 MySQL 語句,涵蓋日期運算、統計分析、架構查詢與效能優化等核心需求,供開發者快速參考。

1. 透過生日精確計算年齡

利用 TO_DAYS 與 DATE_FORMAT 函數,即可將出生日期轉換為實際年齡:

SELECT DATE_FORMAT(FROM_DAYS(TO_DAYS(NOW()) - TO_DAYS(@dateofbirth)), '%Y') + 0;

原理是計算當前日期與出生日期的天數差,再轉換為年份格式,最後加 0 強制轉為數值型態。

2. 計算兩個 DATETIME 的時間差

若 dt1、dt2 為 DATETIME 型別,秒數差直接用 UNIX_TIMESTAMP 相減:

UNIX_TIMESTAMP(dt2) - UNIX_TIMESTAMP(dt1)

進一步換算:除以 60 得分鐘、除以 3600 得小時、除以 86400 得天數。

3. 查詢某欄位出現恰好 N 次的值

結合 GROUP BY 與 HAVING 即可快速篩選:

SELECT id
FROM tbl
GROUP BY id
HAVING COUNT(*) = N;

4. 計算兩日期間的工作日數(排除週末與假日)

需有一張 calendar 表記錄每一天屬性(holiday=0 代表工作日):

SELECT COUNT(*)
FROM calendar
WHERE d BETWEEN Start AND Stop
  AND DAYOFWEEK(d) NOT IN (1,7)
  AND holiday = 0;

5. 查詢指定資料表的主鍵欄位名

從 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';

6. 統計各資料庫佔用磁碟大小(含索引與碎片空間)

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;

7. 讓字串欄位按數值排序

兩種寫法皆可,利用 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;

8. 查詢單一資料表的資料、索引與總大小

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 以提升速度。

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