FIRST() 函數 用於返回指定欄位中第一筆記錄的值。與 LAST() 同樣,此函數僅存在於 Microsoft Access,其他主流關聯式資料庫均不支援,需使用標準 SQL 替代方案。
SELECT FIRST(column_name) FROM table_name;
SELECT TOP 1 column_name
FROM table_name
ORDER BY column_name ASC;
範例: 取得 id 最小的網站名稱
SELECT TOP 1 name FROM Websites ORDER BY id ASC;
SELECT column_name
FROM table_name
ORDER BY column_name ASC
LIMIT 1;
範例:
SELECT name FROM Websites ORDER BY id ASC LIMIT 1;
SELECT column_name
FROM table_name
ORDER BY column_name ASC
WHERE ROWNUM <= 1;
範例:
SELECT name FROM Websites ORDER BY id ASC WHERE ROWNUM <= 1;
Websites 表資料:
+----+--------------+---------------------------+-------+---------+ | id | name | url | alexa | country | +----+--------------+---------------------------+-------+---------+ | 1 | Google | https://www.google.cm/ | 1 | USA | | 2 | 淘寶 | https://www.taobao.com/ | 13 | CN | | 3 | 菜鳥教程 | https://www.runoob.com/ | 4689 | CN | | 4 | 微博 | https://weibo.com/ | 20 | CN | | 5 | Facebook | https://www.facebook.com/ | 3 | USA | | 6 | 百度 | https://www.baidu.com/ | 4 | CN | | 7 | stackoverflow| https://stackoverflow.com/ | 0 | IND | +----+--------------+---------------------------+-------+---------+
SELECT name AS FirstSite FROM Websites LIMIT 1;
返回 Google(id=1,為資料表中第一筆記錄)。
關聯式資料庫理論上不保证儲存順序,若無 ORDER BY,所謂「第一筆」是不可預測的。生產環境必須明確指定排序依據:
ORDER BY id ASCORDER BY created_at ASC| 資料庫 | 關鍵字 | 排序 | 限制 | 標準化程度 |
|---|---|---|---|---|
| Access | FIRST() | 隱含 | 內建 | 專屬 |
| SQL Server | TOP 1 | ASC | TOP 1 | T-SQL |
| MySQL/PG/SQLite | LIMIT 1 | ASC | LIMIT 1 | 標準 |
| Oracle | ROWNUM | ASC | WHERE <=1 | 專屬 |
MySQL 8.0+ / PostgreSQL / SQL Server 可用窗口函數:
WITH ranked AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY country ORDER BY id ASC) AS rn
FROM Websites
)
SELECT name, country FROM ranked WHERE rn = 1;
SELECT *,只查詢必要欄位新專案強烈建議直接使用 ORDER BY ... ASC LIMIT 1 (或 TOP 1) 標準寫法,封裝於資料存取層,實現資料庫無關性,避免未來遷移成本。