精华内容
下载资源
问答
  • oracle查询排序asc/desc 多列 order by

    千次阅读 2016-07-24 16:42:38
    转自:oracle查询排序asc/desc 多列 order by 查询结果的排序  显示EMP表中不同的部门编号。  如果要在查询的同时排序显示结果,可以使用如下的语句:  Sql代码 SELECT 字段列表 FROM 表名...

    转自:oracle查询排序asc/desc 多列 order by

    查询结果的排序 


    显示EMP表中不同的部门编号。 
    如果要在查询的同时排序显示结果,可以使用如下的语句: 
    Sql代码
    1. SELECT 字段列表 FROM 表名 WHERE 条件   
    2.         ORDER BY 字段名1 [ASC|DESC][,字段名2 [ASC|DESC]...];  
    [sql]  view plain  copy
    1. SELECT 字段列表 FROM 表名 WHERE 条件  
    2.   ORDER BY 字段名1 [ASC|DESC][,字段名2 [ASC|DESC]...];  

    ORDER BY从句后跟要排序的列。ORDER BY 从句出现在SELECT语句的最后。 
    排序有升序和降序之分,ASC表示升序排序,DESC表示降序排序。如果不指明排序顺序, 默认的排序顺序为升序ASC 。如果要降序,必须书写DESC关键字 
    1.升序排序 
    【训练1】 查询雇员姓名和工资,并按工资从小到大排序。 
    输入并执行查询: 
    Sql代码
    1. SELECT ename, sal FROM emp ORDER BY sal;  
    [sql]  view plain  copy
    1. SELECT ename, sal FROM emp ORDER BY sal;  

    执行结果为: 
    Sql代码
    1. ENAME             SAL   
    2.         ------------- --------------------   
    3.          SMITH              800   
    4.          JAMES              950  
    [sql]  view plain  copy
    1. ENAME            SAL  
    2.   ------------- --------------------  
    3.   SMITH             800  
    4.   JAMES             950  

    注意:若省略ASC和DESC,则默认为ASC,即升序排序。 
    2.降序排序 
    【训练2】 查询雇员姓名和雇佣日期,并按雇佣日期排序,后雇佣的先显示。 
    输入并执行查询: 
    Sql代码
    1. SELECT ename,hiredate FROM emp ORDER BY hiredate DESC;  
    [sql]  view plain  copy
    1. SELECT ename,hiredate FROM emp ORDER BY hiredate DESC;  

    结果如下: 
    Sql代码
    1. ENAME        HIREDATE   
    2.         ------------- -----------------------   
    3.          ADAMS        23-5月 -87   
    4.          SCOTT        19-4月 -87   
    5. MILLER       23-1月 -82   
    6.          JAMES        03-12月-81   
    7.          FORD         03-12月-81  
    [sql]  view plain  copy
    1. ENAME       HIREDATE  
    2.   ------------- -----------------------  
    3.   ADAMS     23-5月 -87  
    4.   SCOTT       19-4月 -87  
    5. MILLER      23-1月 -82  
    6.   JAMES       03-12月-81  
    7.   FORD        03-12月-81  

    注意: DESC表示降序排序,不能省略。 
    3.多列排序  
    可以按多列进行排序,先按第一列,然后按第二列、第三列......。 
    【训练3】 查询雇员信息,先按部门从小到大排序,再按雇佣时间的先后排序。 
    输入并执行查询: 
    Sql代码
    1. SELECT ename,deptno,hiredate FROM emp ORDER BY deptno,hiredate;  
    [sql]  view plain  copy
    1. SELECT ename,deptno,hiredate FROM emp ORDER BY deptno,hiredate;  

    结果如下: 
    Sql代码
    1. ENAME        DEPTNO HIREDATE   
    2.         ---------------- ----------------- ---------------   
    3.          CLARK                   10 09-6月 -81   
    4.          KING                    10 17-11月-81   
    5.          MILLER                  10 23-1月 -82   
    6.          SMITH                   20 17-12月-80   
    7.          JONES                   20 02-4月 -81   
    8.          FORD                    20 03-12月-81   
    9.          SCOTT                   20 19-4月 -87  
    [sql]  view plain  copy
    1. ENAME       DEPTNO HIREDATE  
    2.   ---------------- ----------------- ---------------  
    3.   CLARK               10 09-6月 -81  
    4.   KING                 10 17-11月-81  
    5.   MILLER               10 23-1月 -82  
    6.   SMITH                20 17-12月-80  
    7.   JONES                20 02-4月 -81  
    8.   FORD                20 03-12月-81  
    9.   SCOTT                20 19-4月 -87  

    说明:该排序是先按部门升序排序,部门相同的情况下,再按雇佣时间升序排序。 
    4.在排序中使用别名 
    如果要对计算列排序,可以为计算列指定别名,然后按别名排序。 
    【训练4】 按工资和工作月份的乘积排序。 
    输入并执行查询: 
    Sql代码
    1. SELECT empno, ename, sal*Months_between(sysdate,hiredate) AS total FROM emp   
    2.         ORDER BY total;  
    [sql]  view plain  copy
    1. SELECT empno, ename, sal*Months_between(sysdate,hiredate) AS total FROM emp   
    2.   ORDER BY total;  

    执行结果为: 
    Sql代码
    1. EMPNO ENAME          TOTAL   
    2.     ------------ ------------- ----------------------   
    3.          7876     ADAMS        221526.006   
    4.          7369     SMITH        222864.661   
    5.          7900     JAMES        253680.817   
    6.           7654    MARTIN       336532.484  
    [sql]  view plain  copy
    1. EMPNO ENAME         TOTAL  
    2.   ------------ ------------- ----------------------  
    3.       7876 ADAMS      221526.006  
    4.       7369  SMITH       222864.661  
    5.       7900  JAMES       253680.817  
    6.       7654  MARTIN     336532.484  

    sysdate获取当前日期。 

    练习题:  

    1.SQL语言中用来创建、删除及修改数据库对象的部分被称为: 
    A. 数据库控制语言(DCL) 
    B. 数据库定义语言(DDL) 
    C. 数据库操纵语言(DML) 
    D. 数据库事务处理语言 

    2.执行以下查询,表头的显示为: 
       
    Sql代码
    1. SELECT sal "Employee Salary" FROM emp  
    [sql]  view plain  copy
    1. SELECT sal "Employee Salary" FROM emp  

         A. EMPLOYEE SALARY B. employee salary 
         C. Employee Salary D. "Employee Salary“ 
    3.执行如下两个查询,结果为: 
    Sql代码
    1. SELECT ename name,sal salary FROM emp order by salary;   
    2.         SELECT ename name,sal "SALARY" FROM emp order by sal ASC;  
    [sql]  view plain  copy
    1. SELECT ename name,sal salary FROM emp order by salary;  
    2.   SELECT ename name,sal "SALARY" FROM emp order by sal ASC;  

    A. 两个查询结果完全相同 
    B. 两个查询结果不相同 
    C. 第一个查询正确,第二个查询错误 
    D. 第二个查询正确,第一个查询错误 
    4.参考本章的emp表的内容执行下列查询语句,出现在第一行上的人是: 
    Sql代码
    1. SELECT ename FROM emp WHERE deptno=10 ORDER BY sal DESC;  
    [sql]  view plain  copy
    1. SELECT ename FROM emp WHERE deptno=10 ORDER BY sal DESC;  

    A. SMITH B. KING 
    C. MILLER D. CLARK 
    5.哪个函数与||运算有相同的功能: 
    A. LTRIM B. CONCAT 
    C. SUBSTR D. INSTR 
    6.执行以下语句后,正确的结论是: 
    Sql代码
    1. SELECT empno,ename FROM emp WHERE hiredate<to_date('04-11月-1980')-100  
    [sql]  view plain  copy
    1. SELECT empno,ename FROM emp WHERE hiredate<to_date('04-11月-1980')-100  

    A. 显示给定日期后100天以内雇佣的雇员信息 
    B. 显示给定日期前100天以内雇佣的雇员信息 
    C. 显示给定日期100天以后雇佣的雇员信息 
    D. 显示给定日期100天以前雇佣的雇员信息 
    7.执行以下语句出错的行是: 
         
    Sql代码
    1. SELECT deptno,max(sal) FROM emp   
    2.              WHERE job IN('CLERK','SALEMAN','ANALYST')   
    3.              GROUP BY deptno   
    4.               HAVING sal>1500;  
    [sql]  view plain  copy
    1. SELECT deptno,max(sal) FROM emp   
    2.        WHERE job IN('CLERK','SALEMAN','ANALYST')  
    3.        GROUP BY deptno  
    4.         HAVING sal>1500;  

    A. 第一行 B. 第二行 
    C. 第三行 D. 第四行 
    8.执行以下语句出错的行是: 
    Sql代码
    1. SELECT deptno,max(avg(sal))   
    2.         FROM emp   
    3.         WHERE sal>1000   
    4.         Group by deptno;  
    [sql]  view plain  copy
    1. SELECT deptno,max(avg(sal))   
    2.   FROM emp   
    3.   WHERE sal>1000  
    4.   Group by deptno;  

    A. 第一行 B. 第二行 
    C. 第三行 D. 第四行 
    9.执行以下语句出错的行是: 
    Sql代码
    1. SELECT deptno,dname,ename,sal   
    2. FROM emp,dept   
    3. WHERE emp.deptno=dept.deptno   
    4. AND sal>1000;  
    [sql]  view plain  copy
    1. SELECT deptno,dname,ename,sal   
    2. FROM emp,dept  
    3. WHERE emp.deptno=dept.deptno  
    4. AND sal>1000;  

    A. 第一行 B. 第二行 
    C. 第三行 D. 第四行 
    10. 以下语句出错,哪种改动能够正确执行: 
    Sql代码
    1. SELECT    deptno, max(sal)   
    2. FROM emp   
    3. GROUP BY deptno   
    4. WHERE   max(sal)>2500;  
    [sql]  view plain  copy
    1. SELECT   deptno, max(sal)  
    2. FROM emp  
    3. GROUP BY deptno  
    4. WHERE   max(sal)>2500;  

    A. 将WHERE和GROUP BY 语句顺序调换一下 
    B. 将WHERE max(sal)>2500语句改成HAVING max(sal)>2500 
    C. 将WHERE max(sal)>2500语句改成WHERE sal>2500 
    D. 将WHERE max(sal)>2500语句改成HAVING sal>2500 
    11. 以下语句的作用是: 
    Sql代码
    1. SELECT ename,sal FROM emp   
    2.         WHERE sal<(SELECT min(sal) FROM emp)+1000;  
    [sql]  view plain  copy
    1. SELECT ename,sal FROM emp  
    2.   WHERE sal<(SELECT min(sal) FROM emp)+1000;  

    A. 显示工资低于1000元的雇员信息 
    B. 将雇员工资小于1000元的工资增加1000后显示 
    C. 显示超过最低工资1000元的雇员信息 
    D. 显示不超过最低工资1000元的雇员信息 
    12. 以下语句的作用是: 
    Sql代码
    1. SELECT   job FROM emp WHERE deptno=10   
    2.          MINUS   
    3.         SELECT   job FROM emp WHERE deptno=20;  
    [sql]  view plain  copy
    1. SELECT  job FROM emp WHERE deptno=10  
    2.   MINUS  
    3.   SELECT  job FROM emp WHERE deptno=20;  

    A. 显示部门10的雇员职务和20的雇员职务 
    B. 显示部门10和部门20共同的雇员职务 
    C. 显示部门10和部门20不同的雇员职务 
    D. 显示在部门10中出现,在部门20中不出现的雇员职务
    展开全文
  • 今天写一个页面,要求是查询排序后的前五条数据,遇到一个不大不小的坑,特此记录下 说明下:SQLSERVER中是用top查询前几条数据,ORACLE没有top,但是可以用ROWNUM实现。 我写的语句是: SELECT*FROMTABLE_NAME ...

    今天写一个页面,要求是查询排序后的前五条数据,遇到一个不大不小的坑,特此记录下

    说明下:SQL   SERVER中是用top查询前几条数据,ORACLE没有top,但是可以用ROWNUM实现。

    我写的语句是:

          SELECT   *   FROM   TABLE_NAME  t  WHERE   ROWNUM  <= 5   ORDER  BY  t.PRICE DESC;

    发现查询出来的数据并不是表中价格最高的前五条,而是数据库中前五条记录排序后的结果

     

    后改为

          SELECT   *   FROM   (SELECT   *    FROM    TABLE_NAME   t  ORDER  BY   t.PRICE DESC)  WHERE   ROWNUM <= 5;

    得到预期的结果。

    两者的不同就在于 前者先取出五条数据然后进行排序,后者先将表中所有数据排序,再取出前五条。

     

    展开全文
  • Oracle查询排序后的前10条记录

    万次阅读 2019-07-19 19:21:29
    查询表CMS_GPS中,车牌号为“苏EFN588”,时间最近的前10条记录, 不可以写成下面这样,这样写是先搜索出前10条记录,然后再按时间倒序排列, SELECT * FROM CMS_GPS WHERE VEHICLE_NO = '苏EFN588' AND ROWNUM &...

    查询表CMS_GPS中,车牌号为“苏EFN588”,时间最近的前10条记录,

    不可以写成下面这样,这样写是先搜索出前10条记录,然后再按时间倒序排列,

    SELECT * FROM CMS_GPS WHERE VEHICLE_NO = '苏EFN588' AND ROWNUM <11 ORDER BY TIMESTAMPS DESC;

    第一种方法:

    先查子表,按时间排序,并添加序号,主表查字表时筛选序号<11的,

    SELECT * FROM 
    (SELECT CG.*,ROWNUM rn FROM CMS_GPS CG WHERE VEHICLE_NO = '苏EFN588' ORDER BY TIMESTAMPS DESC)
    WHERE rn < 11;

    注意

    1. * 和 ROWNUM 一起查询时候,*前面必须加表名称做前缀,即 select CG.* , ROWNUM.....
    2. ROWNUM 不能以任何表的名称作为前缀,CG.ROWNUM 是非法的。
    3. rownum和排序:rownum在前,order by在后,rownum的是在取数据的时候产生的序号,而不是order by后产生的序号,想要按照排序后的结果编号,必须用子查询。

    SQL> select rownum ,id,name from student order by name;
        ROWNUM ID     NAME
    ---------- ------ ---------------------------------------------------
             3 200003 李三
             2 200002 王二
             1 200001 张一
             4 200004 赵四
    可以看出,rownum并不是按照排序后的列来生成的序号。系统是按照记录插入时的顺序来编号的

    为了获得排序后的编号,必须使用子查询;
    SQL> select rownum ,id,name from (select * from student order by name);
        ROWNUM ID     NAME
    ---------- ------ ---------------------------------------------------
             1 200003 李三
             2 200002 王二
             3 200001 张一
             4 200004 赵四

     

    第一种效率低,提供效率更高的第二种方法,

    第二种方法:

    先查字表,按时间排序,主表查字表时,自动生成伪列,并查询伪列ROWNUM<11的,

    SELECT * FROM 
    (SELECT * FROM CMS_GPS WHERE VEHICLE_NO = '苏EFN588' ORDER BY TIMESTAMPS DESC)
    WHERE rownum < 11;

    查询第5-10条数据:

    select * from (select CG.*,rownum as rn from CMS_GPS CG where VEHICLE_NO = '苏EFN588' and rownum<11) where rn>6;

    查询时间最近的第5-10条数据:

    select * from 
    	(SELECT aaa.*,ROWNUM rn FROM 
    		(SELECT * FROM CMS_GPS WHERE VEHICLE_NO = '苏EFN588' ORDER BY TIMESTAMPS DESC) aaa
    		WHERE rownum < 11
    	)
    where rn>4;
    

    错误示范:

     ORACLE查询第N~M条记录的方法:

    select * from (select a.*,a.rownum rn from (select * from table_name) a where a.rownum<M) where rn>n
    --这句就是从n到m也的数据,分为三层结构

    第一个错误:rownum前面不可以加表名做前缀,第二,三层结构太繁琐,可以优化为二层结构,

    select * from (select a.*,rownum rn from table_name a where rownum<M) where rn >n;

    MYSQL查询前10条、第2~10条记录的方法:

    select * from table_name limit 0,10  --通常0是可以省略的,直接写成  limit 10。0代表从第0条记录后面开始,也就是从第一条开始
    select * from table_name limit 1,10  --则为从第一条后面的记录开始展示,也就是说从第二条开始。

    MSSQL查询前10条的方法为:

    select top X * from table_name  --查询前X条记录,可以改成需要的数字。
    select top n * from (select top m * from table_name order by column_name ) a order by column_name desc  --查询第N到M条记录。常用的分页也是这种方式。
    例如常用的分页方式:
    declare @page int
    declare @row int
    set @page=2 --页数
    set @row=3  --每页展示行数
    select top (@row) * from (select top (@row*@page) * from table_name order by id  ) a order by id desc  --最基本的分页方式,改变@row和@page达到分页效果

     

     

    展开全文
  • Oracle 查询排序段,temp表空间占用

    千次阅读 2018-05-09 17:32:56
    select * from v$sort_segment;select * from V$SORT_USAGE;select t.username,t.session_addr,t.sql_id,t.extents ,s.USERNAME,s.PROGRAM,s.MACHINE,s.OSUSER ,s.LOGON_TIME from V$SORT_USAGE t,v$session s where...
    select * from v$sort_segment;
    
    select * from V$SORT_USAGE;
    select t.username,t.session_addr,t.sql_id,t.extents ,s.USERNAME,s.PROGRAM,s.MACHINE,s.OSUSER ,s.LOGON_TIME from V$SORT_USAGE t,v$session s where t.SESSION_ADDR=s.SADDR;
    展开全文
  • oracle分页排序查询

    2017-11-06 15:49:27
    ORACLE中用rownum分页并排序的SQL语句 select * from (select a.*,rownum row_num from (select * from mytable t order by t.id desc) a ) b where b.row_num between 1 and 10 分页查询格式1 在查询的最...
  • Oracle排序查询

    千次阅读 2018-07-06 22:00:13
    ---------排序查询/*语法: SELECT * |列名 FROM 表名 {WEHRE 查询条件} ORDER BY 列名 1 ASC【升序】|DESC【降序】,列名 2...ASC|DESC*/ -- 范例:查询雇员的工资从低到高select*from emp orderby sal asc;...
  • Oracle排序查询语句

    2021-04-09 11:38:45
    我的Oracle数据库学习笔记 Day 6 排序查询语句 文章目录我的Oracle数据库学习笔记
  • oracle默认排序

    万次阅读 2016-03-27 14:15:18
    oracle默认排序 oracle默认排序
  • 以下是对Oracle中的基本查询过滤排序示例进行了详细的分析介绍,需要的朋友可以参考下
  • Oracle SQL 查询排序

    2016-12-07 08:36:42
    1、在之前的查询里面只使用了SELECT、FROM、WHERE,但是如果需要针对查询后的结果按照指定的数据列进行排序操作,就必须使用ORDER BY子句。 排序的使用; 多个子句的关系。 2、当使用查询操作的时候,默认情况下它...
  • Oracle查询优化-02给查询结果排序

    千次阅读 2017-02-02 23:27:49
    2.1以指定的次序返回查询结果2.2按多个字段排序2.3按子串排序2.4 TRANSLATE2.5 按数字和字母混合字符串中的字母排序2.6 处理排序空值2.7 根据条件取不同列中的值来排序
  • Oracle数据库的查询排序

    千次阅读 2018-10-09 11:32:31
    查询排序 如果现在希望查询出来的数据可以按照指定的列由大到小或者是由小到大进行排列的 话,则可以使用 ORDER BY 子句,此子句的语法如下: SELECT [DISTINCT] * | 列 [别名] ,列 [别名] , … 执行顺序 3、控制要...
  • oracle分页 排序

    2011-11-27 16:58:12
    Oracle 分页和排序常用的4条查询语句
  • Oracle递归排序 父子关系排序

    千次阅读 2015-08-05 16:37:14
    Oracle递归排序 父子关系排序
  • 解决Oracle分页查询排序与效率问题解决Oracle分页查询排序与效率问题解决Oracle分页查询排序与效率问题解决Oracle分页查询排序与效率问题
  • oracle排序

    2013-05-11 16:01:28
    oracle中对排序的总结
  • oracle分页排序

    2017-01-15 10:17:04
    oracle 分页排序
  • Oracle条件与排序查询

    千次阅读 2018-08-11 22:32:55
    Oracle条件与排序查询 select *|字段名 from 表名 where 条件 order by 字段名 asc[默认值]|desc -- 查询每月能得到奖金的雇员: --空值的处理:要使用关键字: is null, is not null select * from emp where...
  • 表里面插入几千条数据,用select * 查出数据时发现显示的数据不是按照插入顺序排序的。应该是数据库本身有一套机制。求说法。
  • Oracle排序研究.pdf

    2021-10-10 06:54:04
    Oracle排序研究.pdf
  • 一个表有n列,默认按照第一列进行排序,假设第一列数据都相同(例如出入了m行数据,全部的第一个都是1),就用第二列进行排序,假如第一列相同,第二列也相同(第一列全是1,第二列全是2),就用第三列排序。...
  • Oracle查询语句的排序

    千次阅读 2019-04-03 20:03:16
    首先查一下student表全表的数据,查询出来的student表有五个列,分别是SNO-编号、SNAME-姓名、SSEX-性别、SBIRTHDAY-出生日期和CLASS-班级。从表中可以看到,这五个列的数据是杂乱无章的,也就是没有经过排序的。 ...
  • 本篇文章是对oracle指定排序的方法进行了详细的分析介绍,需要的朋友参考下
  • 客户反馈,上级用户查询的数据与下级查询的数据对不上。 分析: 由于上级用户查询的权限比较大,数据多,不会出现;下级只能查询管辖权限内的数据,而出现问题的多条数据刚好处于分页的最后与下页的开始,猜测...
  • Oracle排序研究

    2009-04-02 10:41:08
    Oracle排序研究的研究最新成果,致力于ORACLE和外排序算法研究的可以看看。
  • Oracle 查询技巧与优化(一) 单表查询排序

    千次阅读 多人点赞 2016-08-02 09:22:12
    关于Oracle单表查询排序相关的技巧与优化~
  • oracle查询结果指定排序规则

    千次阅读 2017-01-16 11:05:16
    sql根据帐号进行交易查询,按照寻常的升降排序无法满足要求,想要结果按指定顺序展示,可以使用order by instr 语句解决以上的需求。 原sql为: select t.TermNo, m.MercNam, t.TrmModNo  from ku....
  • oracle 去重排序

    千次阅读 2018-10-31 16:44:59
    oracle 去重排序 row_number() over(partition by twf.fkid order by twf.createdate desc) as CODE_ID twf.fkid 根据此分组 : twf.createdate 根据此排序
  • Oracle分页查询排序数据重复问题

    千次阅读 2013-10-16 16:06:59
    Oracle的分页查询是没有进行任何排序操作的,Oracle是顺序的从数据块中读取符合条件的数据返回到客户端。而Oracle排序算法不具有稳定性,也就是说,对于键值相等的 数据,这种算法完成排序后,不保证这些键值相等...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 148,129
精华内容 59,251
关键字:

oracle查询排序