2.6 限制结果
SELECT
语句返回指定表中所有匹配的行,很可能是每一行。如果你只想返回第一行或者一定数量的行,该怎么办呢?这是可行的,然而遗憾的是,各种数据库中的这一SQL实现并不相同。
在SQL Server和Access中使用SELECT
时,可以使用TOP
关键字来限制最多返回多少行,如下所示:
输入▼
SELECT TOP 5 prod_name
FROM Products;
输出▼
prod_name
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,很可能习惯使用下面这一DBMS特定的SQL语句,像这样:
输入▼
SELECT prod_name
FROM Products
FETCH FIRST 5 ROWS ONLY;
分析▼
FETCH FIRST 5 ROWS ONLY
就会按字面的意思去做的。
如果你使用Oracle,需要基于ROWNUM
(行计数器)来计算行,像这样:
输入▼
SELECT prod_name
FROM Products
WHERE ROWNUM <=5;
如果你使用MySQL、MariaDB、PostgreSQL或者SQLite,需要使用LIMIT
子句,像这样:
输入▼
SELECT prod_name
FROM Products
LIMIT 5;
分析▼
上述代码使用SELECT
语句来检索单独的一列数据。LIMIT 5
指示MySQL等DBMS返回不超过5行的数据。这个语句的输出参见下面的代码。
为了得到后面的5行数据,需要指定从哪儿开始以及检索的行数,像这样:
输入▼
SELECT prod_name
FROM Products
LIMIT 5 OFFSET 5;
分析▼
LIMIT 5 OFFSET 5
指示MySQL等DBMS返回从第5行起的5行数据。第一个数字是指从哪儿开始,第二个数字是检索的行数。这个语句的输出是:
输出▼
prod_name
prod_name
Rabbit bean bag toy
Raggedy Ann
King doll
Queen doll
所以,LIMIT
指定返回的行数。带OFFSET
的LIMIT
指定从哪儿开始。在我们的例子中,Products
表中只有9种产品,所以LIMIT 5 OFFSET 5
只返回了4行数据(因为没有第5行)。
警告:第0行
第一个被检索的行是第0行,而不是第1行。因此,LIMIT 1 OFFSET 1
会检索第2行,而不是第1行。
提示:MySQL和MariaDB快捷键
MySQL和MariaDB支持简化版的LIMIT 4 OFFSET 3
语句,即LIMIT 3,4
。使用这个语法,,
之前的值对应LIMIT
,,
之后的值对应OFFSET
。
说明:并非所有的SQL实现都一样
我加入这一节只有一个原因,就是要说明,SQL虽然通常都有相当一致的实现,但你不能想当然地认为它总是这样。非常基本的语句往往是容易移植的,但较复杂的语句就不同了。当你针对某个问题寻找SQL解决方案时,一定要记住这一点。