现在的位置: 首页 > 综合 > 正文

笔记081111 ROWNUM 分页显示

2017年12月19日 ⁄ 综合 ⁄ 共 7580字 ⁄ 字号 评论关闭
 

笔记081111


2008-11-11 下午8:26 发布人 tiger chang

*************************************************
*    NAME    :ChangTiger            *
*    DATE    :19:28 2008-11-11        *
*    EMAIL   :o52tiger@yahoo.com.cn        *
*************************************************

Oracle Corp. (ORCL)

*****************************************************************
查询语句练习

SQL> SELECT SID , TRUNC(AVG(SCORE)) FROM S_L2 GROUP BY SID;

       SID TRUNC(AVG(SCORE))
---------- -----------------
      1001                62
      1002                76
      1003                69
      1004                46
————————————————————————————————————————
SQL> SELECT SID , AVG(SCORE) FROM S_L2 GROUP BY SID;

       SID AVG(SCORE)
---------- ----------
      1001 62.6666667
      1002         76
      1003 69.3333333
      1004         46
————————————————————————————————————————

————————————————————————————————————————

————————————————————————————————————————

*****************************************************************
SQL> SELECT AGE , COUNT(*) FROM STUDENT2
  2  GROUP BY AGE
  3  HAVING COUNT(*) > 2;

       AGE   COUNT(*)
---------- ----------
        24          4
————————————————————————————————————————

SQL> SELECT SID, TRUNC(AVG(SCORE)) FROM S_L2
  2  GROUP BY SID
  3  HAVING TRUNC(AVG(SCORE)) > 60;

       SID TRUNC(AVG(SCORE))
---------- -----------------
      1001                62
      1002                76
      1003                69
————————————————————————————————
SQL> SELECT SID, MAX(SCORE) FROM S_L2
  2  GROUP BY SID
  3  HAVING MAX(SCORE) > 80;

       SID MAX(SCORE)
---------- ----------
      1001         86
      1002         86
      1003         96

SQL>
——————————————————————————————————————
SQL> SELECT SID, LID ,COUNT(*)
  2  FROM S_L2
  3  GROUP BY SID, LID ;

       SID        LID   COUNT(*)
---------- ---------- ----------
      1001        110          1
      1001        111          1
      1001        112          1
      1002        110          1
      1002        111          1
      1002        112          1
      1003        110          1
      1003        111          1
      1003        112          1
      1004        110          1
      1004        111          1

       SID        LID   COUNT(*)
---------- ---------- ----------
      1004        112          1

12 rows selected.

SQL>
——————————————————————————————————————
SQL> SELECT SID , SUM(SCORE)PAYROLL
  2  FROM S_L2
  3  WHERE SID > 1000
  4  GROUP BY SID
  5  HAVING SUM(SCORE) > 100
  6  ORDER BY SUM(SCORE) DESC;

       SID    PAYROLL
---------- ----------
      1002        228
      1003        208
      1001        188
      1004        138

SQL>
——————————————————————————————————————
SQL> SELECT * FROM S_L2
  2  WHERE SCORE >
  3  ( SELECT AVG(SCORE) FROM S_L2 );

       SID        LID      SCORE
---------- ---------- ----------
      1001        110         86
      1002        110         86
      1001        111         86
      1002        111         86
      1003        112         96

SQL>
——————————————————————————————————————

SQL>  SELECT * FROM S_L2
  2  WHERE SCORE =
  3   (SELECT MIN(SCORE) FROM S_L2 );

       SID        LID      SCORE
---------- ---------- ----------
      1001        112         16

SQL>
——————————————————————————————————————
子查询
把一个查询的结果做为另一个查询的条件
*****************************************************************
查询前N 条数据 ROWNUM 关键字
不能使用大于号   相当与一个伪字段

SQL> SELECT * FROM STUDENT2
  2  WHERE ROWNUM < 5;

        ID SNAME                       CID        AGE
---------- -------------------- ---------- ----------
      1001 CHANGTIGER                    1         24
      1003 SHANGHAI                      2         24
      1004 BEIJING                       2         24
      1002 NANCHANG                      1         24

*****************************************************************
SQL> SELECT * FROM
  2  ( SELECT * FROM STUDENT2 ORDER BY ID )
  3  WHERE ROWNUM < 3;

        ID SNAME                       CID        AGE
---------- -------------------- ---------- ----------
      1001 CHANGTIGER                    1         24
      1002 NANCHANG                      1         24
*************************************************************************
SQL> SELECT * FROM
  2  ( SELECT * FROM STUDENT2 WHERE ID > 1002 ORDER BY ID )
  3  WHERE ROWNUM < 2;

        ID SNAME                       CID        AGE
---------- -------------------- ---------- ----------
      1003 SHANGHAI                      2         24
