实验五 连接查询和嵌套查询
- 一、实验目的
- 二、实验内容及要求(请同学们尝试每道题均使用连接和嵌套两种方式来进行查询,如果可以的话)
- 1. 找出所有任教“数据库”的教师的姓名。
- 2. 取出学号为“980101011”的学生选修的课程号和课程名。
- 3.“涂杰杰”所选修的全部课程号及成绩。(注意:school中有同名,即有两名学生叫“涂杰杰”。)
- 4.找出“苏贤兴”同学所学课程的名称和成绩。
- 5.显示所有课程的选修情况。
- 6.检索选修课程号为“0109”或“0111”的学生学号、姓名和所在班级。
- 7.查询“0203”课程的最高分的学生的学号。
- 8.没有选修以“01”开头的课程的学生信息。(用子查询完成,提示not in或not exists。需考虑没选课的学生)
- 三、实验小结
- 1.思考简单查询、连接查询与嵌套查询有什么不同?连接查询与嵌套查询有何区别与联系?
一、实验目的
1.掌握Management Studio的使用。
2.掌握SQL中连接查询和嵌套查询的使用。
二、实验内容及要求(请同学们尝试每道题均使用连接和嵌套两种方式来进行查询,如果可以的话)
1. 找出所有任教“数据库”的教师的姓名。
SELECT Teac_name
FROM Teacher t,Course c,CourseTeacher ct
WHERE c.Course_name='数据库' and c.Course_id=ct.Course_id
and ct.Teac_id=t.Teac_id
2. 取出学号为“980101011”的学生选修的课程号和课程名。
SELECT c.Course_id,c.Course_name
FROM Course c,StudentGrade sc
WHERE sc.Stu_id='980101011' and
sc.Course_id=c.Course_id
3.“涂杰杰”所选修的全部课程号及成绩。(注意:school中有同名,即有两名学生叫“涂杰杰”。)
SELECT c.Course_id,Grade,s.Class_id
FROM Student s,Course c,StudentGrade sc
WHERE s.Stu_name='涂杰杰' and s.Stu_id=sc.Stu_id and
sc.Course_id=c.Course_id
4.找出“苏贤兴”同学所学课程的名称和成绩。
SELECT c.Course_name,Grade
FROM Student s,Course c,StudentGrade sg
WHERE s.Stu_name='苏贤兴' and s.Stu_id=sg.Stu_id and
sg.Course_id=c.Course_id
5.显示所有课程的选修情况。
SELECT DISTINCT sg.Stu_id,c.Course_id,c.Course_name,sg.Grade
FROM Course c,StudentGrade sg
WHERE c.Course_id=sg.Course_id
6.检索选修课程号为“0109”或“0111”的学生学号、姓名和所在班级。
SELECT Stu_id ,Stu_name,Class_name
FROM Student s,Course c,Class cc
WHERE cc.Class_id=s.Class_id and (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
)
8.没有选修以“01”开头的课程的学生信息。(用子查询完成,提示not in或not exists。需考虑没选课的学生)
1.
SELECT s.*
FROM Student s,Course c,StudentGrade sg
WHERE c.Course_id=sg.Course_id and s.Stu_id=sg.Stu_id and c.Course_id not in(
SELECT Course_id
FROM Course
WHERE Course_id like '01%'
)
2.
SELECT s.*
FROM Student s,Course c,StudentGrade sg
WHERE c.Course_id=sg.Course_id and s.Stu_id=sg.Stu_id and c.Course_id not like '01%'
三、实验小结
1.思考简单查询、连接查询与嵌套查询有什么不同?连接查询与嵌套查询有何区别与联系?
若一个查询只涉及一个表,则称之为简单查询。
若一个查询同时涉及两个或两个以上的表,则称之为连接查询。
嵌套查询又称子查询,是指在父查询的where条件语句中再插入一个子查询语句。
连接查询与嵌套查询区别:
1、含义上的不同
嵌套查询是包含一个或多个子查询或者子查询的另一个术语的SELECT语句。在一个外层查询中包含有另一个内层查询子查询是SQL语句的扩展。
连接查询是关系数据库中最主要的查询。在关系数据库管理系统中,表建立时各数据之间的关系不必确定,常把一个实体的所有信息存放在一个表中。当检索数据时,通过连接操作查询出存放在多个表中的不同实体的信息。
2、特性上的不同
嵌套查询的主要特性是SQL允许多层嵌套,是由内而外地进行分析,子查询的结果作为主查询的查询条件。
连接是关系数据库模型的主要特点,通过连接运算符可以实现多个表查询。连接操作给用户带来很大的灵活性,可以在任何时候增加新的数据类型。
联系:连接查询都可以用嵌套查询完成,反之不然。