多表查询----实验三 SQL语句应用

一. 实验目的

  1. 进一步熟悉掌握SQL Server 查询分析器环境。
  2. 掌握多表查询的两种方法:连接查询、嵌套查询。
  3. 掌握合并查询的方法。

二. 实验内容

  1. 连接查询的两种连接方法:同一查询要求,考虑两种方法实现。
  2. 通过实验体会外连接的实现:左外连接、右外连接、全外连接。
  3. 涉及自身连接的查询 。
  4. 涉及三表(多表)的连接查询。
  5. 嵌套查询中不相关子查询、相关子查询的应用。
  6. 引出子查询的谓词IN、ANY、ALL的应用。
  7. 合并查询:并操作(UNION)。
  8. 存储查询结果到表中:SELECT…INTO 语句的应用。

三.实验步骤

在实验一、二的基础上,运用SQL语句实现以下查询要求:

   1. 查询所有同学的选课及成绩情况,要求显示学生的学号s_no、姓名s_name、

      课程号course_no和课程的成绩score。

select Student.s_no,s_name,course_no,score
from Student,Choice
where (Student.s_no=Choice.s_no)

   2.查询所有同学的选课及成绩情况,要求显示学生的姓名s_name、课程名

      称course_ name、课程的成绩score,并将查询结果存放到一个新的数据

      表new_table中。(SELECT…INTO)

select s_name,course_name,score
into new_table
from Student,Choice,Course
where (Student.s_no=Choice.s_no)
and (Course.course_no=Choice.course_no)

   3.查询“计算机99-1”班的同学的选课及成绩情况,要求显示学生的学号

      s_no、姓名s_name、课程号course_no、课程名称course_name、课程的

      成绩score。

select Student.s_no,s_name,Course.course_no,Course_name,score
from Student,Course,Choice,Class
where (Student.s_no=Choice.s_no)
and (Course.course_no=Choice.course_no)
and Class.class_no=Student.class_no
and class_name='计算机99-1'

   4.查询所有同学的学分情况(假设课程成绩≥60分时可获得该门课程的学

      分),要求显示学生的学号s_no、姓名s_name、总学分(将该列定名为:

      total_score)。(用JOIN)

select Student.s_no,s_name,sum(score) as total_score
from Student join Choice
on Student.s_no=Choice.s_no
where score>=60
group by Student.s_no,s_name

   5.查询所有同学的平均成绩及选课门数,要求显示学生的学号s_no、姓名

      s_name、平均成绩(将该列定名为average_score)、选课的门数(将该

      列定名为:choice_num)。

select Student.s_no,s_name,AVG(score) as average_score,COUNT(*) as choice_num
from Student,Choice
where Student.s_no=Choice.s_no
group by Student.s_no,s_name

   6.查询所有选修了课程但未参加考试的所有同学及相应的课程,要求显示学

      生的学号s_no、姓名s_name、课程号course_no、课程名称course_name。    

select Student.s_no,s_name,Course.course_no,course_name
from Student join Choice
on Student.s_no=Choice.s_no
join Course
on Choice.course_no=Course.course_no
where Choice.course_no is not null and score is null

   7.查询所有选修了课程但考试不及格(假设<60分为不及格)的所有同学

      及相应的课程,要求显示学生的学号s_no、姓名s_name、课程号course_no、

      课程名称course_name、学分course_score。

select Student.s_no,s_name,Course.course_no,course_name,course_score
from Student join Choice 
on Student.s_no=Choice.s_no
join Course
on Course.course_no=Choice.course_no
where score<60

   8.查询选修了课程名为“程序设计语言”的所有同学及成绩情况,要求显示

      学生的姓名s_name、课程的成绩score。(使用ANY)

select s_name,score
from Student join Choice
on Student.s_no=Choice.s_no
join Course
on Course.course_no=Choice.course_no
where Course.course_name  = '程序设计语言'

   9.查询“计算机系”的所有同学及成绩情况,要求显示学生的学号s_no、

      姓名s_name、班级名称class_name、课程号course_no、课程名称

      course_name、课程的成绩score。

