创建学生信息表,科目表和成绩表,并创建序列,添加数据,最后提交

create table stuinfo(    --学生表stuid int primary key,sname varchar2(50) unique,age int not null constraint CK_sage check(age>=18 and age<=30),addr varchar2(50),sex char(2) default 'M'constraint CK_sexs check(sex in('M','F'))
);
create sequence seq_stuid start with 10001 increment by 1;create table course(    --科目表cid int primary key,cname varchar2(50)
);
create sequence seq_cid start with 10001 increment by 1;create table score(    --成绩scid int primary key,stuid intconstraint FK_stuid references stuinfo(stuid),courseid intconstraint FK_courseid references course(cid),score int
);
create sequence seq_scid start with 10001 increment by 1;insert into course values(seq_cid.nextval,'J2EE精讲');
insert into course values(seq_cid.nextval,'Oracle');
insert into course values(seq_cid.nextval,'html网页设计');
insert into course values(seq_cid.nextval,'Java基础');insert into stuinfo values(seq_stuid.nextval,'张果老',22,null,'M');
insert into stuinfo values(seq_stuid.nextval,'李豹',22,null,'M');
insert into stuinfo values(seq_stuid.nextval,'老胡',22,'北京','M');
insert into stuinfo values(seq_stuid.nextval,'老江',24,'湖南','M');
insert into stuinfo values(seq_stuid.nextval,'张无忌',26,'衡阳','M');
insert into stuinfo values(seq_stuid.nextval,'二师兄',28,'长沙','M');
insert into stuinfo values(seq_stuid.nextval,'凤姐',24,'上海','F');
insert into stuinfo values(seq_stuid.nextval,'元芳',28,'上海','M');
insert into stuinfo values(seq_stuid.nextval,'离歌',23,'上海','M');
insert into stuinfo values(seq_stuid.nextval,'八戒',24,'上海','M');
insert into stuinfo values(seq_stuid.nextval,'赵柳',22,'北京','F');insert into score values(seq_scid.nextval,10005,10001,95);
insert into score values(seq_scid.nextval,10005,10002,58);
insert into score values(seq_scid.nextval,10005,10003,56);
insert into score values(seq_scid.nextval,10005,10004,81);
insert into score values(seq_scid.nextval,10005,10002,80);
insert into score values(seq_scid.nextval,10001,10001,78);
insert into score values(seq_scid.nextval,10001,10003,81);
insert into score values(seq_scid.nextval,10001,10004,92);
insert into score values(seq_scid.nextval,10002,10003,30);
insert into score values(seq_scid.nextval,10002,10003,78);
insert into score values(seq_scid.nextval,10003,10003,66);
insert into score values(seq_scid.nextval,10004,10003,66);
insert into score values(seq_scid.nextval,10006,10003,78);
insert into score values(seq_scid.nextval,10007,10003,76);
insert into score values(seq_scid.nextval,10008,10002,81);
insert into score values(seq_scid.nextval,10009,10002,90);
insert into score values(seq_scid.nextval,10010,10003,42);
insert into score values(seq_scid.nextval,10002,10001,80);
insert into score values(seq_scid.nextval,10004,10002,78);
insert into score values(seq_scid.nextval,10008,10003,69);
insert into score values(seq_scid.nextval,10008,10001,69);commit;--提交

联结查询种类:
1.内联结(inner join):
仅当至少有一个同属于两表的行符合联接条件时,内联接才返回行. 内联接消除与另一个表中任何不匹配的行.
2.外联结 :
外联接会返回from子句中提到的至少一个表的所有行,只要这些行符合任何 where或having条件。
左外联接 left join:左边表中所有的行,右边表中没有的字段用null代替。
右外联接 right join:右边表中所有的行, 左边表中没有的字段用null代替。
完整外联结 full join:两表数据都返回,没有的地方用null代替。
3.交叉联结(cross join)

