MySQL 필수 28개 클래식 쿼리

7507 단어 MySQL
오리지널 작품.전재 는 출처 를 밝혀 주십시오https://blog.csdn.net/kk123k
표 구조 및 테스트 데이터
Student(Sno, Sname, Ssex) 학생표
Teacher(Tno, Tname) 교사 목록
Course(Cno, Cname, Tno) 선택 과목 목록
SC(Sno, Cno, score) 성적표
질문:
1. 커리큘럼 번호'001'커리큘럼이'002'커리큘럼보다 성적이 높은 모든 학생의 학번을 조회한다.
select a.sno from (select sno,score from SC where Cno='001') a,(select sno,score from SC where Cno='002') b 
where a.score>b.score and a.sno=b.sno;

2.'엽평'선생님의 수업을 배우지 않은 친구의 학번, 이름 조회
select sno,sname from student where sno not in
(select distinct sc.sno from sc,course,teacher where sc.cno=course.cno and course.tno=teacher.tno and teacher.tname='  ')

또는
4
select sno,sname from student where not exists
(select sc.* from sc,course,teacher where sc.cno=course.cno and course.tno=teacher.tno and teacher.tname='  ' 
and sc.sno=student.sno)
(주: 데이터량이 많을 때 not exists가 not in보다 효율이 조금 높음)
3.'엽평'선생님이 가르치는 과정을 선택한 학생 중 성적이 가장 높은 학생의 이름과 성적을 조회한다(성적 병렬상황을 고려하지 않는다)
select s.sname,max(sc.score) from student s,sc,course c,teacher t where s.sno=sc.sno and c.cno=sc.cno and c.tno=t.tno 
and t.tname='  ' 

4.'엽평'선생님이 가르치는 과정을 선택한 학생 중 성적이 가장 높은 학생의 이름과 성적을 조회한다(모두 열거된 경우)
select s.sname,sc.score from student s,sc,course c,teacher t where s.sno=sc.sno and c.cno=sc.cno and c.tno=t.tno 
and t.tname='  ' and sc.score=
(select max(sc1.score) from sc sc1,course c1,teacher t1 where c1.cno=sc1.cno and c1.tno=t1.tno and t1.tname='  ')

5. 모든 학생의 학번, 성명, 수강신청 수, 총성적 조회
select s.sno,s.sname,count(sc.cno),sum(sc.score) from student s left join sc on s.sno=sc.sno group by s.sno

6.'엽평'선생님이 가르친 모든 과목의 학번, 이름 조회
select student.sno,student.sname from student where student.sno in
(select sc.sno from sc,course,teacher where sc.cno=course.cno and course.tno=teacher.tno and teacher.tname='  ' 
group by sc.sno having count(sc.cno)=
(select count(course.cno) from course,teacher where course.tno=teacher.tno and tname='  '))

7. 번호'001'도 배웠고 번호'002'도 배운 학생의 학번, 성명 조회
4
select sno,sname from student where sno in 
(select sc1.sno from sc sc1,sc sc2 where sc1.sno=sc2.sno and sc1.cno='001' and sc2.cno='002')
8、과정번호'002'과정의 성적이'001'과정보다 낮은 모든 학우의 학번, 성명(상기 제1조보다 이름이 많다) 조회
select s.sno,s.sname from 
student s,(select sno,score from sc where cno='001') a,(select sno,score from sc where cno='002') b 
where a.score>b.score and a.sno=b.sno and s.sno=a.sno

9. 모든 과정 성적이 60점 이하인 학생의 학번, 성명을 조회
select distinct s.sno,s.sname from student s,sc where s.sno=sc.sno and sc.sno not in 
(select ss.sno from student ss, SC where ss.sno=sc.sno and sc.score>=60)

(주의: 선택과목이 없는 사람은 열거해서는 안 된다)
10. 모든 과목을 배우지 않은 학생의 학번, 성명 조회
select s.sno,s.sname from student s left join sc 
on s.sno=sc.sno group by s.sno having count(sc.cno)

(주의: 여기는 선택과목이 없는 사람을 포함해야 한다),
11. 최소한 한 과목과 학번이'1007'인 학우가 배운 것과 같은 학우의 학번과 성명을 조회한다
4
select distinct s.sno,s.sname from student s,sc where s.sno=sc.sno and s.sno!='1007' and sc.cno in 
(select cno from sc where sno='1007')
12. 조회와 학번'1002'의 학우들이 공부하는 과정이 똑같은 다른 학우들의 학번과 성명
select s.sno,s.sname from student s,sc where s.sno=sc.sno and s.sno!='1002' and sc.cno in 
(select cno from sc where sno='1002') group by s.sno having count(sc.cno)=(select count(cno) from sc where sno='1002')

