1. 程式人生 > >Python/ MySQL練習題(一)

Python/ MySQL練習題(一)

姓名 insert avg when 並且 記錄 有效 完全 cas

Python/ MySQL練習題(一)

2、查詢“生物”課程比“物理”課程成績高的所有學生的學號

 1 SELECT
 2     *
 3 FROM
 4     (
 5         SELECT
 6             *
 7         FROM
 8             course
 9         LEFT JOIN score ON score.course_id = course.cid
10         WHERE
11             course.cname = 生物
12     ) AS A
13 INNER JOIN (
14
SELECT 15 * 16 FROM 17 course 18 LEFT JOIN score ON score.course_id = course.cid 19 WHERE 20 course.cname = 物理 21 ) AS B ON A.student_id = B.student_id 22 WHERE 23 A.num > B.num

3、查詢平均成績大於60分的同學的學號和平均成績

 1 SELECT
 2     B.student_id,
 3     student.sname,
4 B.cc 5 FROM 6 ( 7 SELECT 8 student_id, 9 num, 10 avg(num) AS cc 11 FROM 12 score 13 GROUP BY 14 student_id 15 HAVING 16 avg(num) > 60 17 ) AS B 18 LEFT JOIN student ON B.student_id = student.sid

4、查詢所有同學的學號、姓名、選課數、總成績

 1 SELECT
 2     student_id,
 3     student.sname,
 4     count(score.course_id)as cc,
 5     sum(num)as cj
 6 FROM
 7     student
 8 LEFT JOIN score ON score.student_id = student.sid
 9 GROUP BY
10     score.student_id

5、查詢姓“李”的老師的個數

1 SELECT * from teacher where tname like 李%

6、查詢沒學過“李平”老師課的同學的學號、姓名

 1 SELECT student.sid,student.sname from student where sid not in
 2 (SELECT
 3     student_id
 4 FROM
 5 score
 6 WHERE course_id IN
 7     (
 8         SELECT
 9             course.cid
10         FROM
11             course
12         LEFT JOIN teacher ON teacher.tid = course.teacher_id
13         WHERE
14             tname = 李平老師
15     ) GROUP BY student_id)

7、查詢學過“001”並且也學過編號“002”課程的同學的學號、姓名

1 select A.student_id,B.sname FROM (SELECT score.student_id,student.sname,course_id
2  from score LEFT JOIN student on student.sid=score.student_id where score.course_id=1)as A
3  LEFT JOIN(SELECT score.student_id,student.sname,course_id
4  from score LEFT JOIN student on student.sid=score.student_id where score.course_id=2)as B
5  on A.student_id=B.student_id
6 where A.course_id=1 and B.course_id=2;

8、查詢學過“李平”老師所教的所有課的同學的學號、姓名

 1 SELECT
 2     student.sid,
 3     student.sname
 4 FROM
 5     student
 6 WHERE
 7     student.sid NOT IN (
 8         SELECT
 9             student.sname
10         FROM
11             student
12         WHERE
13             student.sid IN (
14                 SELECT
15                     course.cid
16                 FROM
17                     course
18                 LEFT JOIN teacher ON teacher.tid = course.teacher_id
19                 WHERE
20                     teacher.tname = 李平老師
21             )
22     )

9、查詢課程編號“002”的成績比課程編號“001”課程低的所有同學的學號、姓名

 1 SELECT
 2     student.sid,
 3     student.sname
 4 FROM
 5     (
 6         SELECT
 7             *
 8         FROM
 9             score
10         WHERE
11             score.course_id = 2
12     ) AS A
13 LEFT JOIN (
14     SELECT
15         *
16     FROM
17         score
18     WHERE
19         score.course_id = 1
20 ) AS B ON A.student_id = B.student_id
21 LEFT JOIN student ON student.sid = B.student_id
22 WHERE
23     A.num < B.num

10、查詢有課程成績小於60分的同學的學號、姓名

 1 SELECT
 2     student.sid,
 3     student.sname
 4 FROM
 5     score
 6 LEFT JOIN course ON course.cid = score.course_id
 7 LEFT JOIN student ON student.sid = score.student_id
 8 WHERE
 9     score.num < 60
10 GROUP BY
11     student_id

11、查詢沒有學全所有課的同學的學號、姓名

 1 SELECT
 2     student.sid,
 3     student.sname
 4 FROM
 5     student
 6 WHERE
 7     student.sid NOT IN (
 8         SELECT
 9             student.sid
10         FROM
11             score
12         LEFT JOIN course ON course.cid = score.course_id
13         LEFT JOIN student ON student.sid = score.student_id
14         GROUP BY
15             score.student_id
16         HAVING
17             count(course_id) = (SELECT COUNT(cid) FROM course)
18     )

