首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> SQL 基礎

SQL FIRST() 函數全攻略:Access 專屬與主流資料庫標準寫法

     編輯:SQL 基礎

SQL FIRST() 函數完整解析

FIRST() 函數 用於返回指定欄位中第一筆記錄的值。與 LAST() 同樣,此函數僅存在於 Microsoft Access,其他主流關聯式資料庫均不支援,需使用標準 SQL 替代方案。

Access 原生語法

SELECT FIRST(column_name) FROM table_name;

主流資料庫標準替代寫法

SQL Server (T-SQL)

SELECT TOP 1 column_name 
FROM table_name 
ORDER BY column_name ASC;

範例: 取得 id 最小的網站名稱

SELECT TOP 1 name FROM Websites ORDER BY id ASC;

MySQL / PostgreSQL / SQLite

SELECT column_name 
FROM table_name 
ORDER BY column_name ASC 
LIMIT 1;

範例:

SELECT name FROM Websites ORDER BY id ASC LIMIT 1;

Oracle

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,為資料表中第一筆記錄)。

FIRST() 替代方案執行結果

核心概念釐清

「第一筆」的定義陷阱

關聯式資料庫理論上不保证儲存順序,若無 ORDER BY,所謂「第一筆」是不可預測的。生產環境必須明確指定排序依據:

  • 主鍵 ID(自增欄位):ORDER BY id ASC
  • 建立時間戳:ORDER BY created_at ASC
  • 業務邏輯排序欄位

語法對比速查表

資料庫關鍵字排序限制標準化程度
AccessFIRST()隱含內建專屬
SQL ServerTOP 1ASCTOP 1T-SQL
MySQL/PG/SQLiteLIMIT 1ASCLIMIT 1標準
OracleROWNUMASCWHERE <=1專屬

進階應用模式

取得各分組第一筆記錄 (分組 Top 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) 標準寫法,封裝於資料存取層,實現資料庫無關性,避免未來遷移成本。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved