MySQL练习题

-- select s_id from student;
-- select c_id from course where c_name = 'python'

-- SELECT s_id,num from score where c_id in(select c_id from course where c_name = 'python') and s_id in(select s_id from student);
-- SELECT s_id,num from score where c_id in(select c_id from course where c_name = 'java') and s_id in(select s_id from student)
#查询学习课程"python"比课程 "java" 成绩高的学生的学号;
-- SELECT id from (SELECT s_id as id,num from score where c_id in(select c_id from course where c_name = 'python') 
and s_id in(select s_id from student)) as p1 -- INNER JOIN
(SELECT s_id,num from score where c_id in(select c_id from course where c_name = 'java')
and s_id in(select s_id from student)) as p2 on p1.id = p2.s_id -- where p1.num > p2.num; #查询平均成绩大于65分的同学的姓名和平均成绩(保留两位小数); #ROUND(n,小数的位数) -- SELECT avg(num) from score GROUP BY s_id ; -- select s_name,ROUND(mid,2) from student s LEFT JOIN (SELECT avg(num)as mid,s_id from score GROUP BY s_id -- ) as p on s.s_id = p.s_id where mid >65; #查询所有同学的姓名、选课数、总成绩; -- select s_name,c_num,s_sum from -- (select s_id,sum(num)as s_sum,count(c_id) as c_num from score GROUP BY s_id) as t -- LEFT JOIN student on t.s_id = student.s_id #查询所有的课程的名称以及对应的任课老师姓名; -- select c_name,t_name from -- (select c_name,t_id from course) as t LEFT JOIN teacher on t.t_id = teacher.t_id #查询没学过“alex”老师课的同学的姓名; #先查学过的,最后在否定一下。 -- select s_name from student where s_id not in -- (SELECT s_id from score where c_id in (SELECT c_id from course where t_id in(select t_id from teacher where t_name = 'alex'))) #in --or #查询挂科超过两门(包括两门)的学生姓名 -- select s_name from student as s LEFT JOIN -- (select s.s_id,sum(case WHEN s.num<= 60 THEN 1 ELSE 0 end) as number -- from score as s GROUP BY s.s_id) as n on s.s_id = n.s_id WHERE number >=2 #查询学过'python'并且也学过编号'java'课程的同学的姓名; -- select score.s_id,count(*)as number from course,score where course.c_id = score.c_id and course.c_name in ('python','java')
GROUP BY score.s_id HAVING number >=2 #在没有分组的时候的行数就是count(*),就是count(*)相当于行数,但是不能都表示出来,如果要表示就要GROUP_CONCAT -- SELECT student.s_name from student, -- (select score.s_id,count(*)as number from course,score where course.c_id = score.c_id and course.c_name in ('python','java')
GROUP BY score.s_id HAVING number >=2) as s where student.s_id = s.s_id #查询学过'貂蝉'同学全部课程 的其他同学姓名; -- SELECT s_id,count(c_id) FROM score WHERE c_id in -- (SELECT n.c_id from student as s,score as n WHERE s.s_id =n.s_id and s.s_name = '貂蝉')
GROUP BY s_id HAVING count(c_id)>=2 and s_id!= (SELECT s_id from student where s_name = '貂蝉') #用count(*) -- select student.s_name from student,score where student.s_id = score.s_id and score.c_id in -- (select c_id from student,score where student.s_id = score.s_id and student.s_name = '貂蝉') and student.s_name !='貂蝉'
GROUP BY student.s_id -- HAVING count(*) >= (select count(*) from student,score where student.s_id = score.s_id and student.s_name = '貂蝉') #查询和'貂蝉'同学学习的课程完全相同的,其他同学姓名; -- SELECT student.s_name from student, -- (SELECT score.s_id, -- sum(case when c_id in
(SELECT n.c_id from student as s,score as n WHERE s.s_id =n.s_id and s.s_name = '貂蝉')THEN 1 ELSE -1 END ) AS N -- from score where score.s_id !=(SELECT student.s_id from student where s_name = '貂蝉') GROUP BY score.s_id HAVING N=2) as m -- where student.s_id = m.s_id #先通过貂蝉的科目数 筛选 与貂蝉选相同科目的人 ,然后通过具体的科目来筛选; ##count(*)相当于没有分组前的行数 #SELECT student.s_id from student,score where student.s_id = score.s_id GROUP BY score.s_id HAVING count(*)= #(SELECT count(*) FROM student,score where student.s_id = score.s_id and student.s_name = '貂蝉') ---(2,5) -- SELECT DISTINCT student.s_name from student,score where student.s_id = score.s_id and score.s_id in (2,5) AND score.c_id in -- (SELECT score.c_id FROM student,score where student.s_id = score.s_id and student.s_name = '貂蝉') and student.s_name != '貂蝉' #按平均成绩倒序显示所有学生的“python”、“java”、“linux”三门的课程成绩,按如下形式显示: 学生ID,python,java,linux,课程数,平均分 -- SELECT num from score,course where score.c_id = course.c_id and course.c_name ='python' and score.s_id = 1 #一个数据就可以作为一个字段,即把一个结果集作为一个字段; -- SELECT s.s_id as '学生ID', -- (SELECT num from score,course where score.c_id = course.c_id and course.c_name ='python' and score.s_id = s.s_id) as 'python', -- (SELECT num from score,course where score.c_id = course.c_id and course.c_name ='java' and score.s_id = s.s_id) as 'java', -- (SELECT num from score,course where score.c_id = course.c_id and course.c_name ='linux' and score.s_id = s.s_id) as 'linux', -- count(*) as '课程数', -- ROUND(avg(s.num),2) as '平均分' -- from score as s GROUP BY s.s_id ORDER BY '平均分' DESC -- #查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列 -- SELECT course.c_name,avg(num) FROM score,course where score.c_id = course.c_id
GROUP BY score.c_id ORDER BY avg(num) ASC , score.c_id DESC #按条件排序,可以按照多个条件,如果第一个条件不满足,则按照第二个条件;即 平均成绩相同时,按课程号降序排列

  

原文地址:https://www.cnblogs.com/zenghui-python/p/10590024.html