oracle查询学习总结_第1页
oracle查询学习总结_第2页
oracle查询学习总结_第3页
oracle查询学习总结_第4页
oracle查询学习总结_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Oracle查询学习查询查询产生一个虚拟表,看到的是表形式显示的结果,但结果并不真正存储,每次执行查询只是现从数据表中提取数据,并按照表的形式显示出来。查询语法SELECT FROM WHERE ORDER BY ASC或DESC示例SELECT StudentId,StudentName,AddressFROM StudentsWHERE SEX = 男ORDER BY StudentId列别名可以使用as来为列指定一个新的名字,as可省略列别名可以用双引号包围起来,也可以不用双引号。“学号”或者学号都行。Select studentid as “学号”FromStudent;NULL查询时

2、候,必须使用is null或者is not nullNULL值与数字进行算术运算的结果为NULL可以使用NVL函数,为NULL值返回一个替代的值。NVL(StudentResult, 0即为,如果studentresult是NULL值,则返回0聚合函数Sum 求和Avg 求平均Max 最大值Min 最小值Count 计数案例一某公司印了一批充值卡,卡的密码是随机生成的,现在出现这个问题:卡里面的“O和0”(哦和零“i和1”(哎和一,用户反映说看不清楚,公司决定,把存储在数据库中的密码中所有的“哦”都改成“零”,把所有的“i”都改成“1”;请编写SQL语句实现以上要求;数据库表名:Card密码字

3、段名:PassWordUPDATE CardSET PassWord = Replace(Replace(PassWord ,O,0,i,1案例二在数据库表中有以下字符数据,如:13-1、13-2、13-3、13-10、13-100、13-108、13-18、13-11、13-15、14-1、14-2现在希望通过SQL语句进行排序,并且首先要按照前半部分的数字进行排序,然后再按照后半部分的数字进行排需,输出要排成这样: 13-1、13-2、13-3、13-10、13-11、13-15、13-18、13-100、13-108、14-1、14-2数据库表名:SellRecord字段名:ListNu

4、mberSELECT ListNumberFROM SellRecordORDER BYto_number(substr(list_number,1,instr(list_number,-1,to_number(substr(list_number,instr(list_number,-+1模糊查询查询时,字段中的内容并不一定与查询内容完全匹配,只要字段中含有这些内容使用LIKE关键字,配合通配符进行模糊查询。字符匹配操作可以使用通配符 “%” 和 “_”%:表示任意个字符,包括零个_:表示一个任意字符转义符如果要模糊查询出含有%或者_等通配符的的记录时,可以使用转义符,模糊查询出含有%的地址

5、select * from student where address like % escape ;此处第一个%和第三个%为通配符,使用了escape 使第二个%失去了通配符的含义,它代表的就是%模糊查询出含有_的地址select * from student where address like %b_% escape b;单引号的转义,使用两个单引号update student set address = 23 where studentid = 1039;NULL值的处理查询某个字段为空,使用is null查询某个字段不为空,使用is not null对NULL做算术运算结果仍为NUL

6、L,可以使用NVL函数,将NULL值转为0之后,再进行运算。NULL排序比其他所有类型的都大,一个可以为空的字段倒排序,NULL 值排在最前面。下面的语句,gradeid是NULL的行排在前面。select * from student order by gradeid desc;如果要想降序排列,同时使null的行排在最后面,可以使用NVL函数。select * from student order by nvl(gradeid,0 desc;Between AND把某一字段中内容在特定范围内的记录查询出来SELECT StudentID, StudentResult FROM Result

7、 WHERE StudentResult BETWEEN 60 AND 80;上面语句等价于StudentResult = 60 and StudentResult 10WHERE与HAVING对比WHERE子句:用来筛选 FROM 子句中指定的操作所产生的行GROUP BY子句:用来分组 WHERE 子句的输出HAVING子句:用来从分组的结果中筛选行Where group by having order by做题的总结:成绩表查询select * from result order by examdate desc 学生表查询select * from student 课程表查询selec

8、t * from subject 1. 最近一次查询的问题:查询最近一次oracle考试最高分和最低分select max(studentresult 最高分,min(studentresult 最低分 from result where subjectid=(select subjectid from subject where subjectname=Oracleand examdate=(select max(examdatefrom result where subjectid=(select subjectid from subject where subjectname=Oracl

9、e 2. 最近一次没有参加oracle考试的学生,可以用not in解 决 select * from student where studentid not in(select studentid from result where subjectid=(select subjectid from subject where subjectname=Oracle and examdate=(select max(examdate from result where subjectid=(select subjectid from subject where subjectname=Oracl

10、e) 结果: 3. 最近一次考试成绩大于80,用exists做,效率较高,其 中的subjectid=3可以使用子查询替换掉,从subject 表。 select * from student a where exists(select * from result where studentresult80 and subjectid=3 and a.studentid = studentid and examdate=(select max(examdate from result where subjectid=3 4. case在查询时的使用: select studentname, c

11、ase when gradeid= 1 then 一年级 when gradeid= 2 then 二年级 when gradeid=3 then 三年级 end myclass from student 5查询平均成绩排序中第3条到第6条的学生信息。(有是一个新表) select t2.* from (select t1.*,rownum s.studentID,studentName,avg(score from t_result r,t_student s where r.studentID=s.studentID group by s.studentID,studentName ord

12、er by avg(score desc t1 where rownum=3; rn from (select 6. 列出成绩高于平均水平的学生的 编号,姓名,考试科目名称,及成 绩,并按年龄排序 select s.studentID,studentName,subjectName,score from t_student s,t_result r,t_subject u where u.subjectid = r.subjectid and s.studentID=r.studentID and r.score(select avg(score from t_result order by

13、birthday desc; 7. 删除上面除了编号不同,其他都相同的学生冗余信息。表名:t_test delete from t_test where id not in(select MIN(id from t_test group by no,name,subjectID,subjectName,score; 8.school表中有班级(class),性别(sex),姓名(name)三列,求查询 出男生数和女生数相等的班级有哪些。 select t1.class from(select class,SEX,count(* as s from shcool group by class,s

14、ex having sex=男 t1,(select class,SEX,count(* as s from shcool group by class,sex having sex=女 t2 where t1.class = t2.class and t1.s=t2.s 9. 自己做的: -第一问 select eno,ename,esex,eage from emp e join dept d on d.dno = e.dno where d.dname = 研发部 order by e.ename -第二问 select ename,ssal from emp e join sal s on e.eno = s.eno where s.ssal = (select max(ssal from sal -第三问 alter table emp add eremark varchar2(400 -第四问 upd

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论