-- 選取特定欄位
SELECT 欄位名1, 欄位名2 FROM 資料表名;
-- 選取所有欄位
SELECT * FROM 資料表名;
SELECT 欄位名 FROM 資料表名 WHERE 條件運算式;
-- 範例:年齡大於 25 且城市為 Taipei
SELECT * FROM Users WHERE Age > 25 AND City = 'Taipei';
-- 欄位別名
SELECT FirstName AS 名字, LastName AS 姓氏 FROM Users;
-- 衍生欄位必須加別名
SELECT UnitPrice * Quantity AS TotalAmount FROM [Order Details];
-- 表別名 (簡化多表查詢)
SELECT u.Name, o.OrderDate FROM Users u JOIN Orders o ON u.Id = o.UserId;
COUNT() 函數:統計列數或非 NULL 值數。`COUNT(*)` 含 NULL,`COUNT(欄位)` 排除 NULL。
-- 內連接:僅返回雙方匹配的列
SELECT A.Symbol, A.SName
FROM SecurityCode A
JOIN DayQuote B ON A.Symbol = B.Symbol;
-- LEFT JOIN:保留左表所有列,右表無匹配則 NULL
SELECT u.Name, o.OrderDate FROM Users u LEFT JOIN Orders o ON u.Id = o.UserId;
SELECT 欄位名 FROM 資料表名 ORDER BY 欄位名 [ASC | DESC];
-- 多欄位排序:先按城市升序,同城市按年齡降序
SELECT * FROM Users ORDER BY City ASC, Age DESC;
MySQL / PostgreSQL / SQLite:
SELECT * FROM Table LIMIT 5; -- 前 5 筆
SELECT * FROM Table LIMIT 5, 10; -- 跳過 5 筆,取 10 筆 (第 6-15 筆)
SELECT * FROM Table LIMIT 95, -1; -- 第 96 筆到結束
SQL Server / Access:
SELECT TOP 5 * FROM Table; -- 前 5 筆
SELECT TOP 10 PERCENT * FROM Table; -- 前 10%
-- 分頁 (SQL Server 2012+)
SELECT * FROM Table ORDER BY Id OFFSET 10 ROWS FETCH NEXT 20 ROWS ONLY;
| 指令 | 語法範例 | 說明 |
|---|---|---|
| INSERT | INSERT INTO 表 (欄1,欄2) VALUES (值1,值2); | 指定欄位插入,避免結構變更導致錯誤 |
| UPDATE | UPDATE 表 SET 欄1=新值 WHERE 條件; | **必加 WHERE**,否則全表更新 |
| DELETE | DELETE FROM 表 WHERE 條件; | **必加 WHERE**,`DELETE * FROM 表` 等同 `TRUNCATE` (不可回滾) |
SELECT 是 SQL 查詢的基石。熟練掌握「欄位選取 → 來源表 → 連接關係 → 過濾條件 → 分組彙總 → 排序 → 限制筆數」的完整鏈路,並理解各資料庫方言差異 (TOP vs LIMIT vs OFFSET/FETCH),是從入門到進階的必經之路。