ORACLE order by 用法文档格式.docx
- 文档编号:19045826
- 上传时间:2023-01-03
- 格式:DOCX
- 页数:10
- 大小:19.14KB
ORACLE order by 用法文档格式.docx
《ORACLE order by 用法文档格式.docx》由会员分享,可在线阅读,更多相关《ORACLE order by 用法文档格式.docx(10页珍藏版)》请在冰豆网上搜索。
ORDERBY从句出现在SELECT语句的最后。
排序有升序和降序之分,ASC表示升序排序,DESC表示降序排序。
如果不指明排序顺序,默认的排序顺序为升序ASC。
如果要降序,必须书写DESC关键字
1.升序排序
【训练1】查询雇员姓名和工资,并按工资从小到大排序。
输入并执行查询:
ename,sal
emp
sal;
ename,
sal
执行结果为:
1.ENAME
SAL
---------------------------------
3.
SMITH
800
4.
JAMES
950
SAL
-------------
--------------------
SMITH
800
JAMES
950
注意:
若省略ASC和DESC,则默认为ASC,即升序排序。
2.降序排序
【训练2】查询雇员姓名和雇佣日期,并按雇佣日期排序,后雇佣的先显示。
ename,hiredate
hiredate
DESC;
结果如下:
HIREDATE
------------------------------------
ADAMS
23-5月-87
SCOTT
19-4月-87
5.MILLER
23-1月-82
6.
03-12月-81
7.
FORD
03-12月-81
HIREDATE
-----------------------
ADAMS
23-5月
-87
SCOTT
19-4月
23-1月
-82
03-12月-81
FORD
DESC表示降序排序,不能省略。
3.多列排序
可以按多列进行排序,先按第一列,然后按第二列、第三列......。
【训练3】查询雇员信息,先按部门从小到大排序,再按雇佣时间的先后排序。
ename,deptno,hiredate
deptno,hiredate;
DEPTNOHIREDATE
------------------------------------------------
CLARK
1009-6月-81
KING
1017-11月-81
5.
MILLER
1023-1月-82
2017-12月-80
JONES
2002-4月-81
8.
2003-12月-81
9.
2019-4月-87
DEPTNO
----------------
-----------------
---------------
CLARK
10
09-6月
-81
KING
17-11月-81
MILLER
20
17-12月-80
JONES
02-4月
说明:
该排序是先按部门升序排序,部门相同的情况下,再按雇佣时间升序排序。
4.在排序中使用别名
如果要对计算列排序,可以为计算列指定别名,然后按别名排序。
【训练4】按工资和工作月份的乘积排序。
empno,ename,sal*Months_between(sysdate,hiredate)
AS
total
emp
total;
empno,
sal*Months_between(sysdate,hiredate)
1.EMPNOENAME
TOTAL
-----------------------------------------------
7876
221526.006
7369
222864.661
7900
253680.817
7654
MARTIN
336532.484
1.EMPNO
ENAME
TOTAL
------------
----------------------
7876
221526.006
7369
222864.661
7900
253680.817
7654
MARTIN
336532.484
sysdate获取当前日期。
练习题:
1.SQL语言中用来创建、删除及修改数据库对象的部分被称为:
A.数据库控制语言(DCL)
B.数据库定义语言(DDL)
C.数据库操纵语言(DML)
D.数据库事务处理语言
2.执行以下查询,表头的显示为:
"
EmployeeSalary"
Employee
Salary"
A.EMPLOYEESALARYB.employeesalary
C.EmployeeSalaryD."
EmployeeSalary“
3.执行如下两个查询,结果为:
ename
name,salsalary
order
by
salary;
SELECT
name,sal
SALARY"
ASC;
salary
A.两个查询结果完全相同
B.两个查询结果不相同
C.第一个查询正确,第二个查询错误
D.第二个查询正确,第一个查询错误
4.参考本章的emp表的内容执行下列查询语句,出现在第一行上的人是:
deptno=10
A.SMITHB.KING
C.MILLERD.CLARK
5.哪个函数与||运算有相同的功能:
A.LTRIMB.CONCAT
C.SUBSTRD.INSTR
6.执行以下语句后,正确的结论是:
empno,ename
hiredate<
to_date('
04-11月-1980'
)-100
A.显示给定日期后100天以内雇佣的雇员信息
B.显示给定日期前100天以内雇佣的雇员信息
C.显示给定日期100天以后雇佣的雇员信息
D.显示给定日期100天以前雇佣的雇员信息
7.执行以下语句出错的行是:
deptno,max(sal)
job
IN('
CLERK'
'
SALEMAN'
ANALYST'
)
GROUP
deptno
HAVING
sal>
1500;
)
deptno
A.第一行B.第二行
C.第三行D.第四行
8.执行以下语句出错的行是:
deptno,max(avg(sal))
1000
Group
deptno;
deptno,max(avg(sal))
1000
9.执行以下语句出错的行是:
deptno,dname,ename,sal
2.FROM
emp,dept
3.WHERE
emp.deptno=dept.deptno
4.AND
1000;
deptno,dname,ename,sal
emp,dept
emp.deptno=dept.deptno
10.以下语句出错,哪种改动能够正确执行:
deptno,
max(sal)
3.GROUP
4.WHERE
max(sal)>
2500;
deptno,
max(sal)
A.将WHERE和GROUPBY语句顺序调换一下
B.将WHEREmax(sal)>
2500语句改成HAVINGmax(sal)>
2500
C.将WHEREmax(sal)>
2500语句改成WHEREsal>
D.将WHEREmax(sal)>
2500语句改成HAVINGsal>
11.以下语句的作用是:
ename,sal
sal<
(SELECT
min(sal)
emp)+1000;
A.显示工资低于1000元的雇员信息
B.将雇员工资小于1000元的工资增加1000后显示
C.显示超过最低工资1000元的雇员信息
D.显示不超过最低工资1000元的雇员信息
12.以下语句的作用是:
job
deptno=10
MINUS
deptno=20;
MINUS
A.显示部门10的雇员职务和20的雇员职务
B.显示部门10和部门20共同的雇员职务
C.显示部门10和部门20不同的雇员职务
D.显示在部门10中出现,在部门20中不出现的雇员职务
今天在逛论坛的时候看到shiyiwan同学写了一个很简单的语句,可是orderby后面的形式却比较新颖(对于我来说哦),以前从来没看过这种用法,就想记下来,正好总结一下ORDERBY的知识。
1、ORDERBY中关于NULL的处理
缺省处理,Oracle在Orderby时认为null是最大值,所以如果是ASC升序则排在最后,DESC降序则排在最前。
当然,你也可以使用nullsfirst或者nullslast语法来控制NULL的位置。
Nullsfirst和nullslast是OracleOrderby支持的语法
如果Orderby中指定了表达式Nullsfirst则表示null值的记录将排在最前(不管是asc还是desc)
如果Orderby中指定了表达式Nullslast则表示null值的记录将排在最后(不管是asc还是desc)
使用语法如下:
--将nulls始终放在最前
select*fromzl_cbqcorderbycb_ldnullsfirst
--将nulls始终放在最后
select*fromzl_cbqcorderbycb_lddescnullslast
2、几种排序的写法
单列升序:
select<
column_name>
from<
table_name>
orderby<
;
(默认升序,即使不写ASC)
单列降序:
select<
desc;
多列升序:
column_one>
<
column_two>
多列降序:
desc,<
多列混合排序:
asc;
3、今天看到的新写法
SQL>
select*fromtb;
BLOGIDBLOGCLASS
----------------------------------------
1人生
2学习
3工作
5朋友
select*fromtborderbydecode(blogid,3,1,2),blogid;
5朋友
我所说的就是上面红色的那句话。
实现的功能就是不管怎样,BLOGID为3的值必须排在第一位,其他的记录按照BLOGID升序排序。
shiyiwan同学给我的解释是这样的:
“默认升序排序,blogid=3时返回1,其他则返回2,所以blogid=3的记录排在最前啊。
”
wildwave同学也给了个说法:
“你将那个decode理解成前面select后面的列,按照那一列排序就好了。
我又去试了一条语句,结果如下
select*fromtborderbydecode(blogid,3,1,2);
BLOGIDBLOGCLASS
----------------------------------------
3工作
1人生
2学习
我现在的理解是这样的,通过decode()函数,BLOGID值为3的那条记录被转换为了1,而其他的记录都是2,那么按照这个顺序排序,肯定BLOGID为3的那条记录永远在最前面了,不仅如此,注意到后面还加了个按BLOGID默认升序排列,这也就是说对于那些被DECODE转换为2的记录来说,按照它们的BLOGID升序排序。
呵呵,也不知道对不对,至少现在我是这么理解的,先记下来吧
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ORACLE order by 用法