SQL教學
SQL RDBMS概念
SQL簡介
SQL NOT NULL約束
SQL DEFAULT約束
SQL唯一約束
SQL主鍵
SQL外鍵
SQL CHECK約束
SQL示例數據庫
SQL索引約束
SQL NULL值
數據庫 - 第一範式(1NF)
數據庫 - 第二範式(2NF)
數據庫 - 第三範式(3NF)
SQL RDBMS數據庫
SQL語法
SQL數據類型
SQL操運算符
SQL算術運算符
SQL比較運算符
SQL邏輯運算符
SQL表達式
SQL創建數據庫(CREATE DATABASE)
SQL丟棄或刪除數據庫(DROP DATABASE)
SQL選擇數據庫(SELECT Database, USE語句)
SQL創建表(CREATE Table)
SQL從現有表創建表
SQL刪除表(DROP或DELETE Table)
SQL INSERT INTO插入查詢
SQL SELECT查詢語句
SQL WHERE子句
SQL AND和OR運算符
SQL UPDATE更新查詢
SQL DELETE刪除查詢
SQL LIKE子句
SQL TOP,LIMIT,ROWNUM子句
SQL ORDER BY排序子句
SQL GROUP BY(分組)
SQL Distinct關鍵字
SQL排序結果
SQL約束
SQL Join聯接
SQL INNER JOIN(內部連接)
SQL LEFT JOIN(左連接)
SQL RIGHT JOIN(右連接)
SQL FULL JOIN(全連接)
SQL自連接
SQL笛卡爾或交叉連接
SQL UNION子句/操作符
SQL INTERSECT子句
SQL EXCEPT子句
SQL別名語法
SQL索引
SQL ALTER TABLE(修改表)
SQL TRUNCATE TABLE(截斷表)
SQL View(視圖)
SQL Having子句
SQL事務
SQL通配符運算符
SQL日期函數
SQL ADDDATE()函數
SQL ADDTIME()函數
SQL CONVERT_TZ()函數
SQL CURDATE()函數
SQL CURRENT_DATE()函數
SQL CURTIME()函數
SQL CURRENT_TIME()函數
SQL CURRENT_TIMESTAMP()方法
SQL DATE(expr)函數
SQL DATEDIFF()方法
SQL DATE_ADD()和DATE_SUB()方法
SQL DATE_FORMAT()函數
SQL DATE_SUB()方法
SQL DAY()函數
SQL DAYNAME()函數
SQL DAYOFMONTH()函數
SQL DAYOFWEEK()函數
SQL DAYOFYEAR()函數
SQL EXTRACT()函數
SQL FROM_DAYS()函數
SQL FROM_UNIXTIME()函數
SQL HOUR()方法
SQL LAST_DAY()函數
SQL LOCALTIME和LOCALTIME()函數
SQL LOCALTIMESTAMP和LOCALTIMESTAMP()函數
SQL MAKEDATE()函數
SQL MAKETIME()函數
SQL MICROSECOND()函數
SQL MINUTE()函數
SQL MONTH()函數
SQL MONTHNAME()函數
SQL NOW()函數
SQL PERIOD_ADD()函數
SQL PERIOD_DIFF()函數
SQL QUARTER()函數
SQL SECOND()函數
SQL SEC_TO_TIME()函數
SQL STR_TO_DATE()函數
SQL SUBDATE()函數
SQL SUBTIME()函數
SQL SYSDATE()函數
SQL TIME()函數
SQL TIMEDIFF()函數
SQL TIMESTAMP()函數
SQL TIMESTAMPADD()函數
SQL TIMESTAMPDIFF()函數
SQL TIME_FORMAT()函數
SQL TIME_TO_SEC()函數
SQL TO_DAYS()函數
SQL UNIX_TIMESTAMP()函數
SQL UTC_DATE()函數
SQL UTC_TIME()函數
SQL UTC_TIMESTAMP()函數
SQL WEEK()函數
SQL WEEKDAY()函數
SQL WEEKOFYEAR()函數
SQL YEAR()函數
SQL YEARWEEK()函數
SQL臨時表
SQL克隆表
SQL子查詢
SQL使用序列(自動遞增)
SQL DISTINCT重複處理
SQL注入
SQL實用函數
SQL MAX()函數
SQL MIN()函數
SQL AVG()函數
SQL SUM()函數
SQL SQRT()函數
SQL RAND()函數
SQL CONCAT()函數
SQL數值函數
SQL ABS()函數
SQL ACOS()函數
SQL ASIN(X)函數
SQL ATAN(X)函數
SQL ATAN2()函數
SQL BIT_AND()函數
SQL BIT_COUNT()函數
SQL BIT_OR()函數
SQL CEIL()函數
SQL CONV()函數
SQL COS()函數
SQL COT()函數
SQL DEGREES()函數
SQL EXP(X)函數
SQL FLOOR(X)函數
SQL FORMAT(X,D)函數
SQL GREATEST()函數
SQL INTERVAL()函數
SQL LEAST()函數
SQL LOG()函數
SQL LOG10(X)函數
SQL MOD()函數
SQL OCT(N)函數
SQL PI()函數
SQL POW()函數
SQL RADIANS()函數
SQL ROUND()函數
SQL SIGN(X)函數
SQL SIN(X)函數
SQL SQRT(X)函數
SQL STD()函數
SQL TAN(X)函數
SQL TRUNCATE()函數
SQL字符串函數
SQL ASCII(str)函數
SQL BIN(N)函數
SQL BIT_LENGTH()函數
SQL CHAR()函數
SQL CHAR_LENGTH()函數
SQL CHARACTER_LENGTH()函數
SQL字符串CONCAT()函數
SQL CONCAT_WS()函數
SQL CONV(N,from_base,to_base)函數
SQL ELT()函數
SQL EXPORT_SET()函數
SQL FIELD()函數
SQL FIND_IN_SET()函數
SQL FORMAT()函數
SQL HEX()函數
SQL INSERT()函數
SQL INSTR()函數
SQL LCASE()函數
SQL LEFT()函數
SQL LENGTH()函數
SQL LOAD_FILE()函數
SQL LOCATE()函數
SQL LOWER()函數
SQL LPAD()函數
SQL LTRIM()函數
SQL MAKE_SET()函數
SQL MID()函數
SQL OCT()函數
SQL OCTET_LENGTH()函數
SQL ORD()函數
SQL POSITION()函數
SQL QUOTE()函數
SQL REGEXP模式
SQL REPEAT()函數
SQL REPLACE()函數
SQL REVERSE()函數
SQL RIGHT()函數
SQL RPAD()函數
SQL SOUNDEX()函數
SQL SPACE()函數
SQL STRCMP()函數
SQL SUBSTRING()函數
SQL SUBSTRING_INDEX()函數
SQL TRIM()函數
SQL UCASE()函數
SQL UNHEX()函數
SQL UPPER()函數

