复杂更新语言的使用
表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;