SQL限制查询结果

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

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

    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语句:

    SELECT prod_name
    FROM Products
    FETCH FIRST 5 ROWS ONLY;

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

如果你使用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
    -------------------
    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解决方案时,一定要记住这一点。

酷客网相关文章:

赞(2)

评论 抢沙发

评论前必须登录!

 

SQL教程