数据库原理实验 三个关系表 学生表students 课程表course 学生选课表sc

实验数据如下:
在数据库中建立三个关系表Students,Course,SC。
学生表:Student(Sno,Sname,Ssex,Sage,Sdept)
课程表:Course(Cno,Cname,Cpno,Ccredit)
学生选课表:SC(Sno,Cno,Grade)
在这里插入图片描述在这里插入图片描述
1、 在SC表中查询选修了课程的学生学号。注意去掉重复的行。
2、查询既不是信息系、数学系,也不是计算机科学系的学生的姓名和性别。
3、查询全体学生情况,查询结果按所在系的系号升序排列,同一系中的学生按年龄降序排列。
4、查询选修了3号课程的学生的学号及其成绩,查询结果按分数降序排列。
5、检索至少选修课程号为C2和C4的学生学号
6、查询每个学生的学号、姓名、选修的课程名及成绩
7、查询总学分超过6分的同学学号,姓名,选修课的门数,总学分
8、查询选修1号课程的男生和女生人数,显示课号,性别,人数。
9、检索学C2课程的学号与姓名。
10、检索平均成绩最高的学生学号。
11、查询没有选修1号课程的学生姓名。
12、查询选修了全部课程的学生姓名。
13、检索刘晨同学不学的课程的课程号。
14、检索学号比刘晨同学大,而年龄比他小的学生姓名。
15、求年龄大于女同学平均年龄的男学生姓名和年龄。

答案:
1.select distinct Sno from sc
2.select Sname ,Ssex from students where Sdept not in ('CS','MA','IS');
3.select * from students order by Sdept,Sage desc;
4.select Sno,Grade from sc where Cno=3 order by Grade desc;
5.select students.Sno from students left outer join sc on(sc.Sno=students.Sno) where sc.Cno='2' and sc.Cno='4'
6.select students.Sno,Sname,Cname,Grade from students,sc,course where students.Sno=sc.Sno and course.Cno=sc.Cno;
7.select Sno,Sname,count(Cno),sum(Ccredit) from( select Students.Sno,Sname,course.Cno,course.Ccredit from studnts,sc,course where students.Sno=sc.Sno and course.Cno=sc.Cno)as sc1 group by Sno having sum(Ccredit)>6
8.select Cno,Ssex,count(Sno) from( select Cno,Ssex,students.Sno from students,sc where students,sc where students.Sno=sc.Sno and Cno=1)as sc1 group by Ssex
9.select students.Sno,Sname from students,sc where students.Sno=sc.Sno and Cno='1'
10.select Sno from sc group by Sno order by avg(Grade) desc limit 1
11.select Sname from students where not exists (select * from sc where students.Sno=sc.Sno and Cno='1')
12.select Sname from students where not exists (select * from course where not exists (select * from sc where Sno=students.Sno and Cno=course.Cno));
13.select Cno from course where not exists (select Cno from sc ahere sc.Cno=course.Cno and Sno='20021522')
14.select Sname from students where Sno>( select Sno from students where Sname='刘晨' and Sage<( select Sage from students where Sname='刘晨'))
15.select Sname,Sage from students where Sage>( select avg(Sage) from students where Ssex='女' ) and Ssex='男'

  • 大小写啥的,复制到数据库编译器里会自动转换,全手写,不知道拼写对不对,你们复制过去注意下。

  • 不知道为什么显示出来没有换行,也没有个格式,不过效果能出来。

  • 这些也都是我自己写的,不知道对不对,反正结果是对的。

  • 完工,吃饭。哈哈