12、查詢至少有一門課與學號為“001”的同學所學相同的同學的學號和姓名

 1   SELECT
 2 *
 3  FROM
 4     score
 5     LEFT JOIN student on score.student_id = student.sid
 6     LEFT JOIN course ON course.cid = score.course_id
 7  WHERE student_id != 1 AND
 8 score.course_id  in  (
 9         SELECT
10             course_id
11         FROM
12             score
13         WHERE
14             student_id = 1
15 )
16 GROUP BY student_id

13、查詢至少學過學號為“001”同學所選課程中任意一門課的其他同學學號和姓名

1 SELECT student_id from score where student_id!=1 and course_id IN
2 (select course_id from score where student_id =1 GROUP BY course_id)
3 GROUP BY student_id

14、查詢和“002”號的同學學習的課程完全相同的其他同學學號和姓名

 1 SELECT
 2     student_id,
 3     sname
 4 FROM
 5     score
 6 LEFT JOIN student ON score.student_id = student.sid
 7 WHERE
 8     student_id IN (
 9         SELECT
10             student_id
11         FROM
12             score
13         WHERE
14             student_id != 1
15         GROUP BY
16             student_id
17         HAVING
18             count(course_id) = (
19                 SELECT
20                     count(1)
21                 FROM
22                     score
23                 WHERE
24                     student_id = 1
25             )
26     )
27 AND course_id IN (
28     SELECT
29         course_id
30     FROM
31         score
32     WHERE
33         student_id = 1
34 )
35 GROUP BY
36     student_id
37 HAVING
38     count(course_id) = (
39         SELECT
40             count(1)
41         FROM
42             score
43         WHERE
44             student_id = 1
45     )

15、刪除學習“李平”老師課的SC表記錄

1  DELETE FROM score where score.course_id IN
2  (SELECT course_id from course LEFT JOIN teacher  on teacher.tid=course.teacher_id
3  LEFT JOIN score on score.course_id=course.cid
4  LEFT JOIN student  on score.student_id=student.sid
5  WHERE teacher.tname=李平老師
6 GROUP BY course_id;)

16、向SC表中插入一些記錄,這些記錄要求符合以下條件:①沒有上過編號“002”課程的同學學號;②插入“002”號課程的平均成績

1 insert into score (student_id,course_id,num)SELECT student_id,1,FLOOR(avg(num))
2 (SELECT student_id from score where course_id !=2
3 SELECT FLOOR(avg(num))from score where course_id = 2)

17、按平均成績從低到高顯示所有學生的“語文”、“數學”、“英語”三門的課程成績,按如下形式顯示: 學生ID,語文,數學,英語,有效課程數,有效平均分

1     select sc.student_id,
2         (select num from score left join course on score.course_id = course.cid where course.cname = "生物" and score.student_id=sc.student_id) as sy,
3         (select num from score left join course on score.course_id = course.cid where course.cname = "物理" and score.student_id=sc.student_id) as wl,
4         (select num from score left join course on score.course_id = course.cid where course.cname = "體育" and score.student_id=sc.student_id) as ty,
5         count(sc.course_id),
6         avg(sc.num)
7     from score as sc
8     group by student_id desc        

18、查詢各科成績最高和最低的分:以如下形式顯示:課程ID,最高分,最低分

1 select student_id,MAX(num),MIN(num) from score GROUP BY course_id

19、按各科平均成績從低到高和及格率的百分數從高到低順序

 1 SELECT
 2     course_id,
 3     avg(num) AS nn,
 4     sum(
 5         CASE
 6         WHEN num < 60 THEN
 7             0
 8         ELSE
 9             1
10         END
11     ),
12     SUM(1),
13     sum(
14         CASE
15         WHEN num < 60 THEN
16             0
17         ELSE
18             1
19         END
20     ) / SUM(1) AS pj
21 FROM
22     score
23 GROUP BY
24     course_id
25 ORDER BY
26     avg(num) DESC

20、課程平均分從高到低顯示(現實任課老師)

1 SELECT score.course_id,course.cname,avg(num),teacher.tname from score LEFT JOIN course on course.cid=score.course_id
2 LEFT JOIN teacher on teacher.tid=course.teacher_id
3 GROUP BY course_id
4 
5 HAVING avg(num)
6 ORDER BY avg(num) DESC

Python/ MySQL練習題(一)