Oracle相干操练
副问题[/!--empirenews.page--]
Oracle操练建表: create?table?student( sno varchar2(10)?primary?key, sname varchar2(20), sage number(2), ssex varchar2(5) ); create?table?teacher( tno varchar2(10)?primary?key, tname varchar2(20) ); create?table?course( cno varchar2(10), cname varchar2(20), tno varchar2(20), constraint?pk_course primary?key?(cno,tno) ); create?table?sc( sno varchar2(10), cno varchar2(10), score number(4,2), constraint?pk_sc primary?key?(sno,cno) ); /*******初始化门生表的数据******/ insert?into?student values?(‘s001‘,‘张三‘,23,‘男‘); insert?into?student values?(‘s002‘,‘李四‘,‘男‘); insert?into?student values?(‘s003‘,‘吴鹏‘,25,‘男‘); insert?into?student values?(‘s004‘,‘琴沁‘,20,‘女‘); insert?into?student values?(‘s005‘,‘王丽‘,‘女‘); insert?into?student values?(‘s006‘,‘李波‘,21,‘男‘); insert?into?student values?(‘s007‘,‘刘玉‘,‘男‘); insert?into?student values?(‘s008‘,‘萧蓉‘,‘女‘); insert?into?student values?(‘s009‘,‘陈萧晓‘,‘女‘); insert?into?student values?(‘s010‘,‘陈美‘,22,‘女‘); commit; /******************初始化西席表***********************/ insert?into?teacher values?(‘t001‘,?‘刘阳‘); insert?into?teacher values?(‘t002‘,?‘谌燕‘); insert?into?teacher values?(‘t003‘,?‘胡明星‘); commit; /***************初始化课程表****************************/ insert?into?course values?(‘c001‘,‘J2SE‘,‘t002‘); insert?into?course values?(‘c002‘,‘Java Web‘,‘t002‘); insert?into?course values?(‘c003‘,‘SSH‘,‘t001‘); insert?into?course values?(‘c004‘,‘Oracle‘,‘t001‘); insert?into?course values?(‘c005‘,‘SQL SERVER 2005‘,‘t003‘); insert?into?course values?(‘c006‘,‘C#‘,‘t003‘); insert?into?course values?(‘c007‘,‘JavaScript‘,‘t002‘); insert?into?course values?(‘c008‘,‘DIV+CSS‘,‘t001‘); insert?into?course values?(‘c009‘,‘PHP‘,‘t003‘); insert?into?course values?(‘c010‘,‘EJB3.0‘,‘t002‘); commit; /***************初始化后果表***********************/ insert?into?sc values?(‘s001‘,‘c001‘,78.9); insert?into?sc values?(‘s002‘,80.9); insert?into?sc values?(‘s003‘,81.9); insert?into?sc values?(‘s004‘,60.9); insert?into?sc values?(‘s001‘,‘c002‘,82.9); insert?into?sc values?(‘s002‘,72.9); insert?into?sc values?(‘s003‘,81.9); insert?into?sc values?(‘s001‘,‘c003‘,‘59‘); commit; 相干操练: -- 1、查询“c001”课程比“c002”课程后果高的全部门生的学号; select?a.*?from (select?*?from?sc a where?a.cno=‘c001‘)?a, (select?*?from?sc b where?b.cno=‘c002‘)?b where?a.sno=b.sno and?a.score >?b.score; ********************************* select?*? from?sc a where?a.cno=‘c001‘ and??exists(select?*?from?sc b where?b.cno=‘c002‘?and?a.score>b.score and?a.sno =?b.sno); -- 2、查询均匀后果大于60 分的同窗的学号僻静均后果; select?sno,avg(score)? from?sc ? group?by?sno having?avg(score)>60; -- 3、查询全部同窗的学号、姓名、选课数、总后果; select?a.*,s.sname from? (select?sno,sum(score),count(cno)?from?sc group?by?sno)?a,student s where?a.sno=s.sno; -- 4、查询姓“刘”的先生的个数; select?count(*)? from?teacher where?tname like?‘%刘%‘; -- 5、查询没学过“谌燕”先生课的同窗的学号、姓名; select?a.sno,a.sname from?student a where?a.sno not?in (select?distinct?s.sno ?from?sc s, ??????(select?c.* ???????from?course c, ???????????(select?tno ????????????from?teacher t ????????????where?tname=‘谌燕‘)t ???????where?c.tno=t.tno)?b ??where?s.cno =?b.cno ) ********************************* select?*? from?student st where?st.sno not?in (select?distinct?sno from?sc s join?course c on?s.cno=c.cno join?teacher t on?c.tno=t.tno where?tname=‘谌燕‘) -- 6、查询学过“c001”而且也学过编号“c002”课程的同窗的学号、姓名; select?st.*? from?sc a join?sc b on?a.sno=b.sno join?student st on?st.sno=a.sno where?a.cno=‘c001‘?and?b.cno=‘c002‘?and?st.sno=a.sno; -- 7、查询学过“谌燕”先生所教的全部课的同窗的学号、姓名; ? -- 8、查询课程编号“c002”的后果比课程编号“c001”课程低的全部同窗的学号、姓名; select?*? from?student st join?sc a on?st.sno=a.sno join?sc b on?st.sno=b.sno where?a.cno=‘c002‘?and?b.cno=‘c001‘?and?a.score <?b.score -- 9、查询课程后果都小于60 分的同窗的学号、姓名; select?student.sno,student.sname from?student where? student.sno in ( select??sc.sno from?sc where?student.sno=sc.sno and?sc.score<60) ? select?*?from?sc; select?*?from?student; select?*?from?teacher; ? select?*? from?student s inner?join?sc on?s.sno=sc.sno; ? ? select?s.sno,s.sname from?student s join?sc c on?s.sno=c.sno where?c.sno not?in ?(select?distinct?sno from?sc where?score>60); ? select?st.*,s.score from?student st join?sc s on?st.sno=s.sno join?course c on?s.cno=c.cno where?s.score <60 -- 10、查询没有学全全部课的同窗的学号、姓名; select?stu.sno,stu.sname,count(sc.cno)? from?student stu left?join?sc on?stu.sno=sc.sno group?by?stu.sno,stu.sname having?count(sc.cno)<(select?count(distinct?cno)from?course) ? select?*?from?course; ? =================================== select?*?from?student where?sno in (select?sno from ????????(select?stu.sno,c.cno from?student stu ????????cross?join?course c ????????minus ????????select?sno,cno from?sc) ) -- 11、查询至少有一门课与学号为“s001”的同窗所学沟通的同窗的学号和姓名; SELECT?s.sno,s.sname FROM?student s WHERE?s.sno<>‘s001‘?AND?s.sno IN (SELECT?distinct?sc.sno FROM?sc WHERE?sc.cno IN(SELECT?cno FROM?sc WHERE?sno =?‘s001‘)); ? ? select?st.*?from?student st, (select?distinct?a.sno from (select?*?from?sc)?a, (select?*?from?sc where?sc.sno=‘s001‘)?b where?a.cno=b.cno)?h where?st.sno=h.sno and?st.sno<>‘s001‘ -- 12、查询至少学过学号为“s001”同窗全部一门课的其他同窗学号和姓名; select?*?from?sc left?join?student st on?st.sno=sc.sno where?sc.sno<>‘s001‘ and?sc.cno in (select?cno from?sc where?sno=‘s001‘) -- 13、把“SC”表中“谌燕”先生教的课的后果都变动为此课程的均匀后果; select?*?from?sc; update?sc c set?score=(select?avg(c.score)??from?course a,teacher b ????????????????????????????where?a.tno=b.tno ????????????????????????????and?b.tname=‘谌燕‘ ????????????????????????????and?a.cno=c.cno ????????????????????????????group?by?c.cno) where?cno in( select?cno from?course a,teacher b where?a.tno=b.tno and?b.tname=‘谌燕‘) -- 14、查询和“s001”号的同窗进修的课程完全沟通的其他同窗学号和姓名; select*?from?sc where?sno<>‘s001‘ minus ( select*?from?sc minus select?*?from?sc where?sno=‘s001‘ ) -- 15、删除进修“谌燕”先生课的SC 表记录; delete?from?sc where?sc.cno in ( select?cno from?course c left?join?teacher t on??c.tno=t.tno where?t.tname=‘谌燕‘ ) -- 16、向SC 表中插入一些记录,这些记录要求切合以下前提:没有上过编号“c002”课程的同窗学号、“c002”号课的均匀后果; insert?into?sc (sno,cno,score) select?distinct?st.sno,sc.cno,(select?avg(score)from?sc where?cno=‘c002‘) from?student st,sc where?not?exists (select?*?from?sc where?cno=‘c002‘?and?sc.sno=st.sno)?and?sc.cno=‘c002‘; -- 17、查询各科后果最高和最低的分:以如下情势表现:课程ID,最高分,最低分 select?cno,max(score),min(score)?from?sc group?by?cno; -- 18、按各科均匀后果从低到高和合格率的百分数从高到低次序 select?cno,avg(score),sum(case?when?score>=60?then?1?else?0?end)/count(*) as?合格率 from?sc group?by?cno order?by?avg(score)?,?合格率 desc -- 19、查询差异先生所教差异课程均匀分从高到低表现 select?t.tno,t.tname,c.cno,c.cname,avg(score)?from?sc,?course c,teacher t where?sc.cno=c.cno and?c.tno=t.tno group?by?c.cno,t.tno,c.cname order?by?avg(score)?desc ? select?max(t.tno),max(t.tname),max(c.cno),max(c.cname),avg(score)? from?sc,teacher t where?sc.cno=c.cno and?c.tno=t.tno group?by?c.cno order?by?avg(score)?desc -- 20、统计列印各科后果,各分数段人数:课程ID,课程名称,[100-85],[85-70],[70-60],[ <60] select?sc.cno, sum(case??when?score between?85?and?100?then?1?else?0?end)?AS?"[100-85]", sum(case??when?score between?70?and?85?then?1?else?0?end)?AS?"[85-70]", sum(case??when?score between?60?and?70?then?1?else?0?end)?AS?"[70-60]", sum(case??when?score <60?then?1?else?0?end)?AS?"[<60]" from?sc,?course c where??sc.cno=c.cno group?by?sc.cno,c.cname; -- 21、查询各科后果前三名的记录:(不思量后果并列环境) select?*?from (select?sno,score,row_number()over(partition?by?cno order?by?score desc)?rn from?sc) where?rn<4 -- 22、查询每门课程被选修的门生数 select?cno,count(sno) from?sc group?by?cno; -- 23、查询出只选修了一门课程的所有门生的学号和姓名 select?sc.sno,st.sname,count(cno)?from?student st left?join?sc on?sc.sno=st.sno group?by?st.sname,sc.sno having?count(cno)=1; -- 24、查询男生、女生人数 select?ssex,count(*) from?student group?by?ssex; -- 25、查询姓“张”的门生名单 select?*? from?student where?sname like?‘张%‘; -- 26、查询同名同性门生名单,并统计同绅士数 select?sname,count(*) from?student group?by?sname having?count(*)>1; -- 27、1981 年出生的门生名单(注:Student 表中Sage 列的范例是number) --时刻函数sysdate:to_char(sysdate,‘yyyy‘)获取当前电脑体系时刻年份 select?to_char(sysdate,‘yyyy‘)? from?dual;?--2019 ? select?sno,sname,sage,ssex from?student t where?to_char(sysdate,‘yyyy‘)-sage =1988 -- 28、查询每门课程的均匀后果,功效按均匀后果升序分列,均匀后果沟通时,按课程号降序分列 select?cno,avg(score)? from?sc group?by?cno order?by?avg(score)asc,cno desc; -- 29、查询均匀后果大于85 的全部门生的学号、姓名僻静均后果 select?st.sno,avg(score)? from?student st left?join?sc on?sc.sno=st.sno group?by?st.sno,st.sname having?avg(score)>85; -- 30、查询课程名称为“Oracle”,且分数低于60 的门生姓名和分数 select?*?from?course; select?sname,score from?student st,sc,course c where?st.sno=sc.sno and?sc.cno=c.cno and?c.cname=‘Oracle‘?and?sc.score<60 -- 31、查询全部门生的选课环境; select?st.sno,c.cname from?student st,course c where?sc.sno=st.sno and?sc.cno=c.cno; -- 32、查询任何一门课程后果在70 分以上的姓名、课程名称和分数; select?st.sname,sc.score from?student st,course c where?sc.sno=st.sno and?sc.cno=c.cno and?sc.score>70 -- 33、查询不合格的课程,并按课程号从大到小分列 select?sc.sno,sc.score from?sc,course c where?sc.cno=c.cno and?sc.score<60? order?by?sc.cno desc; -- 34、查询课程编号为c001 且课程后果在80 分以上的门生的学号和姓名; select?st.sno,student st where?sc.sno=st.sno and?cno=‘c001‘?and?score>80; -- 35、求选了课程的门生人数 select?count(distinct?sno)? from?sc; -- 36、查询选修“谌燕”先生所讲课程的门生中,后果最高的门生姓名及厥后果 select?st.sname,course c,teacher t where st.sno=sc.sno and?sc.cno=c.cno and?c.tno=t.tno and?t.tname=‘谌燕‘?and?sc.score= (select?max(score)from?sc where?sc.cno=c.cno) -- 37、查询各个课程及响应的选修人数 select?cno,count(sno)? from?sc group?by?cno; -- 38、查询差异课程后果沟通的门生的学号、课程号、门生后果 select?a.*? from?sc a,sc b where?a.score=b.score and?a.cno<>b.cno -- 39、查询每门作业后果最好的前两名 select?*?from?( select?sno,row_number()over(partition?by?cno order?by?score desc)?my_rn from?sc t ) where?my_rn<=2 -- 40、统计每门课程的门生选修人数(高出10 人的课程才统计)。要求输出课程号和选修人数,查询功效按人数降序分列,若人数沟通,按课程号升序分列 select?cno,count(sno)? from?sc group?by?cno having?count(sno)>10 order?by?count(sno)?desc,cno asc; -- 41、检索至少选修两门课程的门生学号 select?sno from?sc group?by?sno having?count(cno)>1; || select?sno from?sc group?by?sno having?count(sno)>1; -- 42、查询所有门生都选修的课程的课程号和课程名 select?distinct(c.cno),c.cname from?course c,sc where?sc.cno=c.cno || select?cno,cname from?course c where?c.cno in (select?cno from?sc group?by?cno) ? -- 43、查询没学过“谌燕”先生教学的任一门课程的门生姓名 select?st.sname from?student st where?st.sno not?in (select?distinct?sc.sno from?sc,teacher t where?sc.cno=c.cno and?c.tno=t.tno and?t.tname=‘谌燕‘) -- 44、查询两门以上不合格课程的同窗的学号及其均匀后果 select?sno,avg(score) from?sc where?sno in (select?sno from?sc where?sc.score<60 group?by?sno having?count(sno)>1 )?group?by?sno -- 45、检索“c004”课程分数小于60,按分数降序分列的同窗学号 select?sno from?sc where?cno=‘c004‘?and?score<90? order?by?score desc; -- 46、删除“s002”同窗的“c001”课程的后果 delete? from?sc (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |