SQL 入门教程:SELECT 语句返回限制结果

本文内容

目录汇总:SQL 零基础入门教程

SELECT 语句返回指定表中所有匹配的行,很可能是每一行。如果你只想返回第一行或者一定数量的行,该怎么办呢?这是可行的,然而遗憾的是,各种数据库中的这一 SQL 实现并不相同。

在 SQL Server 中使用 SELECT 时,可以用 TOP 关键字来限制最多返回多少行,如下所示:

输入▼

1
2
SELECT TOP 5 prod_name
FROM Products;

输出▼

prod_name
-----------------
8 inch teddy bear
12 inch teddy bear
18 inch teddy bear
Fish bean bag toy
Bird bean bag toy

分析▼

上面代码使用 SELECT TOP 5 语句,只检索前 5 行数据。

如果你使用的是 DB2,就得使用下面这样的 DB2 特有的 SQL 语句:

输入▼

1
2
3
SELECT prod_name
FROM Products
FETCH FIRST 5 ROWS ONLY;

分析▼

FETCH FIRST 5 ROWS ONLY 就会按字面的意思去做的(只取前 5 行)。

如果你使用 Oracle,需要基于 ROWNUM(行计数器)来计算行,像这样:

输入▼

1
2
3
SELECT prod_name
FROM Products
WHERE ROWNUM <=5;

如果你使用 MySQL、MariaDB、PostgreSQL 或者 SQLite,需要使用 LIMIT 子句,像这样:

输入▼

1
2
3
SELECT prod_name
FROM Products
LIMIT 5;

分析▼

上述代码使用 SELECT 语句来检索单独的一列数据。LIMIT 5 指示 MySQL 等 DBMS 返回不超过 5 行的数据。这个语句的输出参见下面的代码。

为了得到后面的 5 行数据,需要指定从哪儿开始以及检索的行数,像这样:

输入▼

1
2
3
SELECT prod_name
FROM Products
LIMIT 5 OFFSET 5;

分析▼

LIMIT 5 OFFSET 5 指示 MySQL 等 DBMS 返回从第 5 行起的 5 行数据。第一个数字是检索的行数,第二个数字是指从哪儿开始。这个语句的输出是:

输出▼

prod_name
-------------------
Rabbit bean bag toy
Raggedy Ann
King doll
Queen doll

所以,LIMIT 指定返回的行数。LIMIT 带的 OFFSET 指定从哪儿开始。在我们的例子中,Products 表中只有 9 种产品,所以 LIMIT 5 OFFSET 5 只返回了 4 行数据(因为没有第 5 行)。

注意:第 0 行

第一个被检索的行是第 0 行,而不是第 1 行。因此,LIMIT 1 OFFSET 1 会检索第 2 行,而不是第 1 行。

提示:MySQL、MariaDB 和 SQLite 捷径

MySQL、MariaDB 和 SQLite 可以把 LIMIT 4 OFFSET 3 语句简化为 LIMIT 3,4。使用这个语法,逗号之前的值对应 OFFSET,逗号之后的值对应 LIMIT(反着的,要小心)。

说明:并非所有的 SQL 实现都一样

我加入这一节只有一个原因,就是要说明,SQL 虽然通常都有相当一致的实现,但你不能想当然地认为它总是这样。非常基本的语句往往是相通的,但较复杂的语句就不同了。当你针对某个问题寻找 SQL 解决方案时,一定要记住这一点。

请参阅

(完)

comments powered by Disqus

本文内容