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

SQL 進階技巧彙總:從基礎語法到高效查詢模式

     編輯:MySQL 資料庫相關知識

整理常用且易忘的 SQL 技巧,涵蓋 DDL/DML 基礎、集合運算、外部連結、子查詢、分頁與條件篩選等實戰模式,方便開發隨時查閱。

一、基礎 DDL/DML 快速參考

  • 建庫/刪庫: CREATE DATABASE name; DROP DATABASE name;
  • 建表/刪表: CREATE TABLE t (c1 TYPE, ...); DROP TABLE t;
  • 複製表結構: CREATE TABLE new LIKE old; / CREATE TABLE new AS SELECT * FROM old WHERE 1=0;
  • 增/刪/改欄位: ALTER TABLE t ADD col TYPE; ALTER TABLE t DROP COLUMN col;
  • 索引/主鍵: CREATE INDEX idx ON t(col); ALTER TABLE t ADD PRIMARY KEY (col);
  • 視圖: CREATE VIEW v AS SELECT ...; DROP VIEW v;

二、核心查詢語法

-- 條件篩選
SELECT * FROM t WHERE col LIKE '%keyword%';
SELECT * FROM t WHERE col BETWEEN val1 AND val2;  -- 含邊界
SELECT * FROM t WHERE col NOT BETWEEN val1 AND val2;

-- 排序與分頁
SELECT * FROM t ORDER BY col1, col2 DESC LIMIT 10 OFFSET 20;

-- 聚合函數
SELECT COUNT(*) AS total, SUM(col), AVG(col), MAX(col), MIN(col) FROM t;

三、集合運算(UNION / EXCEPT / INTERSECT)

  • UNION:合併結果並去重;UNION ALL 保留重複行,效能更好。
  • EXCEPT(或 MINUS):第一集合減去第二集合;EXCEPT ALL 保留重複。
  • INTERSECT:取交集;INTERSECT ALL 保留重複。
  • 注意: 參與運算的查詢欄位數、型態、順序必須一致。

四、外部連結詳解

  • LEFT JOIN:保留左表所有行,右表無匹配則為 NULL。
  • RIGHT JOIN:保留右表所有行。
  • FULL OUTER JOIN:保留兩表所有行(MySQL 需用 UNION 模擬)。
SELECT a.*, b.col FROM a LEFT JOIN b ON a.id = b.a_id;

五、子查詢與衍生表

  • WHERE col IN (SELECT ...) / WHERE col IN (val1, val2)
  • 衍生表(內聯視圖): SELECT * FROM (SELECT a,b FROM t) AS dt WHERE dt.a > 1;

六、Access / SQL Server 特有語法差異

功能AccessSQL Server
布林值True/False1/0 或 bit
日期字面值#2023-01-01#'2023-01-01'
當前日期Now() / Date()GETDATE()
日期差DateDiff('d', d1, d2)DATEDIFF(day, d1, d2)
自動編號AutoNumberIDENTITY(1,1)

七、實用進階模式

  1. 最新記錄分組: SELECT a.title, a.user, b.max_date FROM t a JOIN (SELECT title, MAX(adddate) max_date FROM t GROUP BY title) b ON a.title=b.title AND a.adddate=b.max_date;
  2. 分頁優化(延遲關聯): 先查主鍵 ID 再 JOIN 明細,避免深分頁掃描大量行。
  3. 批量更新/刪除: 使用 JOIN 配合 UPDATE/DELETE 替代子查詢,效能更佳。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved