实验五 连接查询和嵌套查询

系列文章目录



一、实验目的

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.此次实验中得到的哪些经验教训、疑难问题?有什么心得或总结?

多写多练,不懂的要及时找问题找解决方法,然后去攻破它。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值