select Student.s_no,s_name,class_name,Course.course_no,course_name,score
from Student,Class,Course,Choice
where (Course.course_no=Choice.course_no)
and (Class.class_no=Student.class_no)
and (Student.s_no=Choice.s_no)
and class_dept='计算机系'

   10.查询所有教师的任课情况,要求显示教师姓名t_name、担任课程的名称

       course_name。

/*连接查询*/
select t_name,course_name
from Teacher join Teaching
on Teacher.t_no=Teaching.t_no
join Course
on Course.course_no=Teaching.course_no
/*子循环嵌套查询*/
select t_name,course_name
from Teacher,Course
where course_name=(select course_name
                   from Teaching,Course
                   where Teaching.course_no=Course.course_no)

   11.查询所有教师的任课门数,要求显示教师姓名t_name、担任课程的门数

     (将该列定名为course_number)。

select t_name,COUNT(*) as course_number
from Teacher,Teaching
where Teacher.t_no=Teaching.t_no
group by Teaching.t_no,t_name  

   12.查询和“王蕾”是同一班级的同学的姓名。(使用子查询)

select s_name
from Student
where class_no=(select class_no
				from Student
				where s_name='王蕾'
				)

   13.查询没有选修“计算机基础”课程的学生姓名。(使用子查询)

select s_name
from Student
where s_no not in(select s_no,course_name
                  from Student,Course
			      where course_name=(select course_name
			                         from Course
							         where course_name='计算机基础')
		    )

   14.查询主讲“数据库原理与应用”和主讲“数据结构”的教师姓名。(用

       UNION)

select distinct teacher.t_name --100
from Teacher join Teaching
on Teacher.t_no=Teaching.t_no
join Course
on Course.course_no=Teaching.course_no
where course_name='数据库原理与应用'
union
select distinct teacher.t_name 
from Teacher join Teaching
on Teacher.t_no=Teaching.t_no
join Course
on Course.course_no=Teaching.course_no
where course_name='数据结构'

   15.查询讲授了“数据库原理与应用”课程的教师的姓名。

select distinct teacher.t_name 
from Teacher join Teaching
on Teacher.t_no=Teaching.t_no
join Course
on Course.course_no=Teaching.course_no
where course_name='数据库原理与应用'   

   要求:至少有一个题目,使用连接查询、嵌套查询两种方法来实现。

 附加题:10.查询所有教师的任课情况,要求显示教师姓名t_name、担任课程的名称course_name。

/*内连接:系统会自动忽略两个表中对应不起来的数据*/
select t_name,course_name
from Teacher inner join Teaching
on Teacher.t_no=Teaching.t_no
inner join Course
on Course.course_no=Teaching.course_no
/*左外连接:显示left左边表中的所有数据,右边表数据少了补null值*/
select t_name,course_name
from Teacher left join Teaching
on Teacher.t_no=Teaching.t_no
left join Course
on Course.course_no=Teaching.course_no
/*右外连接: 显示right右边表中所有的数据,左边表少了补null值*/
select t_name,course_name
from Teacher right join Teaching
on Teacher.t_no=Teaching.t_no
right join Course
on Course.course_no=Teaching.course_no

 

四.根据上课讲的例题,自己给出10个查询语句,包括实验内容中要求的知识点。

    注意:每个均要写出查询要求和相应的SQL语句。

1.查询所有老师的授课情况,要求显示老师的教师号t_no、教师姓名t_name、教师职称t_title、所授课程号course_no

select Teacher.t_no,t_name,t_title,course_no
from Teacher,Teaching
where Teacher.t_no=Teaching.t_no


2.查询所有老师的选课情况,要求显示老师的姓名t_name、教师号t_no、所授课程号course_ no,并将查询结果存放到一个新的数据表Teach中。(SELECT…INTO)

select t_name,Teacher.t_no,course_no
into Teach
from Teacher,Teaching
where Teacher.t_no=Teaching.t_no


3.查询班号为“js0002”的同学的选课情况,要求显示学生的学号s_no、课程号course_no、系别class_dept、课程名称course_name

