首页 oracle系列教程三 oracle复杂SQL语句

oracle系列教程三 oracle复杂SQL语句

举报
开通vip

oracle系列教程三 oracle复杂SQL语句oracle复杂SQL语句 一、sql语句的执行顺序 1)、常见的select、from、where的顺序:1, from 2, where 3, select 2)、完整的select、from、where、group by、having、order by的顺序:1, from 2, where 3, group by 4,having 5, select 6, order by 二、select case when的的使用 1)、语法: case when 条件1 then ac...

oracle系列教程三 oracle复杂SQL语句
oracle复杂SQL语句 一、sql语句的执行顺序 1)、常见的select、from、where的顺序:1, from 2, where 3, select 2)、完整的select、from、where、group by、having、order by的顺序:1, from 2, where 3, group by 4,having 5, select 6, order by 二、select case when的的使用 1)、语法: case when 条件1 then action1 when 条件2 then action2 when 条件3 then action3 ... else actionn end [case] eg、 select case when substr(to_char(SYSDATE, 'yyyymmdd'), 5 ,2) = '01' then '一月份' when substr(to_char(SYSDATE, 'yyyymmdd'), 5 ,2) = '02' then '二月份' when substr(to_char(SYSDATE, 'yyyymmdd'), 5 ,2) = '03' then '三月份' when substr(to_char(SYSDATE, 'yyyymmdd'), 5 ,2) = '04' then '四月份' else 'other' end case from dual; 2)、语法: 语法: case selector when value1 then action1 when value2 then action2 when value3 then action3 ... else action n end [case] eg、 SELECT CASE substr(to_char(SYSDATE, 'yyyymmdd'), 5 ,2) WHEN '01' THEN '一月份' WHEN '02' THEN '二月份' WHEN '03' THEN '三月份' WHEN '04' THEN '四月份' ELSE 'other' END CASE FROM DUAL; 3)、案例 create table 成绩(sno number, km varchar2(10),score number,grade char(6)); insert into 成绩 values(1, '语文', 65,null); insert into 成绩 values(2, '数学', 76,null); insert into 成绩 values(3, '英语', 86,null); insert into 成绩 values(4, '语文', 94,null); i、SELECT SNO, CASE WHEN SCORE >= 90 THEN '优秀' WHEN SCORE >= 80 THEN '良好' WHEN SCORE >= 70 THEN '中等' WHEN SCORE >= 60 THEN '及格' ELSE '不及格' END GRADE –GRADE别名,END后面不能包含CASE关键字,否则报错 FROM 成绩 查询结果如下: ii、把每个学生的grade列,用相应的等级来更新。 -- UPDATE 成绩 set grade = (SELECT grade FROM(xxxxxx) a where 成绩.sno = a.sno); update 成绩 set grade = ( select grade FROM( SELECT SNO, CASE WHEN SCORE >= 90 THEN '优秀' WHEN SCORE >= 80 THEN '良好' WHEN SCORE >= 70 THEN '中等' WHEN SCORE >= 60 THEN '及格' ELSE '不及格' END GRADE FROM 成绩 ) a where 成绩.sno = a.sno); 三、复杂更新语句的使用 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf T1里有a,b,c...N个字段, 表T2里有a,b,c三个字段, 然后想在T1中"c"与表T2中"c"相同的情况下从表T2中将a,b覆盖表T1中的a,b怎么做? i、 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); ii、 UPDATE T1 SET A = (SELECT A FROM T2 WHERE T1.C = T2.C), B = (SELECT B FROM T2 WHERE T1.C = T2.C) WHERE T1.C IN (SELECT C FROM T2); 四、DECODE函数的使用 i、select decode(x, 1, 'x is 1', 2, 'x is 2', 'others') from dual 当x等于1时,则返回‘x is 1’。 当x等于2时,则返回‘x is 2’。 否则,返回‘others’。 eg、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'); --方法一 select name ,decode(sex, '1','男生', '2','女生') "性别"FROM student; --方法二 用case实现 SELECT NAME, CASE SEX WHEN '1' THEN '男' WHEN '2' THEN '女' END 性别 FROM STUDENT; ii、DECODE取出一行内两列中的较大值 create table sales(month char(2),sales_tv number,sales_computer number); Insert into sales values('01', 10, 18); Insert into sales values('02', 28, 20); Insert into sales values('03', 36, 33); --sign(number): 取数字n的符号,大于0返回1,小于0返回-1,等于0返回0 select month, decode(sign(sales_tv-sales_computer), 1, sales_tv, sales_computer) as 较大销售量 from sales; 五、Oracle中的行列转换 create table 销售(商品名称 varchar2(10), 季度 char(2), 销售额 number); insert into 销售 values('电视机', '01', 100); insert into 销售 values('电视机', '02', 200); insert into 销售 values('电视机', '03', 300); insert into 销售 values('空调', '01', 50); insert into 销售 values('空调', '02', 150); insert into 销售 values('空调', '03', 180); 从格式1到格式2: select a.商品名称, sum(decode(a.季度,'01', a.销售额 ,0 )) 一季度, sum(decode(a.季度,'02', a.销售额 ,0 )) 二季度, sum(decode(a.季度,'03', a.销售额 ,0 )) 三季度, sum(decode(a.季度,'04', a.销售额 ,0 )) 四季度 from 销售 a group by a.商品名称 order by 1; 六、ROWNUM 的使用 --创建yggz表 create table yggz (bh number(6),gz number); insert into yggz values(1,1000); insert into yggz values(2,1100); insert into yggz values(3,900); insert into yggz values(4,2000); insert into yggz values(5,1500); insert into yggz values(6,3000); insert into yggz values(7,1400); insert into yggz values(8,1200); 作用:对查询结果,输出前若干条 记录 混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载 注意:只能与<、<=、between and连用。 i、 查找表中,第3条到第5条记录,并显示出来。 结果如下: --方法一 SELECT BH, GZ FROM (SELECT YGGZ.*, ROWNUM RN FROM YGGZ) WHERE RN >= 3 AND RN <= 5; --方法二 select * from yggz where rownum<=5 minus select * from yggz where rownum<=2; ii、按工资由高到底,查找表中,第3高的到第5高的记录,并显示出来。 显示结果如下: --方法一 SELECT BH, GZ FROM (SELECT A.*, ROWNUM RN FROM (SELECT YGGZ.* FROM YGGZ ORDER BY GZ DESC) A) WHERE RN <= 5 AND RN > 2; --方法二 select * from (select * from yggz order by gz desc) where rownum<=5 minus select * from (select * from yggz order by gz desc) where rownum<=2; 七、删除重复记录 CREATE table student(sno number(6), sname varchar2(10), sage number(6)); insert into student values(1, 'AA', 21); insert into student values(2, 'BB', 22); insert into student values(3, 'CC', 23); insert into student values(3, 'CC', 34); insert into student values(3, 'CC', 35); insert into student values(3, 'CC', 36); --方法一(不推荐,如果记录超过999条要慎重,in用法) DELETE FROM STUDENT --挑选学号重复的记录 WHERE SNO IN (SELECT SNO FROM STUDENT GROUP BY SNO HAVING COUNT(*) > 1) AND ROWID NOT IN --挑选学号不是最小的记录 (SELECT MIN(ROWID) FROM STUDENT GROUP BY SNO HAVING COUNT(*) > 1); --方法二(不推荐,如果记录超过999条要慎重,in用法) DELETE FROM STUDENT WHERE ROWID IN (SELECT A.ROWID FROM STUDENT A, STUDENT B WHERE A.SNO = B.SNO AND A.ROWID > B.ROWID); --方法三(推荐) DELETE FROM STUDENT D WHERE D.ROWID > (SELECT MIN(X.ROWID) FROM STUDENT X WHERE D.SNO = X.SNO); 备注:rowid的信息包含有数据库对象号、数据文件号、数据块号、行号,唯一的、查询速度最快滴。
本文档为【oracle系列教程三 oracle复杂SQL语句】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_461439
暂无简介~
格式:doc
大小:74KB
软件:Word
页数:6
分类:企业经营
上传时间:2013-05-21
浏览量:33