Skip to content

适用虚谷数据库版本

v12.9



适用虚谷数据库版本

v12.9


结果集限定子句

📄字数 1.8K
👁️阅读量 加载中...

一、LIMIT

通过指定返回结果集的行数来控制查询结果的大小。通常与SELECT语句一起使用,可以显著减少数据库服务器的负载,提高查询性能。

LIMIT子句的基本语法是在SELECT语句的末尾添加LIMIT关键字,后面跟一个或多个参数。参数可以是具体的行数,也可以是一个表示偏移量(OFFSET)的值和一个表示返回行数的值。当前版本LIMIT最大支持到2147483647,超过报错。

1.1 语法格式

1.2 参数说明

  • select_offset_value
    • offset_num:指定结果集第一行数据的偏移量
    • ?:指定结果集第一行数据的偏移量为此参数占位符传入的值
    • : param_num:指定结果集第一行数据的偏移量为索引为param_num的参数的值
    • : param_name:指定结果集第一行数据的偏移量为名称为param_name的参数的值
  • select_limit_value:指定最终返回数据条数
    • limit_num:指定结果集最大行数
    • ALL:指定返回所有数据
    • ?:指定结果集最大行数为此参数占位符传入的值
    • : param_num:指定结果集最大行数为索引为param_num的参数的值
    • : param_name:指定结果集最大行数为名称为param_name的参数的值

1.3 示例

创建一个名为tb_limit的表,并插入100条记录:

  • LIMIT 2:从tb_limit表中选择前2行记录。
  • LIMIT 2,2:跳过前2行,然后返回接下来的2行记录。
  • LIMIT 2 OFFSET 2:同LIMIT 2,2
  • LIMIT 10,1:跳过前10行,然后返回接下来的1行记录。
sql
-- 创建数据表
SQL> CREATE TABLE tab_limit(id INT, name VARCHAR(20));

Execute successful.
Use time:26 ms.

SQL> BEGIN
     FOR i IN 1..100 LOOP
         INSERT INTO tab_limit VALUES(i, 'limit');
     END LOOP;
     END;
     /

Execute successful.
Use time:6 ms.

-- 返回指定数据量
SQL> SELECT * FROM tab_limit LIMIT 2;

+----+-------+
| ID | NAME  |
+----+-------+
| 1  | limit |
| 2  | limit |
+----+-------+

(2 rows)
Use time:1 ms.
-- 偏移指定条数后返回指定数据量
SQL> SELECT * FROM tab_limit LIMIT 2,2;

+----+-------+
| ID | NAME  |
+----+-------+
| 3  | limit |
| 4  | limit |
+----+-------+

(2 rows)
Use time:0 ms.

SQL> SELECT * FROM tab_limit LIMIT 2 OFFSET 2;

+----+-------+
| ID | NAME  |
+----+-------+
| 3  | limit |
| 4  | limit |
+----+-------+

(2 rows)
Use time:0 ms.
-- 子查询使用LIMIT
SQL> SELECT * FROM tab_limit WHERE id = (SELECT id FROM tab_limit LIMIT 10,1);

+----+-------+
| ID | NAME  |
+----+-------+
| 11 | limit |
+----+-------+

(1 row)
Use time:1 ms.

二、TOP

2.1 功能描述

限制查询结果返回前N行。

2.2 示例

sql
SQL> CREATE TABLE tab_top(id INT,name VARCHAR(20));

Execute successful.
Use time:28 ms.

SQL> INSERT INTO tab_top VALUES(1,'one')(2,'two')(3,'three')(4,'four');

Total 4 records effected.
Use time:1 ms.

SQL> SELECT TOP 2 * FROM tab_top ORDER BY id DESC;

+----+-------+
| ID | NAME  |
+----+-------+
| 4  | four  |
| 3  | three |
+----+-------+

(2 rows)
Use time:2 ms.

三、DISTINCT

3.1 功能描述

DISTINCT用于在SELECT查询中去除重复的记录,令结果集中每一行都是唯一的。

3.2 示例

sql
SQL> CREATE TABLE tab_dis(id INT,name VARCHAR(20));

Execute successful.
Use time:28 ms.

SQL> INSERT INTO tab_dis VALUES(1,'one')(1,'two')(3,'three')(4,'four');

Total 4 records effected.
Use time:0 ms.

SQL> SELECT DISTINCT id FROM tab_dis;

+----+
| ID |
+----+
| 1  |
| 3  |
| 4  |
+----+

(3 rows)
Use time:0 ms.