13. 평균 성적에 따라 모든 학생의'고등수학','대학영어','데이터베이스'세 과목의 성적을 다음과 같은 형식으로 나타낸다. 학생 ID, 고등수학, 대학영어, 데이터베이스, 유효과정수, 유효평균점
4
select s.sno as '  ID',
(select score from sc sc1 where sc.sno=sc1.sno and sc1.cno='001')as '    ',
(select score from sc sc2 where sc.sno=sc2.sno and sc2.cno='003')as '    ',
(select score from sc sc3 where sc.sno=sc3.sno and sc3.cno='004')as '   ',
count(cno)as '     ',avg(sc.score)as '     '
from student s left join (select * from sc where cno in(001,003,004)) sc on s.sno=sc.sno  
group by s.sno order by avg(sc.score) desc
14. 교과 과정을 선택한 학생 수
select count(*) from (select distinct sno from sc) ct

15. 동명 동성 학생 명단을 조회하고 동명 인원을 통계한다.
4
select sname,count(sname) from student group by Sname having count(sname)>1
16. 각 과목의 평균 성적과 선발된 인원수를 조회한 결과 평균 성적의 하락 순서에 따라 배열하고 평균 성적을 동시에 과목 번호에 따라 승진 순서에 따라 배열한다.
4
select cno,avg(score),count(sno) from SC group by cno order by avg(score) desc,cno asc
17. 평균 성적이 85 이상인 모든 학생의 학번, 성명, 평균 성적 조회
4
select s.sno,s.sname,avg(sc.score) from student s,sc where s.sno=sc.sno group by s.sno having avg(sc.score)>85
18. 조회 과정 이름이'데이터베이스'이고 점수가 60보다 낮은 학생 이름과 점수
4
select s.sno,s.sname from student s,sc,course c where s.sno=sc.sno and c.cno=sc.cno and c.cname='   ' and sc.score<60
19 모든 과목의 성적이 70점 이상인 성명, 과목 명칭과 점수를 조회
select s.sname,c.cname,sc.score from student s,sc,course c where s.sno=sc.sno and c.cno=sc.cno and sc.score>70

20. 성이 "이"인 선생님의 개수를 조회한다
select count(tno) from teacher where tname like ' %'

21. 평균 성적이 60점 이상인 학생의 학번과 평균 성적을 조회한다
select sno,avg(score) from sc group by sno having avg(score)>60

22. 최소 두 과목을 선택한 학생의 학번, 이름, 선택 과목 수를 조회한다
select s.sno,s.sname,count(sc.cno) from student s,sc where s.sno=sc.sno group by sc.sno having count(sc.cno)>=2

23. 모든 학생이 선택한 과목의 교과 과정 번호와 교과 과정 이름을 조회한다.
4
select c.cno,c.cname,count(sc.cno) from course c,sc where c.cno=sc.cno 
group by c.cno having count(sc.cno)=(select count(*) from student)
24, 두 과목 이상의 불합격 과정의 학번과 그 평균 성적 조회
4
select sno,avg(score) from sc where score<60 group by sno having count(cno)>=2
25, 각 과목 성적 상위 3등이 기록한 학번, 과정 번호, 점수를 조회한다.(성적 병렬은 고려하지 않음)
4
select sc.sno,sc.cno,sc.score from sc where
(select count(sc1.cno) from sc sc1 where sc1.cno=sc.cno and sc1.score>sc.score)<3
order by sc.cno,score desc
26, 각 과목의 성적을 통계 인쇄, 각 점수 단계의 인원수: 과정 ID, 과정 명칭, [100-85], [85-70], [70-60], [<60]
4
select sc.cno as '  ID', c.cname as '    '
,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;
27. 각 과목의 성적이 가장 높고 가장 낮은 점수를 조회한다. 다음과 같은 형식으로 과정 ID, 최고 점수, 최저 점수를 표시한다.
4
select cno as '  ID',max(score) as '   ',min(score) as '   ' from sc group by cno
28, 교과 과정 번호'002'의 성적 순위 3-6위(성적 병렬상황을 고려하지 않음)를 조회한 학생의 학번, 성명과 점수
select s.sno,s.sname,sc.score from student s,sc where s.sno=sc.sno and sc.cno='002' 
order by sc.score desc limit 2,4

좋은 웹페이지 즐겨찾기