關聯式資料庫核心操作皆透過 SQL 指令完成。本文整理 DDL(定義)、DML(操作)、DQL(查詢)三大類常用指令語法與範例,適用於 MySQL、SQL Server、PostgreSQL 等主流資料庫(細節語法略有差異)。
| 操作 | 語法 | 範例 |
|---|---|---|
| 建立資料庫 | CREATE DATABASE <名稱>; | CREATE DATABASE student; |
| 切換資料庫 | USE <名稱>; | USE student; |
| 刪除資料庫 | DROP DATABASE <名稱>; | DROP DATABASE student; |
| 查看所有資料庫 | SHOW DATABASES; (MySQL) / \l (PG) |
CREATE TABLE <表名> (
<欄位名> <資料型別> [<約束條件>],
...
);
-- 範例
CREATE TABLE stuInfo (
stuId INT PRIMARY KEY,
stuName VARCHAR(20) NOT NULL,
stuGender CHAR(1) DEFAULT 'M',
birthDate DATE
);
常用約束:PRIMARY KEY、NOT NULL、UNIQUE、DEFAULT、AUTO_INCREMENT (MySQL) / IDENTITY (SQL Server) / SERIAL (PG)、FOREIGN KEY。
DROP TABLE <表名>;
-- 範例
DROP TABLE stuInfo;
| 操作 | 語法 (MySQL) | 範例 |
|---|---|---|
| 新增欄位 | ALTER TABLE <表> ADD <欄位> <型別>; | ALTER TABLE stuInfo ADD stuEmail VARCHAR(50); |
| 新增多欄位 | ALTER TABLE <表> ADD <欄位1> <型別>, ADD <欄位2> <型別>; | ALTER TABLE stuInfo ADD stuPhone VARCHAR(20), ADD stuAddr VARCHAR(100); |
| 修改欄位型別 | ALTER TABLE <表> MODIFY <欄位> <新型別>; | ALTER TABLE stuInfo MODIFY stuGender INT; |
| 修改欄位名稱 | ALTER TABLE <表> CHANGE <舊名> <新名> <型別>; | ALTER TABLE stuInfo CHANGE stuName stuFullName VARCHAR(30); |
| 刪除欄位 | ALTER TABLE <表> DROP <欄位>; | ALTER TABLE stuInfo DROP stuGender; |
| 新增主鍵 | ALTER TABLE <表> ADD PRIMARY KEY (<欄位>); | |
| 新增外鍵 | ALTER TABLE <表> ADD FOREIGN KEY (<欄位>) REFERENCES <父表>(<父欄位>); |
-- MySQL
SHOW COLUMNS FROM stuInfo;
DESC stuInfo;
SHOW CREATE TABLE stuInfo;
-- SQL Server
EXEC sp_help 'stuInfo';
-- PostgreSQL
\d stuInfo
-- 單筆
INSERT INTO <表> (<欄位清單>) VALUES (<值清單>);
INSERT INTO stuInfo (stuId, stuName) VALUES (1, 'Alice');
-- 多筆 (單語句)
INSERT INTO stuInfo (stuId, stuName) VALUES
(2, 'Bob'), (3, 'Cathy');
-- 從另一張表複製資料
INSERT INTO students (stuName)
SELECT stuName FROM stuInfo;
DELETE FROM <表> WHERE <條件>;
DELETE FROM stuInfo WHERE stuId = 4;
-- 刪除全部 (保留結構、自增計數器不歸零)
DELETE FROM stuInfo;
-- 截斷表 (釋放空間、重置自增、不可回滾、速度快)
TRUNCATE TABLE stuInfo;
UPDATE <表> SET <欄位> = <值> [, ...] WHERE <條件>;
UPDATE stuInfo SET stuName = 'Alice Updated' WHERE stuId = 1;
-- 全欄位
SELECT * FROM stuInfo;
-- 指定欄位
SELECT stuId, stuName FROM stuInfo;
-- 別名
SELECT stuId AS id, stuName AS name FROM stuInfo;
SELECT * FROM stuInfo WHERE stuId > 1 AND stuName LIKE 'A%';
-- MySQL / PostgreSQL
SELECT * FROM stuInfo ORDER BY stuId DESC LIMIT 10 OFFSET 20;
-- SQL Server (2012+)
SELECT * FROM stuInfo ORDER BY stuId DESC OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY;
SELECT COUNT(*) AS total, AVG(stuId) AS avg_id FROM stuInfo;
SELECT stuGender, COUNT(*) FROM stuInfo GROUP BY stuGender HAVING COUNT(*) > 1;
-- 內連接
SELECT s.stuName, c.courseName
FROM stuInfo s
JOIN student_course sc ON s.stuId = sc.stuId
JOIN course c ON sc.courseId = c.courseId;
-- 左連接 (保留左表所有)
SELECT s.stuName, c.courseName
FROM stuInfo s
LEFT JOIN student_course sc ON s.stuId = sc.stuId
LEFT JOIN course c ON sc.courseId = c.courseId;
CREATE INDEX idx_name ON stuInfo(stuName);CREATE VIEW v_stu AS SELECT stuId, stuName FROM stuInfo WHERE stuId > 10;START TRANSACTION; ... COMMIT; / ROLLBACK;GRANT SELECT, INSERT ON db.* TO 'user'@'%'; FLUSH PRIVILEGES;熟練這組核心 SQL 指令,是資料庫開發、運維、分析的基礎語言能力。建議搭配特定資料庫官方文件,掌握方言差異(如 LIMIT/OFFSET、自增、資料型別)。