MySQL基础训练50题之1~10

    科技2024-04-12  78

    MySQL基础训练50题之1~10

    查询平均成绩大于等于60分的同学的学生编号和学生姓名和平均成绩

    select s.s_id "学号",s.s_name "姓名",round(avg(sc.s_score),1) "平均分" from student s inner join score sc on sc.s_id=s.s_id group by s.s_id HAVING 平均分>=60

    查询平均成绩小于60分的同学的学生编号和学生姓名和平均成绩(包括有成绩的和无成绩的)

    SELECT s.s_id "学号",s.s_name "姓名",round(avg(sc.s_score),1) "平均分" FROM student s RIGHT JOIN score sc on sc.s_id=s.s_id GROUP BY s.s_id HAVING 平均分<60

    查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩

    SELECT s.s_id 学号,s.s_name 姓名,COUNT(sc.c_id) 选课总数, SUM(sc.s_score) FROM student s INNER JOIN score sc ON sc.s_id=s.s_id GROUP BY s.s_id

    查询"李"姓老师的数量

    SELECT COUNT(t_name) 李姓老师的数量 FROM teacher WHERE t_name LIKE "李%"

    查询学过"张三"老师授课的同学的信息

    SELECT * FROM student s INNER JOIN score sc ON sc.s_id=s.s_id INNER JOIN course c on sc.c_id=c.c_id INNER JOIN teacher t ON t.t_id=c.t_id WHERE t.t_name='张三';

    查询没学过"张三"老师授课的同学的信息

    SELECT * FROM student s INNER JOIN score sc ON sc.s_id=s.s_id INNER JOIN course c on sc.c_id=c.c_id INNER JOIN teacher t ON t.t_id=c.t_id WHERE t.t_name!='张三';

    查询学过编号为"01"并且也学过编号为"02"的课程的同学的信息

    SELECT s.* from student s WHERE s.s_id in ( SELECT sc1.s_id from score sc1 INNER JOIN score sc2 ON sc1.s_id=sc2.s_id WHERE sc1.c_id=01 AND sc2.c_id=02)

    查询学过编号为"01"但是没有学过编号为"02"的课程的同学的信息

    SELECT s.* FROM student s INNER JOIN score sc ON s.s_id=sc.s_id WHERE sc.c_id=01 and sc.c_id!=02

    查询没有学全所有课程的同学的信息

    select s.* from student s right join ( select s_id,count(1) "所学门数" from score group by s_id having 所学门数<3 )c1 on c1.s_id=s.s_id

    查询至少有一门课与学号为"01"的同学所学相同的同学的信息

    SELECT s.* from student s INNER JOIN score sc on s.s_id=sc.s_id WHERE sc.c_id IN (SELECT sc.c_id from score sc where sc.s_id=01) AND s.s_id!=01 GROUP BY s.s_id
    Processed: 0.012, SQL: 8