一、实验目的
熟悉 SQL 的数据查询语言,能够使用 SQL 语句对数据库进行单表查询、连接查询,加深
对 T-SQL 语言的查询语句的理解。
二、实验内容及过程
1.实验内容
1)简单查询操作。包括投影、选择条件表达、数据排序等。
2)连接查询操作。包括笛卡儿积、等值连接、自然连接、复合条件连接、多表连接、外连
接和自连接等。
2.实验过程及结果
- 用到的4张表
SnoCnoGrade 课程表2
SC 选课表
Course 课程表
Student 学生表
1、简单查询
在学生选课数据库中实现其数据查询操作。
1) 查询数计学院学生的学号和姓名。
GO
select sno,sname from Student
where sdept='数计学院'
GO
SELECT sno
from SC
GO
2) 查询选修了课程的学生学号。
SELECT sno
from SC
3) 查询选修 C1 课程的学生学号和成绩,结果按成绩降序排列,如果成绩相同按学号升序排
序。
SELECT sno,grade
from SC
where cno='c101'
OrDer by grade DESC,sno asc
4) 查询选修 C1 课程,成绩在 80~90 之间的学生学号和成绩,并将成绩乘以 0.8 输出。
select SNO,GRADE*0.8
from SC
WHERE grade between 80 and 90 and cno='c102'
5) 查询生工学院或数计学院系姓张的学生的信息。
SELECT *
from Student
WHERE sdept in ('生工学院' ,'数计学院' )and
sname like '张%'
6) 查询缺少了成绩的学生的学号和课程号。
select sno ,cno
from SC
where grade IS NULL
2、连接查询
在学生选课库中实现其数据连接查询操作。
1) 查询学生的学号、姓名、选修的课程名称及成绩。
select Student.sno,sname,cname,grade from
(Student INNER JOIN SC ON Student.sno=SC.sno)
INNER JOIN Course on SC.cno=Course.cno
2) 查询数计学院学生选修的课程学分大于 2 的课程详细信息。
SELECT *
FROM SnoCnoGrade
where cnum>2
3) 查询所有学生的信息以及他(她)所选课的学生学号和成绩(要求查询结果也显示出没有
选修课程的学生信息)。
SELECT *,grade
FROM Student
Student left join SC ON SC.sno=Student.sno
4) 查询选修课程号为 C1 且成绩在 90 分以上的学生学号、姓名及成绩。
SELECT Student.sno,sname,grade
FROM SC INNER JOIN Student on Sc.sno=Student.sno and
grade>90 AND cno='c101'
5) 查询每一门课的间接先行课(即先行课的先行课)。
select first.cno,second.cpno
from Course first, Course second
where first.cpno=second.cname