SQL Limit子句

本教程我們將演示如何使用SQL LIMIT子句來限制SELECT語句返回的行數。

1. SQL LIMIT子句簡介

要檢索查詢返回的行的一部分,請使用LIMITOFFSET子句。 以下說明了這些子句的語法:

SELECT 
    column_list
FROM
    table1
ORDER BY column_list
LIMIT row_count OFFSET offset;

在這個語法中,

  • row_count確定將返回的行數。
  • OFFSET子句在開始返回行之前跳過偏移行。 OFFSET子句是可選的。 如果同時使用LIMITOFFSET子句,OFFSET會在LIMIT約束行數之前先跳過偏移行。

在使用LIMIT子句時,使用ORDER BY子句確保返回的行按指定順序非常重要。

SQL

並非所有數據庫系統都支持LIMIT子句,因此,LIMIT子句僅在某些數據庫系統中可用,例如MySQL,PostgreSQL,SQLite,Sybase SQL Anywhere和HSQLDB。

1. SQL LIMIT子句示例

我們將使用示例數據庫中的employees表來演示LIMIT子句用法。

SQL

以下語句返回employees表中按first_name列排序的所有行。

SELECT 
    employee_id, first_name, last_name
FROM
    employees
ORDER BY first_name;

執行上面查詢語句,得到以下結果 -

