SQL 是互聯網從業者必備核心技能。本文系統整理從 DDL、DML 到高級查詢、連接操作的常用語句,附帶實用示例,適合速查與入門學習。
-- 創建數據庫
CREATE DATABASE db_name;
-- 刪除數據庫
DROP DATABASE db_name;
-- 備份 SQL Server (示例)
USE master;
EXEC sp_addumpdevice 'disk', 'testBack', 'c:\backup\mydb.dat';
BACKUP DATABASE pubs TO testBack;
-- 創建表
CREATE TABLE tab_name (
col1 type1 [NOT NULL] [PRIMARY KEY],
col2 type2 [NOT NULL],
...
);
-- 根據舊表結構創建新表 (不複製數據)
CREATE TABLE tab_new LIKE tab_old; -- MySQL
CREATE TABLE tab_new AS SELECT * FROM tab_old WHERE 1=0; -- 通用
-- 刪除表
DROP TABLE tab_name;
-- 增加列
ALTER TABLE tab_name ADD COLUMN col_name data_type;
-- 注意:大多數引擎不支持刪除列或修改列類型 (僅擴充 VARCHAR 長度)
-- 主鍵管理
ALTER TABLE tab_name ADD PRIMARY KEY (col);
ALTER TABLE tab_name DROP PRIMARY KEY;
-- 創建索引
CREATE [UNIQUE] INDEX idx_name ON tab_name (col1, col2...);
-- 刪除索引
DROP INDEX idx_name ON tab_name;
-- 索引不可修改,需刪除重建
-- 視圖
CREATE VIEW view_name AS SELECT ...;
DROP VIEW view_name;
-- 查詢
SELECT * FROM table1 WHERE condition;
-- 插入 (顯式指定列名,防止結構變更報錯)
INSERT INTO table1 (field1, field2) VALUES (value1, value2);
-- 刪除
DELETE FROM table1 WHERE condition;
-- 更新
UPDATE table1 SET field1=value1 WHERE condition;
-- 模糊查詢
SELECT * FROM table1 WHERE field1 LIKE '%value%';
-- 排序
SELECT * FROM table1 ORDER BY field1, field2 [DESC];
-- 聚合函數
SELECT COUNT(*) AS total FROM table1;
SELECT SUM(field1) AS sum_val FROM table1;
SELECT AVG(field1) AS avg_val FROM table1;
SELECT MAX(field1) AS max_val FROM table1;
SELECT MIN(field1) AS min_val FROM table1;
參與運算的查詢結果列數、類型必須一致。
UNION ALL 保留重複行,性能更好。EXCEPT ALL 保留重複。INTERSECT ALL 保留重複。-- 左外連接:保留左表所有行
SELECT a.col1, b.col2
FROM table_a a
LEFT OUTER JOIN table_b b ON a.key = b.key;
-- 右外連接:保留右表所有行
SELECT a.col1, b.col2
FROM table_a a
RIGHT OUTER JOIN table_b b ON a.key = b.key;
-- 全外連接:保留兩表所有行 (MySQL 不直接支持,可用 UNION 模擬)
SELECT * FROM table_a a LEFT JOIN table_b b ON a.key = b.key
UNION
SELECT * FROM table_a a RIGHT JOIN table_b b ON a.key = b.key;
-- 僅複製結構 (Access/SQL Server)
SELECT * INTO new_table FROM old_table WHERE 1<>1;
-- 或
SELECT TOP 0 * INTO new_table FROM old_table;
-- 複製數據 (指定列,順序對應)
INSERT INTO target_table (col1, col2) SELECT col_a, col_b FROM source_table;
-- 跨數據庫複製 (Access 語法,路徑為絕對路徑)
INSERT INTO target_table (col1, col2)
SELECT col_a, col_b FROM source_table IN 'C:\path\db.mdb' WHERE condition;
-- IN 子查詢
SELECT a, b, c FROM table_a WHERE key_col IN (SELECT key_col FROM table_b);
-- 等值列表
SELECT a, b, c FROM table_a WHERE key_col IN (1, 2, 3);
INSERT INTO t(a,b) VALUES(...),避免表結構變更導致業務報錯。