關聯式資料庫使用表格(Table)來組織資料,表格由列(Row)和欄位(Column)組成,不同表格之間可以透過外來鍵建立關聯。
-- 查詢所有欄位
SELECT * FROM users;
-- 查詢特定欄位
SELECT name, email FROM users;
-- 條件查詢
SELECT * FROM users WHERE age >= 18;
-- 排序
SELECT * FROM users ORDER BY created_at DESC;
-- 限制筆數
SELECT * FROM users LIMIT 10;
-- 聚合函數
SELECT COUNT(*) FROM users;
SELECT AVG(age) FROM users;
SELECT SUM(salary) FROM users;
SELECT department, COUNT(*) FROM users GROUP BY department;
-- 插入單筆
INSERT INTO users (name, email, age) VALUES ('John', '[email protected]', 25);
-- 插入多筆
INSERT INTO users (name, email) VALUES
('Alice', '[email protected]'),
('Bob', '[email protected]');
-- 更新資料
UPDATE users SET age = 26 WHERE name = 'John';
-- 更新多個欄位
UPDATE users SET age = 27, email = '[email protected]' WHERE id = 1;
-- 刪除資料
DELETE FROM users WHERE id = 1;
-- 刪除所有資料(保留結構)
DELETE FROM users;
-- INNER JOIN
SELECT u.name, o.order_date, o.total
FROM users u
INNER JOIN orders o ON u.id = o.user_id;
-- LEFT JOIN(即使沒有訂單也要顯示用戶)
SELECT u.name, o.order_date, o.total
FROM users u
LEFT JOIN orders o ON u.id = o.user_id;
每個欄位只能有單一值,不可再有重複群組
在 1NF 基礎上,所有非主鍵欄位必須完全依賴主鍵
在 2NF 基礎上,非主鍵欄位不可依賴其他非主鍵欄位
所有候選鍵都必須能唯一識別記錄
索引是資料庫中用於加速資料查詢的資料結構。
-- 建立索引
CREATE INDEX idx_users_email ON users(email);
-- 複合索引
CREATE INDEX idx_users_name_age ON users(name, age);
-- 唯一索引
CREATE UNIQUE INDEX idx_users_phone ON users(phone);