Mysql查询语句,select,inner/left/right join on,group by.....[例题及答案]

创建如下表格,命名为stu_info, course_i, score_table.在这里插入图片描述
题目:
有如图所示的三张表结构,学生信息表(stu_info),课程信息表(course_i),分数信息表(score_table)

题目:
1.查询出每个学生所选修的课程的数量和所选修的课程的考试的平均分

2.查询出每门课程的选修的学生的个数和学生考试的总分

3.查询出性别一样并且年龄一样的学生的信息

4.查询出学分一样的课程信息

5.查询出参加了考试的学生的学号,姓名,课程号和分数

6.查询出参加了考试的学生的学号,课程号,课程名,课程学分和分数

7.查询出没有参加考试的学生的学号和姓名

8.查询出没有学生选修(即没有学生考试)的课程编号、课程名和学分

9.查询出姓名中有字母a的学生的信息

10.查询出选修了2门课程以上的并且考试平均分在70以上的学生的学号和考试平均分以及选修课程的数量

原创答案,仅作参考:

-- 1.查询出每个学生所选修的课程的数量和所选修的课程的考试的平均分
SELECT stu_info.stu_name,COUNT(course_i.course_id),AVG(score_table.score) FROM course_i 
INNER JOIN score_table ON course_i.course_id=score_table.course_id 
 LEFT JOIN stu_info ON score_table.stu_id=stu_info.stu_id GROUP BY score_table.stu_id;
-- 2.查询出每门课程的选修的学生的个数和学生考试的总分
SELECT course_i.course_name,COUNT(score_table.stu_id),SUM(score_table.score)FROM course_i 
right JOIN score_table ON course_i.course_id=score_table.course_id 
LEFT JOIN stu_info ON score_table.stu_id=stu_info.stu_id GROUP BY course_i.course_id;
 
-- 3.查询出性别一样并且年龄一样的学生的信息
SELECT s1.* FROM stu_info AS s1 LEFT JOIN stu_info AS s2 
ON s1.stu_age=s2.stu_age and s1.stu_sex=s2.stu_sex 
WHERE s1.stu_id!=s2.stu_id;
-- 4.查询出学分一样的课程信息
SELECT i1.* FROM course_i as i1 LEFT JOIN course_i as i2 
ON i1.course_marks=i2.course_marks WHERE i1.course_id!=i2.course_id 
GROUP BY i1.course_id;
-- 5.查询出参加了考试的学生的学号,姓名,课程号和分数
SELECT stu_info.stu_id,stu_info.stu_name,score_table.course_id,score_table.score
FROM stu_info LEFT JOIN score_table 
ON stu_info.stu_id=score_table.stu_id;
-- 6.查询出参加了考试的学生的学号,课程号,课程名,课程学分和分数
SELECT stu_info.stu_id,stu_info.stu_name,score_table.course_id,
course_i.course_name,course_i.course_marks,score_table.score
FROM stu_info LEFT JOIN score_table 
ON stu_info.stu_id=score_table.stu_id
LEFT JOIN course_i ON score_table.course_id=course_i.course_id;
-- 7.查询出没有参加考试的学生的学号和姓名
SELECT stu_id,stu_name FROM stu_info 
WHERE stu_id not in (SELECT stu_id FROM score_table);
-- 8.查询出没有学生选修(即没有学生考试)的课程编号、课程名和学分
SELECT * FROM course_i WHERE course_id 
NOT in (SELECT course_id FROM score_table);
-- 9.查询出姓名中有字母a的学生的信息
SELECT * FROM stu_info WHERE stu_name LIKE "%a%";
-- 10.查询出选修了2门课程以上的并且考试平均分在70以上的学生的学号和考试平均分以及选修课程的数量
SELECT score_table.stu_id,AVG(score_table.score),COUNT(score_table.course_id)
FROM score_table GROUP BY stu_id HAVING AVG(score_table.score)>70;
posted @ 2019-07-25 19:41  BIG_BOSS_ZC  阅读(217)  评论(0编辑  收藏  举报