--内联结语法:select 列名  from 表名 inner join 表名2 on 联结条件
--案例: 显示课程名及成绩
select cname,score from course cs inner join score sc on cs.cid=sc.courseid;--左外联接语法: select 列名 from 表名1 left join 表名2 on 联结条件
--特点: 优先查出表名1中所有的符合条件的数据,如果表名2中没有这个对应的数据,则用nULL填充值
--案例描述: 学生表中有一位学员1号'赵柳',没有参加过任何考试,下面请查出所有没有参加过任何考试的学员
select * from stuInfo sf left join score sc on sf.stuid=sc.stuid where score is null;
--右外联接与左外联接正好相反:
select * from stuInfo sf right join score sc on sf.stuid=sc.stuid where score is null;
--完整外联接
select * from stuInfo sf join score sc on sf.stuid=sc.stuid;--交叉联接:左表中的每一行与右表中的每行都组合成。笛卡尔乘积=左表数据行*右表数据行
select * from stuInfo cross join score;
select * from emp;
select * from dept;
select * from dept cross join emp;select * from stuInfo sf right join score sc on sf.stuid=sc.stuid;
insert into stuInfo values(seq_stuid.nextval,'周星驰',22,null,'M');
--显示学生姓名,课程名及成绩
select sname,cname,score from stuInfo sf inner join score sc on sf.stuid=sc.stuid inner join course cs on cs.cid=sc.courseid;
--查询所有学生的姓名、课程名和成绩,如果该生没有参加过任何考试,也需显示出来
select sname,cname,score from stuInfo sf full join score sc on sf.stuid=sc.stuid full join course cs on cs.cid=sc.courseid;
--如果该课程没有任何人选修,也需显示
--查出学员在'Oracle'这门课程中的总成绩和平均成绩,最高分数,最低分数
--连接查询
select '连接查询',sum(score),avg(score),max(score),min(score) from score sc,course cs where sc.courseid=cs.cid and cs.cname='Oracle';
--嵌套查询
select '嵌套查询',sum(score),avg(score),max(score),min(score) from score sc
where sc.courseid=(select cid from course cs where cs.cname='Oracle');
--内联查询
select '内联查询',sum(score),avg(score),max(score),min(score) from score sc inner join course cs on sc.courseid=cs.cid where cs.cname='Oracle--查出学员在 'html网页设计 这门课程中不及格的学生人数
select count(*) from course cs,score sc where cs.cid=sc.scid and score<60 and cname='html网页设计';
--查询这样的学生信息?->成绩表中score<60
select * from stuinfo sf,score sc where sf.stuid=sc.stuid and sc.score<60;
--查询出有不及格记录的学生学号
select sf.stuid from stuinfo sf,score sc where sf.stuid=sc.stuid and sc.score<60;
--查询出有'html网页设计'不及格记录的学生学号
select sc.stuid from score sc,course cs where  cs.cid=sc.scid and sc.score<60 and cs.cname='html网页设计';
--查询这些学生的详细信息
select * from stuinfo where stuid in(select sc.stuid from score sc,course cs where  cs.cid=sc.scid and sc.score<60 and cs.cname='html网页设计');
--获取参加html考试学生的人数
select count(distinct(stuid)) from course cs,score sc where cs.cid=sc.courseid and cs.cname='html网页设计';
----获取每个同学html最高的分数
select stuid,max(score) from course cs,score sc where sc.courseid=cs.cid cs.cname='html网页设计' and group by stuid;
--查出学员在'html网页设计'这门课程中不及格的学生人数
select count(distinct (stuid)) from course cs,score sc where cs.cid=sc.courseid and sc.score<60 and cs.cname='html网页设计';
--查出没有及格的学生姓名和课程名以及分数
select sf.sname,cs.cname,sc.score from course cs,score sc,stuinfo sf where sc.courseid=cs.cid and sf.stuid=sc.stuid and sc.score<60;--多列分组的情况,需求描述: 要求求出每次测试不同学员、不同课目的成绩(如果有补考,则为多次成绩的平均值)
--语法: select 列名 from 表名 where 条件 group by 分组列
select sf.sname,cs.cname,avg(sc.score) from score sc,course cs ,stuinfo sf where sc.courseid=cs.cid and sf.stuid=sc.stuid group by sf.sname,cs.cname;
--查询选修了两门以上课程的学生姓名
select sname from stuinfo where stuid in(select stuid from score group by stuid having count(distinct(courseid))>2);--1.从成绩表里查出所有选修了10001号课程的学生学号select stuid from score where courseid='10001';
--2:查询没有选择10001号课程的学生信息
select * from stuinfo where stuid not in (select stuid from score where courseid='10001');
--查询选修了所有课程的学生信息(查询这样的学生->不存在这样的课程,他没有选修)
select * from stuinfo where stuid in(select stuid from score group by stuid having count(distinct(courseid))=4);
--查询至少选修了10002号课程的学生信息
select * from stuinfo where stuid in(select stuid from score where courseid=10002);--分析步骤:
--检索至少选修了10001号和10002号课程的学生信息
select * from stuinfo sf ,score sc where sf.stuid=sc.stuid and sc.courseid=10001 and sf.stuid in(select stuid from score where courseid=10002);
--查询至少选修了10002号学生所选修的所有课程的学生信息
select * from stuinfo where stuid in(select stuid from score where courseid in(select courseid from score where stuid=10002 ))
--替换,如果sex为M则显示男,如果为F则显示女
select sname ,decode(trim(sex),'M','男','F','女')as sex from stuinfo;
--统计列印各科成绩,各分数段人数:课程名称,优秀,良好,中等,及格,不及格
select cname, sum(case when score between 90 and 100 then 1 else 0 end)as 优秀,
sum(case when score between 80 and 89 then 1 else 0 end)as 良好,
sum(case when score between 70 and 79 then 1 else 0 end)as 中等,
sum(case when score between 60 and 69 then 1 else 0 end)as 及格,
sum(case when score between 0 and 59 then 1 else 0 end)as 不及格
from score sc,course cs where sc.courseid=cs.cid group by cname;--在上面基础上,只想查看参加过补考的学员的补考课目的平均成绩.
--分析,这时要对分组后的数据进行分析,如果是补考的课目,则分组后会有多条记录,
select stuid, courseid, avg(score) from score group by stuid,courseid having count(stuid)>1;
--查询所有学生的成绩,包括学生姓名,课程名,成绩,按学生姓名分组
select sname,cname,score from stuinfo sf,score sc,course cs
where sc.courseid=cs.cid and sf.stuid=sc.stuid group by sf.sname,cs.cname,sc.score;