交互式SQL的使用 环境:WINDOWS,Microsoft SQL Server 实验要求: 1,创建Student数据库,包括Students,Courses,SC结构如下: Students(SNO,SNAME,SEX,BDATE,HEIGHT,DEPARTMENT) Courses(CNO,CNAME,LHOUR,CREDIT,SEMESTER) SC(SNO,CNO,GRADE) (注:下划线示主键,斜体示外键),并插入一定数据。 2.完成如下的查询要求及更新的要求。 (1)查询身高大于1.80m的男生的学号和姓名; (2)查询计算机系秋季所开课程的课程号和学分数; (3)查询选修计算机系秋季所开课程的男生的姓名、课程号、学分数、成绩; (4)查询至少选修一门电机系课程的女生的姓名(假设电机系课程的课程号以EE开头); (5)查询每位学生已选修课程的门数和总平均成绩; (6)查询每门课程选课学生人数,最高成绩,最低成绩和平均成绩; (7)查询所有课程的成绩都在80分以上的学生的姓名、学号、且按学号升序排列; (8)查询缺成绩的学生的姓名,缺成绩的课程号及其学分数; (9)查询有一门以上(含一门)三个学分以上课程的成绩低于70分的学生的姓名; (10)查询1984年~1986年出生的学生的姓名,总平均成绩及已修学分数。 (11) 在STUDENTSC关系中,删去SNO以’01’开关的所有记录。 (12)在STUDENT关系中增加以下记录: (13)将课程CS-221的学分数增为3,讲课时数增为60 3.补充题: (1) 统计各系的男生和女生的人数。 (2) 列出学习过‘编译原理’,‘数据库’或‘体系结构’课程,且这些课程的成绩之一在90分以上的学生的名字。 (3) 列出未修选‘电子技术’课程,但选修了‘数字电路’或‘数字逻辑’课程的学生数。 (4) 按课程排序列出所有学生的成绩,尚无学生选修的课程,也需要列出,相关的学生成绩用NULL示。 (5) 列出平均成绩最高的学生名字和成绩。(SELECT句中不得使用TOP n子句) 4.选做题:对每门课增加“先修课程”的属性,用来示某一门课程的先修课程,每门课程应可记录多于一门的先修课程。要求: 1) 修改结构的定义,应尽量避免数据冗余,建立必要的主键,外键。 2) 设计并插入必要的测试数据,完成以下查询: 列出有资格选修数据库课程的所有学生。(该学生已经选修过数据库课程的所有先修课,并达到合格成绩。) 注意:须设计每个查询的测试数据,并在查询之前用INSERT语句插入中。 提交作业形式: 1) 建立Student数据库的SQL脚本,插入所有数据项的SQL脚本(包括所有的测试数据)。 2) 完成查询要求的SQL语句脚本。 3) 选做题:须提交修改数据库定义的SQL脚本,插入测试数据的SQL脚本以及用于查询的SQL语句。
好的,根据您的要求,我为您创建了数据库SC和三张Students_8208210915、Courses_8208210915和Score_8208210915。 首先是创建数据库SC: ``` CREATE DATABASE SC; ``` 然后创建学生Students_8208210915: ``` USE SC; CREATE TABLE Students_8208210915( student_id INT PRIMARY KEY, name VARCHAR(20), gender CHAR(1), birthday DATE, address VARCHAR(100) ); ``` 其中,学生编号(student_id)是主键,对应选修Score_8208210915中的外键,示该学生选修的课程。学生性别(gender)只能取值“男”或者“女”。 接下来是课程表Courses_8208210915: ``` CREATE TABLE Courses_8208210915( course_id INT PRIMARY KEY, name VARCHAR(20), credit DECIMAL(3,1) ); ``` 其中,课程编号(course_id)是主键,对应选修Score_8208210915中的外键,示该课程被哪些学生选修。 最后是选修Score_8208210915: ``` CREATE TABLE Score_8208210915( student_id INT, course_id INT, score DECIMAL, primary INT, PRIMARY KEY(student_id, course_id), FOREIGN KEY(student_id) REFERENCES Students_8208210915(student_id), FOREIGN KEY(course_id) REFERENCES Courses_8208210915(course_id) ); ``` 其中,学生编号(student_id)和课程编号(course_id)组成复合主键,分别对应学生Students_8208210915和课程表Courses_8208210915中的主键。学生成绩(score)示该学生在该门课程中的成绩,主修/辅修标志(primary)示该学生是否主修该门课程。同时,该还定义了两个外键,分别对应学生课程表中的主键。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值