**************************************************************************
SQL>
SQL> SELECT ROWNUM , ID FROM STUDENT2;

    ROWNUM         ID
---------- ----------
         1       1001
         2       1003
         3       1004
         4       1002

****************************************************************

SQL>  SELECT ROWNUM , S.* FROM
  2  ( SELECT * FROM STUDENT2 WHERE  ID > 1002 ORDER BY ID ) S
  3   WHERE ROWNUM < 4

  4  ;

    ROWNUM         ID SNAME                       CID        AGE
---------- ---------- -------------------- ---------- ----------
         1       1003 SHANGHAI                      2         24
         2       1004 BEIJING                       2         24

SQL>
*****************************************************************
----效率低下

SQL> SELECT * FROM STUDENT2 WHERE ROWNUM <= 4
  2  AND ID NOT IN
  3  ( SELECT ID FROM STUDENT2 WHERE ROWNUM <=2 );

        ID SNAME                       CID        AGE
---------- -------------------- ---------- ----------
      1004 BEIJING                       2         24
      1002 NANCHANG                      1         24

SQL>
*****************************************************************
--效率不错
SQL> SELECT ID , SNAME , AGE FROM
  2  (SELECT ID , SNAME ,AGE ,ROWNUM R
  3  FROM STUDENT2 )
  4  WHERE R < 3 AND R > 1;

        ID SNAME                       AGE
---------- -------------------- ----------
      1003 SHANGHAI                     24

SQL>

*****************************************************************
SQL> SELECT ID , SNAME , AGE FROM
  2  ( SELECT ID , SNAME ,AGE ,ROWNUM R
  3  FROM STUDENT2 ORDER BY ID )
  4  WHERE R < 3
  5  AND R > 1;

        ID SNAME                       AGE
---------- -------------------- ----------
      1003 SHANGHAI                     24

*****************************************************************
INSERT INTO STUDENT2  VALUES (1006 , 'LLO', 1, 12);
INSERT INTO STUDENT2  VALUES (1007 , 'ELLO', 1, 12);
INSERT INTO STUDENT2  VALUES (1008 , 'HELL', 1, 12);
INSERT INTO STUDENT2  VALUES (1009 , 'HLLO', 1, 12);
INSERT INTO STUDENT2  VALUES (1010 , 'HELO', 1, 12);
INSERT INTO STUDENT2  VALUES (1011 , 'HELO', 1, 12);

****************************************************************
SQL> SELECT ID , SNAME , AGE
  2  FROM
  3  ( SELECT ID , SNAME , AGE ,ROWNUM R
  4  FROM STUDENT2 ORDER BY ID )
  5  WHERE R < 5
  6  AND R > 1;

        ID SNAME                       AGE
---------- -------------------- ----------
      1003 SHANGHAI                     24
      1004 BEIJING                      24
      1005 HELLO                        12

SQL>
*****************************************************************
效率再提高查询结果不对

SQL> SELECT ID , SNAME , AGE
  2  FROM (
  3  SELECT ID , SNAME , AGE , ROWNUM R
  4  FROM STUDENT2 WHERE ROWNUM <= 7 ORDER BY ID )
  5  WHERE R > 5;

        ID SNAME                       AGE
---------- -------------------- ----------
      1002 NANCHANG                     24
      1007 ELLO                         12

*****************************************************************
最终结果
SQL> SELECT ID , SNAME , AGE
  2  FROM (
  3  SELECT ID , SNAME , AGE , ROWNUM R
  4  FROM (SELECT  ID , SNAME , AGE FROM STUDENT2 ORDER BY ID) WHERE ROWNUM <= 7)
  5  WHERE R > 5;

*****************************************************************
结果对比
1 , 先排序在找前七个
SQL> SELECT ID , SNAME , AGE  FROM (
  2  SELECT ID ,SNAME , AGE , ROWNUM R FROM (
  3  SELECT ID ,SNAME ,AGE FROM STUDENT2 ORDER BY ID )
  4  WHERE ROWNUM <= 7 )
  5  WHERE R > 5;

        ID SNAME                       AGE
---------- -------------------- ----------
      1006 LLO                          12
      1007 ELLO                         12

SQL>
2 , 先找七个在排序 结果不对
SQL> SELECT ID , SNAME , AGE
  2  FROM (
  3  SELECT ID , SNAME , AGE , ROWNUM R
  4  FROM STUDENT2 WHERE ROWNUM <= 7 ORDER BY ID )
  5  WHERE R > 5;

        ID SNAME                       AGE
---------- -------------------- ----------
      1002 NANCHANG                     24
      1007 ELLO                         12

*****************************************************************
ROLLBACK 回滚数据
COMMIT   执行提交
*****************************************************************

抱歉!评论已关闭.