結構化查詢語言(SQL)是關聯式資料庫的標準操作語言。掌握核心 SQL 語法是使用 JDBC 進行資料庫開發的前提。本文整理建立、查詢、更新、刪除(CRUD)四大核心操作的標準語法與範例。
CREATE DATABASE database_name;
範例:CREATE DATABASE EMP;
DROP DATABASE database_name;
警告:執行後資料永久遺失,需具備管理員權限。
CREATE TABLE table_name (
column_name data_type [constraints],
column_name data_type [constraints],
...
);
範例:
CREATE TABLE Employees (
id INT NOT NULL,
age INT NOT NULL,
first VARCHAR(255),
last VARCHAR(255),
PRIMARY KEY (id)
);
DROP TABLE table_name;
範例:DROP TABLE Employees;
INSERT INTO table_name VALUES (value1, value2, ...);
範例:INSERT INTO Employees VALUES (100, 18, 'Zara', 'Ali');
最佳實務:明確指定欄位名稱,避免結構變更導致錯誤:
INSERT INTO Employees (id, age, first, last) VALUES (101, 25, 'Mahnaz', 'Fatma');
SELECT column1, column2, ... FROM table_name WHERE conditions;
常用比較運算子:=, !=, <, >, <=, >=, BETWEEN, LIKE, IN, IS NULL
範例:
-- 依主鍵查詢 SELECT first, last, age FROM Employees WHERE id = 100; -- 模糊查詢 SELECT first, last, age FROM Employees WHERE first LIKE '%Zara%'; -- 範圍查詢 SELECT * FROM Employees WHERE age BETWEEN 20 AND 30;
UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE conditions;
範例:UPDATE Employees SET age = 20 WHERE id = 100;
關鍵提醒:務必加 WHERE 條件,否則會更新整張表所有列!
DELETE FROM table_name WHERE conditions;
範例:DELETE FROM Employees WHERE id = 100;
同樣警告:無 WHERE 條件將清空整張表資料。
-- 排序 SELECT * FROM Employees ORDER BY age DESC, first ASC; -- 分頁 (MySQL/PostgreSQL) SELECT * FROM Employees LIMIT 10 OFFSET 20; -- 分頁 (SQL Server 2012+) SELECT * FROM Employees ORDER BY id OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY;
SELECT COUNT(*), AVG(age), MAX(age), MIN(age) FROM Employees;
SELECT department, COUNT(*) as emp_count FROM Employees GROUP BY department HAVING COUNT(*) > 5;
| 操作 | Statement 方法 | 回傳值 |
|---|---|---|
| SELECT | executeQuery() | ResultSet |
| INSERT/UPDATE/DELETE | executeUpdate() | int (影響列數) |
| DDL (CREATE/DROP) | execute() | boolean |
String sql = "SELECT * FROM Employees WHERE id = ? AND age > ?";
try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.setInt(1, 100);
pstmt.setInt(2, 18);
try (ResultSet rs = pstmt.executeQuery()) {
// 處理結果
}
}
優勢:防止 SQL 注入、效能優化(預編譯)、型別安全、可讀性佳。
| SQL 標準 | MySQL | PostgreSQL | Java 對應 |
|---|---|---|---|
| INTEGER | INT | INTEGER | int / Integer |
| VARCHAR(n) | VARCHAR(n) | VARCHAR(n) | String |
| DATE | DATE | DATE | java.sql.Date / LocalDate |
| TIMESTAMP | DATETIME | TIMESTAMP | java.sql.Timestamp / LocalDateTime |
| BOOLEAN | TINYINT(1) | BOOLEAN | boolean / Boolean |
| BLOB | BLOB | BYTEA | byte[] / Blob |