系列文章目录
一、实验目的
1.掌握Management Studio的使用。
2.掌握SQL中连接查询和嵌套查询的使用。
二、实验内容及要求
(请同学们尝试每道题均使用连接和嵌套两种方式来进行查询,如果可以的话)
1. 找出所有任教“数据库”的教师的姓名。
select distinct Teac_name from Teacher,CourseTeacher
where Teacher.Teac_id=CourseTeacher.Teac_id
and Course_id=(select Course_id from Course where
Course_name='数据库')
select distinct Teac_name from Teacher
where Teac_id in(select Teac_id from CourseTeacher
where Course_id in(select Course_id
from Course
where Course_name='数据库'))
2. 取出学号为“980101011”的学生选修的课程号和课程名。
select Course_id ,Course_name
from Course
where Course_id in(
select Course_id
from StudentGrade
where Stu_id='980101011')
select Course.Course_id ,Course_name
from Course,StudentGrade
where Course.Course_id=StudentGrade.Course_id
and Stu_id='980101011'
3.“涂杰杰”所选修的全部课程号及成绩。(注意:school中有同名,即有两名学生叫“涂杰杰”。)
select Course_id,grade
from StudentGrade
where Stu_id in (
select Stu_id
from student
where Stu_name='涂杰杰'
)
select Course_id,grade
from StudentGrade,Student
where StudentGrade.Stu_id=Student.Stu_id
and Stu_name='涂杰杰'
4.找出“苏贤兴”同学所学课程的名称和成绩。(请使用连接查询和嵌套查询分别来完成)
select Course_name,grade
from Course,StudentGrade
where Course.Course_id=StudentGrade.Course_id
and Stu_id in(
select Stu_id
from student
where Stu_name='苏贤兴'
)片
select Course_name,grade
from Course,StudentGrade
where Course.Course_id=StudentGrade.Course_id
and Stu_id in(
select Stu_id
from student
where Stu_name='苏贤兴'
)
5.显示所有课程的选修情况(外连接)。
select Course_name,count(Stu_id) as 选修人数
from Course left join StudentGrade on Course.Course_id=StudentGrade.Course_id
group by Course_name
-- 右外连接
select Course_name,count(Stu_id) as 选修人数
from StudentGrade right join Course on Course.Course_id=StudentGrade.Course_id
group by Course_name
6.检索选修课程号为“0109”或“0111”的学生学号、姓名和所在班级。
select Stu_id,Stu_name,Class_id
from Student
where Stu_id in(
select Stu_id
from StudentGrade
where Course_id in('0109','0111')
)
select Stu_id,Stu_name,Class_id
from Student
where Stu_id in(
select Stu_id
from StudentGrade
where Course_id='0109' or Course_id='0111'
)
7.查询“0203”课程的最高分的学生的学号。
select Stu_id
from StudentGrade
where Course_id='0203'
and grade =(
select max(grade)
from StudentGrade
where Course_id='0203'
)
8.没有选修以“01”开头的课程的学生信息。(用子查询完成,提示not in或not exists。需考虑没选课的学生)
select *
from Student left join StudentGrade on Student.Stu_id=StudentGrade.Stu_id
where Course_id not in (
select Course_id
from Course
where Course_id like '01%'
)
select *
from Student ,StudentGrade
where Student.Stu_id=StudentGrade.Stu_id and
Course_id not in (
select Course_id
from Course
where Course_id like '01%'
)
三、实验小结
1.思考简单查询、连接查询与嵌套查询有什么不同?连接查询与嵌套查询有何区别与联系?
2.此次实验中得到的哪些经验教训、疑难问题?有什么心得或总结?
多写多练,不懂的要及时找问题找解决方法,然后去攻破它。