Oracle中排序如何指定某些值在最前或最后

Oracle中排序如何指定某些值在最前或最后,第1张

Oracle排序默认的是升序的。

oracle对查询结果进行排序时,被排序的栏位存在null值,且要指定NULL值排在最前面或者最后面。

关键字:NullsFirst;NullsLast

默认情况:null默认为最大值(即:asc升序<小-->大>,null值排在最后;desc降序<大-->小>,null值排在最前面)

指定: 

1OracleOrderby支持的语法 

2指定Nullsfirst则表示null值的记录将排在最前(不管是asc还是desc) 

3指定Nullslast则表示null值的记录将排在最后(不管是asc还是desc)

语法举例:(Table:Tab_A有部分空值的栏位Col_A) 

selectfromTab_AorderbyTab_ACol_A(asc/desc)nullsfirst------>null值排在最前面。

selectfromTab_AorderbyTab_ACol_A(asc/desc)nullslast------>null值排在最后面。

其他方法: 

在orderby的时候,用Nvl、NVL2、Decode、casewhenend;等函数对栏位的null值进行处理 

例如:selectfromTab_AorderbyNVL(Tab_ACol_A,'abc')(asc/desc);

Select From 用户表 Order By userDept,userSn --首先排序所属部门,再排序排序字段

Select From 用户表 Order By userSn,userDept --首先排序排序字段,再排序所属部门

如果是:

insert into tabname values(xxx)

的写法,要完全按照表中字段的顺序来写

如果是

insert into tabname(字段列表) values(xxx)

那么,字段列表和值列表的顺序一致即可

分为两步来实现,首先插入数据,假设表T,有字段col1,col2,col3,需要向前200行的col2插入行数+1的值,并将col2变为第一列,

插入数据有两种方法:

1》直接update即:UPDATE T SET TCOL2 = ROWNUM + 1 WHERE ROWNUM <=200;

2》写一个存储过程

CREATE OR REPLACE PROCEDURE INS IS

BEGIN

FOR I IN 1 200 LOOP

INSERT INTO T (COL2) VALUES (I);

END LOOP;

COMMIT;

END;

编译并运行该过程,插入列即完成。

下面将COL2列调整为第一列:

方法一:借用临时表,建temp表与t表的表结构、数据完全一致,重建t表,调整字段顺序,再将temp表的数据导回来,即

CREATE TABLE TEMP AS SELECT FROM T;

CREATE TABLE T(

COL2 TYPE,

COL1 TYPE,

COL3 TYPE

);

INSERT INTO T

SELECT COL2,COL1,COL3 FROM TEMP;

COMMIT;

DROP TABLE TEMP;

此方法需要足够的空间、回滚段和时间消耗

方法2:利用数据库表对象更新字段的序列号

在当前表用户下使用下面命令查询T对象的编号:

select OBJECT_name,object_id from all_objects where object_name='T';(注意一定要大写)

SQL> /

OBJECT_NAME OBJECT_ID

------------------------------ ----------

T 50555

切换到sys帐号下

select obj#,col#,name from col$ where obj#=50555;

OBJ# COL# NAME

---------- ---------- ----------------------------

50555 1 COL1

50555 2 COL2

50555 3 COL3

Elapsed: 00:00:0003

下面可以通过修改这个系统表来实现修改列名与顺序,注意,COL#就是列的顺序。

UPDATE COL$ SET COL#=2 WHERE OBJ#=50555 and name='COL1';

UPDATE COL$ SET COL#=1 WHERE OBJ#=50555 and name='COL2';

再次查询

select obj#,col#,name from col$ where obj#=50555;

OBJ# COL# NAME

---------- ---------- ------------------------------

50555 1 COL2

50555 2 COL1

50555 2 COL3

提交修改commit ;

重启服务

SQL> SHUTDOWN IMMEDIATE

SQL>STARTUP

重新登录表用户下,查询SELECT FROM T;

COL2 COL1 COL3

至此列顺序调整成功

以上就是关于Oracle中排序如何指定某些值在最前或最后全部的内容,包括:Oracle中排序如何指定某些值在最前或最后、oracle数据库,用户表主要表字段为: userID(id),userName(姓名),userSn(排序字段),userDept(所属部门)、oracle insert需要注意字段顺序吗等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/10195459.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-06
下一篇2023-05-06

发表评论

登录后才能评论

评论列表(0条)

    保存