【Oracle】高级查询练习题详解相关推荐

  1. 查看oracle监听服务状态,(总结)Oracle监听服务lsnrctl参数及查询状态详解

    lsnrctl命令常用参数详解: lsnrctl start 启动指定的监听器 stop 关闭指定的监听器 status 显示监听器的状态.status命令显示监听器是不是活动的,日志与跟踪文件的位置 ...

  2. oracle回滚断查询,Oracle回滚段使用查询代码详解

    大批量执行DML语句造成回滚段大量占用,又回退操作,如何直观查询数据回滚情况? 单机环境 查询回滚执行进度 sql;"> select /*+ rule */s.sid,r.name ...

  3. Oracle监听服务lsnrctl参数及查询状态详解

    lsnrctl命令常用参数详解: lsnrctl start 启动指定的监听器 stop 关闭指定的监听器 status 显示监听器的状态.status命令显示监听器是不是活动的,日志与跟踪文件的位置 ...

  4. [顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功)...

    [顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功) 原文:[顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之 ...

  5. Oracle 闪回技术详解

    概述 闪回技术是Oracle强大数据库备份恢复机制的一部分,在10g的时候就被推出一直延续到现在.在数据库发生逻辑错误的时候,闪回技术能提供快速且最小损失的恢复(多数闪回功能都能在数据库联机状态下完成 ...

  6. Oracle PL/SQL编程详解

    Oracle PL/SQL编程详解 - 古立 - 博客园 <我的网络摘抄本> 网摘/转载/备忘/随记 博客园 首页 新随笔 联系 管理 订阅 随笔- 84  文章- 0  评论- 0  & ...

  7. ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功)

    [顶]ORACLE PL/SQL编程详解之二: PL/SQL块结构和组成元素(为山九仞,岂一日之功) 继上四篇:ORACLE PL/SQL编程之八:把触发器说透                ORAC ...

  8. [顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功)

    [顶]ORACLE PL/SQL编程详解之二: PL/SQL块结构和组成元素(为山九仞,岂一日之功) 继上四篇:ORACLE PL/SQL编程之八:把触发器说透                ORAC ...

  9. MySQL高级之explain详解

    MySQL高级之explain详解 文章目录 MySQL高级之explain详解 一.expalin命令详解 1.使用方式 2.结果显示 3.主要的字段信息 4.作用 二.id字段 三.select_ ...

最新文章

  1. 开发日记-20190716 关键词 读书笔记 《Perl语言入门》Day 10
  2. mqtt消息推送 java_MQTT+ActiveMQ实现消息推送(服务器端java实现)
  3. 【已解决】Dreamweaver修改快捷键
  4. 2010 模板下载 罗斯文_俄罗斯签证办理攻略
  5. C#中Socket通信编程的同步实现
  6. 自动化测试===adb 解锁手机的思路
  7. 两亿人在家开会!钉钉紧急扩容1万台云服务器
  8. 物联网学习之路——物联网通信技术:NBIoT
  9. mysql创建表语句和修改表语句
  10. .htaccess跳转https
  11. 代码文档生成工具-Doxygen生成CHM和RTF图文教程
  12. ubuntu16.04根目录扩容
  13. 计算机操作系统|汤小丹|第四版|习题答案(五)
  14. 4-PSK、4-DPSK、8-QAM信号调制
  15. 如何将图片素材转为矢量图?
  16. 量土地用计算机,土地面积计算器
  17. 《焦虑心理学》——综述篇
  18. 不知道音频格式转换软件哪个好?打工人都在用的几款你别错过
  19. 送东阳马生序 与君共勉
  20. 爬取小猪网的短租房信息

热门文章

  1. 好记性不如烂笔头——C++篇
  2. win32进程共享内存
  3. PHP Curl出现403错误的解决办法 beecloud webhook订单状态返回 服务器403的问题
  4. 【大数据面试题】(八)Spark 相关面试题
  5. 验证选举后继路由和可行后继路由的实时性[IT傻博士原创]
  6. PAT 甲级 1121  Damn Single
  7. Physical implementation —— LEF and DEF
  8. 【人工智能项目】ImageNet数据集介绍以及数字图像处理技术
  9. 莫队入门例题:2038: [2009国家集训队]小Z的袜子(hose)
  10. JavaScript 高级3 :函数进阶