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

MySQL 常用 SQL 語句速查手冊:關鍵字、多表連接、分頁、聚合與子查詢

     編輯:MySQL 綜合教學

一、高頻關鍵字與子句

關鍵字作用範例
DISTINCT去重SELECT DISTINCT dept FROM emp;
COUNT(*)行數統計SELECT COUNT(*) FROM orders WHERE status=1;
LIMIT分頁/取前 NSELECT * FROM logs ORDER BY id DESC LIMIT 10;
LIKE模糊查詢SELECT * FROM products WHERE name LIKE '%手機%';
BETWEEN ... AND範圍查詢SELECT * FROM orders WHERE amount BETWEEN 100 AND 500;
IN集合包含SELECT * FROM users WHERE id IN (1,5,10);
ORDER BY排序SELECT * FROM products ORDER BY price DESC;
GROUP BY分組聚合SELECT dept, AVG(salary) FROM emp GROUP BY dept;
HAVING分組後過濾SELECT dept, COUNT(*) c FROM emp GROUP BY dept HAVING c>5;

二、多表連接查詢(JOIN)

類型語法結果集圖示
INNER JOINA JOIN B ON A.id=B.a_id交集(雙方都有匹配)🔴🔵 重疊
LEFT JOINA LEFT JOIN B ON A.id=B.a_idA 全集 + B 匹配(無則 NULL)🔴 全 + 🔵 部分
RIGHT JOINA RIGHT JOIN B ON A.id=B.a_idB 全集 + A 匹配🔵 全 + 🔴 部分
FULL JOINA FULL JOIN B ON A.id=B.a_id並集(MySQL 不直接支持,用 UNION 模擬)🔴🔵 全

FULL JOIN 模擬

SELECT * FROM A LEFT JOIN B ON A.id=B.a_id
UNION
SELECT * FROM A RIGHT JOIN B ON A.id=B.a_id WHERE A.id IS NULL;

三、分頁優化模式

-- 分組去重保留最新
SELECT * FROM (
  SELECT *, ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY create_time DESC) rn
  FROM logs
) t WHERE rn = 1;

-- 批量插入去重
INSERT IGNORE INTO users (email, name) VALUES ('a@b.com','A'), ('c@d.com','C');

-- 間隙鎖死鎖排查
SHOW ENGINE INNODB STATUS\G  -- 看 LATEST DETECTED DEADLOCK

-- 查看表大小
SELECT table_name, 
  ROUND(data_length/1024/1024,2) data_mb,
  ROUND(index_length/1024/1024,2) idx_mb
FROM information_schema.tables 
WHERE table_schema='db_name' ORDER BY data_mb DESC;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved