Oracle学习笔记——基础一起学 13

复杂更新语言的使用

表T1里有a,b,c...N个字段,表T2里有a,b,c三个字段,然后想在T1中“c”与表T2中“c”相同的情况下从表T2中将a,b覆盖表T1中的a,b怎么做?

/*创建T1、T2表

create table T1(a int,b int,c int,d int,e int);

create table T2(a int,b int,c int);

insert into T1 values(1,2,3,4,5);

insert into T1 values(10,20,3,4,5);

insert into T1 values(10,20,4,40,50);

insert into T2 values(-1,-1,3);

insert into T2 values(-2,-2,4);

*/

--查看t1、t2表。

select * from t1;

select * from t2;

--根据要求写sql语句

update t1 set a=(select a from t2 where t2.c=t1.c) ,b=(select b from t2 where t2.c=t1.c) where t1.c in(select c from t2);

分析函数

分析函数用于返回计算完成聚集的累计排名、序号等

分析函数为每组记录返回多个行

以下三个分析函数用于计算一个行在一组有序中的排位,序号从1开始

ROW_NUMBER 返回连续的排序,不论值是否相等

RANK具有相等值的行排序相同,序数随后跳跃

DENSE_RANK 具有相等值的行排序相同,序号是连续的

--创建一个成绩表

create table 成绩(sno number,km varchar2(10),score number);

insert into 成绩 values(1,'语文',60);

insert into 成绩 values(1,'数学',60);

insert into 成绩 values(1,'英语',60);

insert into 成绩 values(2,'语文',70);

insert into 成绩 values(2,'数学',70);

insert into 成绩 values(3,'语文',80);

--现在对score的倒序进行row_number()排序(over表示对哪一列进行排序)

select sno,km,score,row_number() over(order by score desc) from 成绩;

--把row_number换成rank,具有相等值的行排序相同,序数随后跳跃

select sno,km,score,rank() over(order by score desc) from 成绩;

--dense_rank 具有相等值的行排序相同,序号是连续的(与row_number的区别是序号不会跳跃)

select sno,km,score,dense_rank() over(order by score desc) from 成绩;

DECODE的使用

/*DECODE中的if-then-else逻辑

1、在逻辑编程中,经常使用到if-then—else进行逻辑判断。

在decode的语法中,实际上就是这样的逻辑处理过程。

它的语法如下

2、DECODE(value,if1,then1,if2,then2,if3,then3,...else)

3、value代表某个表的任何类型的任意列或一个通过计算所得的任何结果。当每个value值被测试,

如果value为if1,DECODE函数的结果是then1;

如果value等于if2,DECODE函数结果就是then2;

事实上,可以给出多个if/then配对。

如果value结果不等于给出的任何配对时,decode结果就返回else。

4、需要注意的是,这里if、then及else都可以是函数或是计算表达式。

*/

--创建student表

create table student(id number,name varchar2(10),sex char(1));

insert into student values(1,'张','1');

insert into student values(2,'王','2');

insert into student values(3,'李','1');

--查询student表

select * from student;

--现在需要判断性别1为男,2为女。

select id,name,decode(sex,1,'男'2,'女') from student;

--当然也可以把else去掉,直接decode(sex,1,'男','女')

select id,name,decode(sex,1,'男','女') from student;

如果能帮到你请感谢我的老婆“一行琉璃”

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值