1. 程式人生 > >MySQL 筆試題

MySQL 筆試題

表和表間關係圖:

題目及答案:(未完,待續。。。)

-- 1、課程1成績大於課程2成績的學生學號
select S,score from sc where c=1;
select S,score from sc where c=2;

select a.s
from 
(select S,score from sc where c=1) a,
(select S,score from sc where c=2) b
where a.score > b.score and a.s=b.s;
-- 2、查詢平均成績大於80 學生學號和平均成績
select S,Avg(score) 
from SC 
group by S
having Avg(score) > 60 ;
-- 3、查詢所有同學的學號、姓名、選課數、總成績; 
select student.S,student.Sname,count(sc.C),sum(score)
from student
left JOIN sc on student.S=sc.S
group by student.s;
-- 4、查詢姓“李”的老師的個數; 
select count(distinct(Tname))
from teacher
where Tname like '%李%';
-- 5、查詢沒學過“陳”老師課的同學的學號、姓名; 
select SC.s from teacher,course,sc where Tname like '%陳%' and teacher.T=course.T and course.c=sc.c;

select student.s,student.sname
from student
where student.s not in (select distinct(SC.s) from teacher,course,sc where Tname like '%陳%' and teacher.T=course.T and course.c=sc.c);

-- 6、查詢學過“1”並且也學過編號“3”課程的同學的學號、姓名; 
-- 方法1
select student.s,student.sname
from student
where student.s in (
select sc_2.s as SSS
from sc,(select s from sc where sc.C=3) sc_2
where sc.s=sc_2.s and sc.c=1);
-- 方法2
select Student.S,Student.Sname 
from Student,SC 
where Student.S=SC.S and SC.C=1 and exists( select * from SC as SC_2 where SC_2.S=SC.S and SC_2.C=3);
-- exists 在乎的是是否有結果集返回
--  not exists


-- 7、查詢學過“4寧老師”老師所教的所有課的同學的學號、姓名; 
select sc.s from sc,teacher,course where teacher.Tname='4寧老師' and course.T=teacher.T and sc.C=course.c;
-- 方法1
select student.s,student.sname
from student
where student.s in (select sc.s from sc,teacher,course where teacher.Tname='4寧老師' and course.T=teacher.T and sc.C=course.c);
-- 方法2
select S,Sname from Student where S in (select S from SC ,Course ,Teacher where SC.C=Course.C and Teacher.T=Course.T and Teacher.Tname='4寧老師' group by S having count(SC.C)=(select count(C) from Course,Teacher where Teacher.T=Course.T and Tname='4寧老師'));

-- 8、查詢課程編號“2”的成績比課程編號“1”課程低的所有同學的學號、姓名; 
select s,score from sc where sc.c=1;
select s,score from sc where sc.c=2;
-- 方法1
select s,sname
from student
where student.s in(
select s1.s
from (select s,score from sc where sc.c=1) s1,(select s,score from sc where sc.c=2) s2
where s1.s=s2.s and s1.score > s2.score );

-- 方法2
select S,Sname 
from (select Student.S,Student.Sname,score,(select score from SC SC_2 where SC_2.S=Student.S and SC_2.C=2) score2 from Student,SC where Student.S=SC.S and C=1) s_2 
where score2 < score;

-- 9、查詢所有課程成績小於60分的同學的學號、姓名; 
select distinct(s) from sc where score <= 60; 

select S,Sname
from student
where student.S in (select distinct(S) from sc where score < 60);


-- 10、查詢沒有學全所有課的同學的學號、姓名; 
select count(c) from course ;
select s from sc GROUP BY s having count(c) < (select count(c) from course );
-- 方法1
select s,sname
from student
where student.s in (select s from sc GROUP BY s having count(c) < (select count(c) from course ));
-- 方法2
select Student.S,Student.Sname 
from Student,SC 
where Student.S=SC.S 
group by Student.S,Student.Sname having count(C) <(select count(C) from Course);