具有 ORDER BY 子句的 FIRST 子句

可以在具有 FIRST 子句的 SELECT 语句中包括 ORDER BY 子句,以返回包含指定列的最高值或最低值的行。以下查询显示了包含 ORDER BY 子句以(按字母顺序)返回包含在 state 表中的前五个州的查询。该查询,(除 ORDER BY 子句以外,它与图 1相同)返回不同于图 1的一组行。

图: 查询

SELECT FIRST 5 * FROM state ORDER BY sname;

图: 查询结果

code sname
          
          AL   Alabama
          AK   Alaska
          AZ   Arizona
          AR   Arkansas
          CA   California
以下查询显示如何在具有 ORDER BY 子句的查询中使用 FIRST 子句来查找 stock 表中列出的 10 中最贵的商品。

图: 查询

SELECT FIRST 10 description, unit_price
          FROM stock ORDER BY unit_price DESC;

图: 查询结果

description     unit_price
            
            football           $960.00
            volleyball         $840.00
            baseball gloves    $800.00
            18-spd, assmbld    $685.90
            irons/wedge        $670.00
            basketball         $600.00
            12-spd, assmbld    $549.00
            10-spd, assmbld    $499.99
            football           $480.00
            bicycle brakes     $480.00

应用程序可以将 Projection 子句的 SKIP 和 FIRST 关键字与 ORDER BY 子句相结合使用,以执行连续查询,对某些固定大小(例如,最大行数可在一屏显示,无需滚动)的子集中所有满足条件的行进行增量检索。通过在每次查询后使用 FIRST 子句的 max 参数增大 SKIP 子句的 offset 参数值可实现上述操作。通过对满足条件的行施加唯一的命令,ORDER BY 子句确保每次查询返回满足条件行的不同子集。

以下查询显示了包含 SKIP 、FIRST 和 ORDER BY 规范以(按字母顺序)返回 state 表的 10 个州中的第六个州,而不是前五个州的查询。该查询类似于图 1,但 SKIP 5 规范指示数据库服务器返回不同于图 1的行集。

图: 查询

SELECT SKIP 5 FIRST 5 * FROM state ORDER BY sname;

图: 查询结果

code sname
            
            CO   Colorado
            CT   Connecticut
            DE   Delaware
            FL   Florida
            GA   Georgia

如果使用 SKIP 、FIRST 和 ORDER BY 关键字,必须指定对应于应用程序设计目标的参数,如果 SKIP 的 offset 参数大于满足条件的行数,那么任何 FIRST 或 LIMIT 规范都无效,并且查询不会返回任何结果。