+-------------+------------+-----------+
| employee_id | first_name | last_name |
+-------------+------------+-----------+
|         103 | Alexander  | Lee       |
|         115 | Alexander  | Su        |
|         114 | Avg        | Su        |
|         193 | Britney    | Zhao      |
|         104 | Bruce      | Wong      |
... ...
|         100 | Steven     | Lee       |
|         203 | Susan      | Zhou      |
|         106 | Valli      | Chen      |
|         206 | William    | Wu        |
+-------------+------------+-----------+
40 rows in set

如果要只返回前5行,請使用LIMIT子句,如以下語句。

SELECT 
    employee_id, first_name, last_name
FROM
    employees
ORDER BY first_name
LIMIT 5;

執行上面查詢語句,得到以下結果 -

+-------------+------------+-----------+
| employee_id | first_name | last_name |
+-------------+------------+-----------+
|         115 | Alexander  | Su        |
|         103 | Alexander  | Lee       |
|         114 | Avg        | Su        |
|         193 | Britney    | Zhao      |
|         104 | Bruce      | Wong      |
+-------------+------------+-----------+
5 rows in set

要跳過兩行並獲取接下來的五行,請使用LIMITOFFSET子句,如以下語句所示。

SELECT 
    employee_id, first_name, last_name
FROM
    employees
ORDER BY first_name
LIMIT 5 OFFSET 3;

結果如下圖所示 -

SQL

如果使用的是MySQL,則可以使用LIMIT OFFSET子句的較短形式。

SELECT 
    employee_id, first_name, last_name
FROM
    employees
ORDER BY first_name
LIMIT 3 , 5;

2. 使用SQL LIMIT獲取具有最高或最低值的前N行

可以使用LIMIT子句獲取具有最高或最低值的前N行。 例如,以下聲明獲得薪資最高的前五名員工。

SELECT 
    employee_id, first_name, last_name, salary
FROM
    employees
ORDER BY salary DESC
LIMIT 5;

執行上面示例代碼,得到以下結果 -

SQL

首先,ORDER BY子句按工資按降序對員工進行排序,然後LIMIT子句限制從查詢返回的五行。

爲了獲得薪資最低的前五名員工,可以按升序對員工進行排序。

3. 獲取具有第N個最高值的行

假設必須得到公司薪水第二高的員工。請使用LIMIT OFFSET子句,如下所示。

SELECT 
    employee_id, first_name, last_name, salary
FROM
    employees
ORDER BY salary DESC
LIMIT 1 OFFSET 1;

ORDER BY子句按工資降序對員工進行排序。 LIMIT 1 OFFSET 1子句從結果集中獲取第二行。

此查詢的假設是每個員工都有不同的薪水。 如果有兩名員工擁有相同的最高薪水,那麼它將會失敗。 此外,如果有兩個或更多具有相同第二高薪的員工,則查詢只返回第一個。

要解決此問題,可以使用以下語句首先獲得第二高薪。

SELECT DISTINCT
    salary
FROM
    employees
ORDER BY salary DESC
LIMIT 1 , 1;

執行上面示例代碼,得到以下結果 -

mysql> SELECT DISTINCT
    salary
FROM
    employees
ORDER BY salary DESC
LIMIT 1 , 1;
+--------+
| salary |
+--------+
| 17000  |
+--------+
1 row in set

並將結果傳遞給另一個查詢:

SELECT 
    employee_id, first_name, last_name, salary
FROM
    employees
WHERE
    salary = 17000;

結果如下所示 -

SQL

如果使用子查詢,則可以將兩個查詢組合到單個查詢中,如下所示:

SELECT 
    employee_id, first_name, last_name, salary
FROM
    employees
WHERE
    salary = (SELECT DISTINCT
            salary
        FROM
            employees
        ORDER BY salary DESC
        LIMIT 1 , 1);

結果如下所示 -

SQL

在本教程中,我們向您介紹了SQL LIMITOFFSET子句,這些子句用於限制查詢返回的行數。