1、ORDER BY 从句出现在SELECT语句的最后。排序有升序和降序之分,ASC表示升序排序,DESC表示降序排序。如果不指明排序顺序,默认的排序顺序为升序ASC。如果要降序,必须书写DESC关键字1升序排序【训练1】 查询雇员姓名和工资,并按工资从小到大排序。输入并执行查询:ename, salempsal;ename,sal执行结果为:1.ENAME SAL - -3. SMITH 800 4. JAMES 950SAL-SMITH800JAMES950注意:若省略ASC和DESC,则默认为ASC,即升序排序。2降序排序【训练2】 查询雇员姓名和雇佣日期,并按雇佣日期排序,后雇佣的先显示。
2、ename,hiredatehiredateDESC;结果如下: HIREDATE - - ADAMS 23-5月 -87 SCOTT 19-4月 -87 5.MILLER 23-1月 -82 6. 03-12月-81 7. FORD 03-12月-81HIREDATE-ADAMS23-5月-87SCOTT19-4月23-1月-8203-12月-81FORD DESC表示降序排序,不能省略。3多列排序可以按多列进行排序,先按第一列,然后按第二列、第三列.。【训练3】 查询雇员信息,先按部门从小到大排序,再按雇佣时间的先后排序。ename,deptno,hiredatedeptno,hireda
3、te; DEPTNO HIREDATE - - - CLARK 10 09-6月 -81 KING 10 17-11月-81 5. MILLER 10 23-1月 -82 20 17-12月-80 JONES 20 02-4月 -81 8. 20 03-12月-81 9. 20 19-4月 -87DEPTNO-CLARK1009-6月-81KING17-11月-81MILLER2017-12月-80JONES02-4月说明:该排序是先按部门升序排序,部门相同的情况下,再按雇佣时间升序排序。4在排序中使用别名如果要对计算列排序,可以为计算列指定别名,然后按别名排序。【训练4】 按工资和工作月份的
4、乘积排序。empno, ename, sal*Months_between(sysdate,hiredate)AStotalemp total;empno,sal*Months_between(sysdate,hiredate)1.EMPNO ENAME TOTAL - - - 7876 221526.006 7369 222864.661 7900 253680.817 7654 MARTIN 336532.4841.EMPNOENAMETOTAL-7876221526.0067369222864.6617900253680.8177654MARTIN336532.484sysdate获取当
5、前日期。练习题:1SQL语言中用来创建、删除及修改数据库对象的部分被称为:A. 数据库控制语言(DCL)B. 数据库定义语言(DDL)C. 数据库操纵语言(DML)D. 数据库事务处理语言2执行以下查询,表头的显示为:Employee SalaryEmployeeSalary A. EMPLOYEE SALARY B. employee salary C. Employee Salary D. Employee Salary“3执行如下两个查询,结果为:enamename,sal salaryorderbysalary; SELECTname,salSALARYASC;salaryA. 两个查
6、询结果完全相同B. 两个查询结果不相同C. 第一个查询正确,第二个查询错误D. 第二个查询正确,第一个查询错误4参考本章的emp表的内容执行下列查询语句,出现在第一行上的人是:deptno=10A. SMITH B. KINGC. MILLER D. CLARK5哪个函数与|运算有相同的功能:A. LTRIM B. CONCATC. SUBSTR D. INSTR6执行以下语句后,正确的结论是:empno,enamehiredate1500;)deptnoA. 第一行 B. 第二行C. 第三行 D. 第四行8执行以下语句出错的行是:deptno,max(avg(sal) 1000 Groupd
7、eptno;deptno,max(avg(sal)10009执行以下语句出错的行是:deptno,dname,ename,sal 2.FROMemp,dept 3.WHEREemp.deptno=dept.deptno 4.AND1000;deptno,dname,ename,salemp,deptemp.deptno=dept.deptno10 以下语句出错,哪种改动能够正确执行: deptno,max(sal) 3.GROUP4.WHEREmax(sal)2500;deptno,max(sal)A. 将WHERE和GROUP BY 语句顺序调换一下B. 将WHERE max(sal)250
8、0语句改成HAVING max(sal)2500C. 将WHERE max(sal)2500语句改成WHERE salD. 将WHERE max(sal)2500语句改成HAVING sal11 以下语句的作用是:ename,salsal(SELECTmin(sal)emp)+1000;A. 显示工资低于1000元的雇员信息B. 将雇员工资小于1000元的工资增加1000后显示C. 显示超过最低工资1000元的雇员信息D. 显示不超过最低工资1000元的雇员信息12 以下语句的作用是: jobdeptno=10 MINUS deptno=20;MINUSA. 显示部门10的雇员职务和20的雇员
9、职务B. 显示部门10和部门20共同的雇员职务C. 显示部门10和部门20不同的雇员职务D. 显示在部门10中出现,在部门20中不出现的雇员职务今天在逛论坛的时候看到shiyiwan同学写了一个很简单的语句,可是order by后面的形式却比较新颖(对于我来说哦),以前从来没看过这种用法,就想记下来,正好总结一下ORDER BY的知识。1、ORDER BY 中关于NULL的处理缺省处理,Oracle在Order by 时认为null是最大值,所以如果是ASC升序则排在最后,DESC降序则排在最前。当然,你也可以使用nulls first 或者nulls last 语法来控制NULL的位置。Nu
10、lls first和nulls last是Oracle Order by支持的语法如果Order by 中指定了表达式Nulls first则表示null值的记录将排在最前(不管是asc 还是 desc)如果Order by 中指定了表达式Nulls last则表示null值的记录将排在最后 (不管是asc 还是 desc)使用语法如下:-将nulls始终放在最前select * from zl_cbqc order by cb_ld nulls first-将nulls始终放在最后select * from zl_cbqc order by cb_ld desc nulls last2、几种
11、排序的写法单列升序:select from order by ; (默认升序,即使不写ASC)单列降序:select , 多列降序: desc, select * from tb; BLOGID BLOGCLASS- - 1 人生 2 学习 3 工作 5 朋友select * from tb order by decode(blogid,3,1,2), blogid; 5 朋友我所说的就是上面红色的那句话。实现的功能就是不管怎样,BLOGID为3的值必须排在第一位,其他的记录按照BLOGID升序排序。shiyiwan同学给我的解释是这样的:“默认升序排序,blogid = 3时返回1,其他则返
12、回2, 所以blogid = 3的记录排在最前啊。”wildwave同学也给了个说法:“你将那个decode理解成前面select后面的列,按照那一列排序就好了。我又去试了一条语句,结果如下 select * from tb order by decode(blogid,3,1,2); BLOGID BLOGCLASS- - 3 工作 1 人生 2 学习我现在的理解是这样的,通过decode()函数,BLOGID值为3的那条记录被转换为了1,而其他的记录都是2,那么按照这个顺序排序,肯定BLOGID为3的那条记录永远在最前面了,不仅如此,注意到后面还加了个按BLOGID默认升序排列,这也就是说对于那些被DECODE转换为2的记录来说,按照它们的BLOGID升序排序。呵呵,也不知道对不对,至少现在我是这么理解的,先记下来吧
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1