ORACLE order by 用法文档格式.docx

上传人:b****6 文档编号:19045826 上传时间:2023-01-03 格式:DOCX 页数:10 大小:19.14KB
下载 相关 举报
ORACLE order by 用法文档格式.docx_第1页
第1页 / 共10页
ORACLE order by 用法文档格式.docx_第2页
第2页 / 共10页
ORACLE order by 用法文档格式.docx_第3页
第3页 / 共10页
ORACLE order by 用法文档格式.docx_第4页
第4页 / 共10页
ORACLE order by 用法文档格式.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

ORACLE order by 用法文档格式.docx

《ORACLE order by 用法文档格式.docx》由会员分享,可在线阅读,更多相关《ORACLE order by 用法文档格式.docx(10页珍藏版)》请在冰豆网上搜索。

ORACLE order by 用法文档格式.docx

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升序排序。

呵呵,也不知道对不对,至少现在我是这么理解的,先记下来吧

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1