多表连接和子查询
1、使用GROUP BY子句查询sc表中各个学生的平均成绩。
select avg(grade) from sc group by sno;
2、使用UNION查询在student 表中姓“李”的学生的学号、姓名与姓“林”的学生的学号、姓名返回在一个表中。
select sno,sname from student where sname like'李%'union select sno,sname from
student where sname like '林%';
3、在student 表中查找与“梁健华”性别相同的所有学生的姓名、出生日期。
select sno,sname from student where ssex like '男'
4、使用IN子查询查找所修课程编号为160004、160007的学生学号、姓名、性别。
select sno,sname,ssex from student where sno in(160004,160006);
5、使用ANY子查询查找学号为1001的学生的分数比1003号的学生的最低分数高的课程编号和分数。
select grade,cno from sc where sno=1001 and grade>all(select min(grade) from sc where sno=1003);
6、使用ALL子查询查找学号为1001的学生的分数比学号为1003的学生的最高成绩还要高的课程编号和分数。
select grade,cno from sc where sno=1001 and grade>all(select max(grade) from sc where sno=1003);
7、使用EXISTS子查询查找选修课程的学生学号和姓名
select sno,sname from student where exists(select sno from sc);
8、查询分数在80-90范围内的学生的学号、姓名、分数。
select student.sno,sname,sc.grade from sc inner join student where grade<80 and grade>70;
9、使用INNER JOIN连接方式查询学习“数据库原理及应用”课程的学生学号、姓名、分数。
select student.sno,sname,sc.gradee from sc inner join studnet on student.sno=sc.sno
where sc.cno in(select cno from course where cname='数据库');
10、查询每个学生所选课程的最高成绩,要求列出学号、姓名、最高成绩
select max(grade),student.sno,sname from student inner joinsc on sc.sno=student.sno group by sc.sno;
11、使用左外连接查询每个学生的总成绩,要求列出学号、姓名、总成绩,没有选修课程的学生的总成绩为空。
select student.sno,sname,sum(grade)as '总成绩'from student
left join sc on student.sno=sc.sno group by student.sno;
12、使用右外连接查询所有课程的选修情况,要求列出课程编号、课程名称、选修人数, 表中没有的课程列值为空。
select course.cname,course.cno,count(*)as'人数' from course right join sc on course.cno=sc.cno group by cno;