select Student.s_no,Choice.course_no,class_dept,course_name
from Student,Choice,Class,Course
where Student.s_no=Choice.s_no
and Student.class_no=Class.class_no
and Student.s_no=Choice.s_no
and Class.class_no='js0002'
/*group by Student.s_no,Choice.course_no,Class.class_dept,Class.class_name*/


4.查询所有同学的成绩情况(假设课程成绩≥60分时及格),要求显示学生的学号s_no、姓名s_name、总成绩(将该列定名为:sum_score)。(用JOIN)

select Student.s_no,s_name,SUM(score) as sum_score
from Student join Choice
on Student.s_no=Choice.s_no
where score>=60
group by Student.s_no,s_name


5.查询所有选修了课程且考试及格(假设<60分为不及格)的所有同学及相应的课程,
要求显示学生的学号s_no、课程号course_no、学分course_score。

select Student.s_no,Course.course_no,course_score
from Student join Choice 
on Student.s_no=Choice.s_no
join Course
on Course.course_no=Choice.course_no
where score>60


6.查询和“藩桃芝”是同一系别的同学的姓名。(使用子查询)

select s_name,class_dept
from Student,Class
where class_dept=(select class_dept,s_name
                  from Class join Student
				  on Class.class_no=Student.class_no
				  where s_name='藩桃芝')


7.查询讲授了“计算机基础”课程的教师的姓名。

select distinct Teacher.t_name 
from Teacher join Teaching
on Teacher.t_no=Teaching.t_no
join Course
on Course.course_no=Teaching.course_no
where course_name='计算机基础'   


8.查询“李建国”的选修的课程数,要求显示学号s_no、选修的课程门数(将该列定名为course_number)。

select Student.s_no,COUNT(*) as course_number
from Student,Choice
where Student.s_no=Choice.s_no
and s_name='李建国'
group by Student.s_no


9.查询选修了课程号为“01002”但未参加考试的所有同学,要求显示学生的学号s_no、姓名s_name、
课程号course_no、课程名称course_name

select Student.s_no,s_name,Course.course_no,course_name
from Student join Choice
on Student.s_no=Choice.s_no
join Course
on Choice.course_no=Course.course_no
where Course.course_no='01002'


10.查询“宋浩然”老师所教授的所有课程,要求显示教师号t_no、教师姓名t_name、课程号course_no、课程名course_name
 

select Teacher.t_no,t_name,Course.course_no,Course.course_name
from Teacher join Teaching
on Teacher.t_no=Teaching.t_no
join Course
on Teaching.course_no=Course.course_no
where t_name='宋浩然'

 

 

 

  • 8
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实验1 Mysql数据库SQL语句练习实验主要是为了帮助学习者熟悉使用Mysql数据库的SQL语句。通过实践练习,学习者可以掌握SQL语句的基本语法和常用操作,进一步理解数据库的概念和原理。 在实验中,学习者将使用Mysql数据库,通过编写和执行SQL语句来完成一系列操作。这些操作包括创建数据库和表、插入和更新数据、查询和筛选数据等。通过实践练习,学习者可以逐步掌握不同类型的SQL语句和各种功能。 实验1的内容可以包括以下几个方面: 1. 创建数据库:学习者可以使用CREATE DATABASE语句创建一个新的数据库,定义数据库的名称和字符集等属性。 2. 创建表:学习者可以使用CREATE TABLE语句创建一个新的表,定义表的结构和字段,包括字段名、数据类型、约束等。 3. 插入数据:学习者可以使用INSERT INTO语句向表中插入数据,根据表的结构和字段定义,逐个插入数据记录。 4. 更新数据:学习者可以使用UPDATE语句更新表中的数据,根据条件选择需要更新的记录,并修改相应的字段值。 5. 查询数据:学习者可以使用SELECT语句查询表中的数据,根据条件筛选需要的记录,并选择要显示的字段和排序方式。 6. 删除数据:学习者可以使用DELETE FROM语句删除表中的数据,根据条件选择需要删除的记录。 通过实验1的练习,学习者可以逐步掌握Mysql数据库的SQL语句的基本用法和常见操作,提高对数据库的理解和应用能力。此外,实验1还可以培养学习者的数据处理和分析能力,为进一步学习数据库相关内容打下基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值