Orcle數據庫查詢練習復習:三


一、題目

1.與“張三”同鄉的男生姓名

select * from student where snativeplace=(select snativeplace from student where sname='張三') and ssex=''

2.選修了趙露老師所講課程的學生人數

select count(*) from mark where cid in(select cid from course where tid=(select tid from teacher where tname='趙露')) group by cid
select count(distinct sid) from mark where cid in(select cid from course where tid=(select tid from teacher where tname='趙露')) 

3.查詢沒學過“王”姓老師課的同學的學號、姓名

select * from student where sid not in(select sid from mark where cid in(
select cid from course where tid in(select tid from teacher where tname like '王%')))

4.數學”課程得最高分的學生姓名、性別

select * from student where sid in(
select sid from mark where cid=(
select cid from course where cname='數學') 
and cmark>= all(
select cmark from mark where cid=(select cid from course where cname='數學')
))

5.統計每門課程的平均成績,並按照成績降序排序

select *from(select (select cname from course where cid=m.cid), avg(cmark) cavg 
from mark m group by cid )order by cavg desc
select * from (select avg(cmark) cavr from mark group by cid)order by cavg desc

6.子查詢實現查詢‘3-2班’"張立"同學的"英語"成績 

select cmark 成績 from mark where sid=(
select sid from student where sname='張三'and sclass='2班')
and cid =(select cid from course where cname='英語')

7.查詢所在班級和該班內學生的年齡之和,對該班級中每個人的年齡進行比對,(要求大於20歲的人參與統計)

select sclass ,sum(sage) from student where sage>=20 group by sclass 

8.查詢所在班級和該班內學生的年齡之和,(要求該班級中每個人的年齡都大於20歲)

select sclass ,sum(sage) from student group by sclass having min(sage)>20

select sclass ,sum(sage) from student where sclass not in(
select sclass from student where sage<20 group by sclass) group by sclass 

9.用子查詢實現查詢選修“高等數學”課的全部學生的高等數學總成績 

select sum(cmark) from mark where cid =(select cid from course where cname='數學')

10.用子查詢實現查詢選修“高等數學”課的全部學生的所有課程總成績*/

select sum(cmark) from mark where sid in(select sid from mark where cid =(select cid from course where cname='數學'))

11.請用兩種方法實現:查找所有成績都在68分以上的學生姓名*/

select sid,sname from student where sid in (
select sid from mark group by sid having min(cmark)>=68)

select sid,sname from student s where exists (
select sid from mark m where s.sid=m.sid group by sid having min(cmark)>=68)


12.查找至少2門成績在80分以上的學生姓名

select sname from student where sid in(
select sid from mark where cmark >=80 group by sid having count(*)>=2
)

13.查詢至少有一門課與張三同學所學相同的同學的學號和姓名

select sid,sname from student where sid in(
select sid from mark where cid in (
select cid from mark where sid in (
select sid from student where sname='張三')))

14.沒有選修“數學”課的學生的姓名*/

select sname from student where sid in (
select sid from mark where sid not in(
select sid from mark where cid in(
select cid from course where cname='數學'
)
)
)

15.查詢個人總成績小於平均總成績的學生姓名

step1、計算出平均總分
step1.1計算出個人總分表
select sid,sum(cmark) smk from mark group by sid 
step1.2對總分表求平均值
select avg(smk) from (step1.1)
step2、找出在個人總分表中找出誰的總分低於step1
step2.1 select sid from (step1.1)where smk <(step1.2)
step2.2 select sname from student where sid in (step2.1)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM