成绩管理数据库.docx

上传人:b****8 文档编号:10935720 上传时间:2023-02-23 格式:DOCX 页数:39 大小:68KB
下载 相关 举报
成绩管理数据库.docx_第1页
第1页 / 共39页
成绩管理数据库.docx_第2页
第2页 / 共39页
成绩管理数据库.docx_第3页
第3页 / 共39页
成绩管理数据库.docx_第4页
第4页 / 共39页
成绩管理数据库.docx_第5页
第5页 / 共39页
点击查看更多>>
下载资源
资源描述

成绩管理数据库.docx

《成绩管理数据库.docx》由会员分享,可在线阅读,更多相关《成绩管理数据库.docx(39页珍藏版)》请在冰豆网上搜索。

成绩管理数据库.docx

成绩管理数据库

 

1.设有一数据库

GradeManager(成绩管理),包括四个表:

学生表(

Student)、课程表

(Course)、班级表(Class)以及成绩表(Grade)。

四个表的结构如图2-4所示,数据

如图2-5所示。

用SQL语句创建四个表。

Student

学生表

属性名

数据类型

可否为空

含义

Sno

Char(7)

学号(唯一)

Sname

VarChar(20)

学生姓名

Ssex

Char

(2)

性别

Sage

Smallint

年龄

Clno

Char(5)

学生所在班级

 

useGradeManager

go

create

table

Student

(学号char(7)

primary

key,

姓名nchar(4)

not

null,

性别nchar

(1)

not

null,

年龄smallint

班级char(5)notnull

Go

 

Course课程表

属性名

Cno

Cname

Credit

数据类型

Char

(1)

VarChar(20)

Smallint

可否为空

含义

课程号(唯一)

课程名称

学分

use

GradeManager

go

createtableCourse

(课程号char

(1)primary

课程名称varchar(20)not

学分smallint

 

key,

null,

go

 

Class班级表

属性名

数据类型

可否为空

含义

Clno

Char(5)

班级号(唯一)

Speciality

VarChar(20)

班级所在专业

Inyear

Char(4)

入校年份

Number

Integer

班级人数

Monitor

Char(7)

班长学号

 

useGradeManager

go

create

table

Class

(班级号char

(5)

primary

key,

专业varchar

(20)

not

null,

入学年份

char

(4)

notnull,

班级人数

integer

班长学号

char

(7)

Go

 

Grade成绩表

属性名

数据类型

可否为空

含义

Sno

Char(7)

学号

Cno

Char

(1)

课程号

Gmark

Decimal(4,1)

成绩

use

GradeManager

go

createtable

(学号char(7)

课程号char

(1)

成绩decimal(

Grade

not

not

4,1)

 

null,

null,

go

 

图2-4成绩管理数据库中的表结构

 

Student学生表

Sno

Sname

Ssex

Sage

Clno

2000101

李勇

20

00311

2000102

刘诗晨

19

00311

2000103

王一鸣

20

00312

2000104

张婷婷

21

00312

2001101

李勇敏

19

01311

2001102

贾向东

22

01311

2001103

陈宝玉

20

01311

2001104

张逸凡

21

01311

Course课程表

Cno

Cname

Credit

1

数据库

4

2

离散数学

3

3

管理信息系统

2

4

操作系统

4

 

5

数据结构

4

6

数据处理

2

7

C语言

4

 

Class班级表

Clno

Speciality

Inyear

Number

Monitor

00311

计算机软件

2000

89

2000101

00312

计算机应用

2000

68

2000103

01311

计算机软件

2001

98

2001103

 

Grade成绩表

Sno

Cno

Gmark

2000101

1

92

2000101

3

88

2000101

5

86

2000102

1

78

2000102

6

55

2000103

3

65

2000103

6

78

2000103

5

66

2000104

1

54

2000104

6

83

2001101

2

70

2001101

4

65

2001102

2

80

2001102

4

90

2001102

6

83

2001103

4

76

2001103

6

56

 

图2-5成绩管理数据库中的数据

 

加入完整性约束说明,如图3-6所示,请用SQL语句完成图中约束的说明。

Student学生表

属性名

数据类型

可否为空

含义

完整性约束

Sno

Char(7)

学号

主码

Sname

VarChar(20)

学生姓名

Ssex

Char

(2)

性别

男或女,默认为男

Sage

Smallint

年龄

大于14,小于65

Clno

Char(5)

学生所在班级

外部码,级联

useGradeManager

go

 

altertableStudent

addconstraintPK_Student

primarykey(学号)

go

--添加主键约束

altertableStudent

addconstraintDF_sexdefault('男')for性别

go

--添加默认值,默认性别为男

altertableStudent

addconstraintck_xingbiecheck(性别='男'or性别='女')

go

--添加check约束,指定性别输入为男或女

alter

table

student

add

constraint

ck_nianling

check(年龄between14and65);

go

--添加check约束,指定年龄输入范围是14~65

alter

table

Student

add

constraint

FK_class_student

foreignkey

(班级)

References

Class(班级号)

--添加外键约束

ondeletecascade

--指定为级联删除

go

Course课程表

 

属性名数据类型可否为空含义完整性约束

CnoChar

(1)否课程号主码

CnameVarChar(20)否课程名称

CreditSmallint可学分1、2、3、4、5、6之一

useGradeManager

go

altertableCourse

addconstraintPK_Courseprimarykey(课程号)

go

--为课程号添加主键

altertableCourse

addconstraintck_Coursecheck(学分='1'or学分='2'or学分='3'or学分='4'

or学分='5'or学分='6')

go

--添加check约束,指定学分只能为1,2,3,4,5,6

Class班级表

属性名数据类型可否为空含义完整性约束

 

Clno

Char(5)

班级号

主码

Speciality

VarChar(20)

班级所在专业

Inyear

Char(4)

入校年份

Number

Integer

班级人数

大于1,小于100

Monitor

Char(7)

班长学号

外部码

use

GradeManager

go

alter

table

class

add

constraint

CK_banjirenshu

check

(班级人数>1and班级人数<100)

go

--添加check约束,指定班级人数为

1~100

alter

table

Class

add

constraint

FK_Student_Class

foreign

key

(班长学号)

References

Student

(学号)

go

--添加外键,在

class

表的【班长学号】字段列上添加一个名为

FK_Student_Class

的外

键约束,该外键参照

Student表的主键字段列【学号】

Grade成绩表

属性名

数据类型

可否为空

含义

完整性约束

Sno

Char(7)

学号

主属性,外部码,级联

Cno

Char

(1)

课程号

主属性,外部码,级联

Gmark

Decimal(4,1)

成绩

大于0,小于100`

use

GradeManager

go

alter

table

grade

add

constraint

FK_Student_Grade

foreign

key

(学号)

References

Student

(学号)

--添加外键,在grade

表的【学号】字段列上添加一个名为FK_Student_grade

的外键约束,

该外键参照

Student

表的主键字段列【学号】

on

delete

cascade

--指定为级联删除

go

alter

table

grade

addconstraint

FK_Course_Grade

foreign

key

(课程号)

References

Course

(课程号)

--添加外键,在

grade

表的【课程号】字段列上添加一个名为FK_Course_grade

的外键约

束,该外键参照Course表的主键字段列【课程号】

ondeletecascade

--指定为级联删除

go

altertableGrade

 

addconstraintCK_chengjicheck(成绩>=0and成绩<=100)

go

--添加check约束,指定成绩范围为0~100

 

图3-6加了约束说明后的表结构

1.针对以上四个表,用SQL语言完成以下各项操作:

①给学生表增加一属性Nation(民族),数据类型为Varchar(20);useGradeManager

go

altertablestudent

add民族varchar(20)null

go

--使用add可以添加新列

②删除学生表中新增的属性Nation;useGradeManager

go

altertablestudent

dropcolumn民族go

 

--使用drop删除列

③向成绩表中插入记录(”2001110”,”3”,80);

useGradeManager

go

insert

intoStudent

values

('2001110'

'李四','男','20',

'01311')

go

--添加该记录是为了能使下一条记录顺利添加,因为

grade

表的【学号】字段列上含

外键约束,该外键参照

Student

表的主键字段列【学号】

为了保证数据的完整性,

Student

表中因含有'2001110'

记录的一行数据。

insert

Grade

values

('2001110'

'3','80'

go

--使用insert[into]

添加一条记录

④修改学号为”2001110”的学生的成绩为70

分;

useGradeManager

go

updateGrade

set成绩=70

where学号=2001110

go

--使用update修改一条记录

⑤删除学号为”2001110”的学生的成绩记录;

useGradeManager

go

 

deletefromGrade

where学号=2001110

go

--使用delete语句删除一条记录

2.针对以上四个表,用SQL语言完成以下各项查询:

1.找出所有被学生选修了的课程号;

useGradeManager

go

selectdistinct课程号fromGrade

go

--从grade表中查询出所用被学生选修的课程号(grade表为成绩表,被选修的课程

必须有成绩,所以从该表中查询),distinct关键字用来删除重复行。

2.找出01311班女学生的个人信息;useGradeManager

go

select*

fromStudent

where班级=01311and性别='女'

go

3.找出01311班、01312班的学生姓名、性别、出生日期、当前时间;useGradeManager

go

select姓名,性别,出生日期=YEAR(GETDATE())-年龄,YEAR(GETDATE())as

前时间

fromStudent

where班级=01311or班级=01312

go

--YEAR(GETDATE())函数用来获得当前的年份。

3.找出所有姓李的学生的个人信息;

useGradeManager

go

select*

fromStudent

where姓名like'李%'

go

--使用like进行模糊查询;

语法为:

匹配表达式[not]like‘匹配模式串’;

用于匹配模式串的通配符有:

%百分号代表零个或多个任意字符串;

-下划线代表一个任意字符,双字节字符应对应两个下划线,如汉字;

[]方括号代表方括号中列出的或属于指定范围内的任何单一字符;

[^]括在方括号中的^代表不在方括号中列出或不属于指定范围内的任何单一字符;

4.找出学生李勇所在班级的学生人数;

useGradeManager

 

go

select班级人数

fromClassinnerjoinStudentonStudent.学号=class.班长学号

where姓名='李勇'

go

--使用innerjoin关键字实现内连接,内连接为系统默认的,所以inner可以省

略;

格式:

from<表名1>[inner]join<

<连接条件>可拆分为:

表名1.字段列名

表名2>on<连接条件>

1<运算符>表名2.字段列名2

运算符有:

=,!

=,>,>=,!

>,<,<=,!

<;

根据<运算符>分,又可以分为:

等值连接和非等值连接

select班级人数

from

where

Class,Student

Student.学号

 

=Class

 

.

 

班长学号

 

and

 

姓名='

 

李勇'

go

--不使用join关键字实现内连接

格式:

from<表名1>,<表名2>where<连接条件>

6.找出课程名为操作系统的平均成绩、最高分、最低分;useGradeManager

go

select

AVG(

成绩)

as平均成绩,

MAX(成绩)

as

最高分,MIN(成绩)as

最低分

from

Grade

inner

joinCourse

onCourse

.课程号=Grade.课程号

where

课程名称='操作系统'

go

--使用inner

join

的内连接

select

avg(

成绩)

as平均成绩,max(成绩)

as

最高分,min(成绩)as

最低分

from

grade,course

where

grade

.课程号=course.课程号and

course

.课程名称='操作系统'

go

--不使用inner

join

的内连接

7.找出选修了课程的学生人数;useGradeManager

go

selectcount(distinct学号)

fromGrade

go

--distinct用来删除重复的记录

8.找出选修了课程操作系统的学生人数;useGradeManager

go

select

from

COUNT(distinct

Gradeinnerjoin

学号)Course

as

选修操作系统的学生人数

onCourse.课程号=Grade

 

.课程号

where

课程名称

='

操作系统

'

go

 

--使用内连接完成

useGradeManager

go

selectCOUNT(学号)as选修操作系统的学生人数

fromStudent

where学号in

(select学号

fromGrade

where课程号in

(select课程号

fromCourse

where课程名称='操作系统')

Go

--使用嵌套查询完成,最后一个select语句用来查询课程名称为操作系统的课程号,

第二个select语句用来查询该课程号对应的学号,而第一个select语句只是对查询出

的结果使用聚合函数统计出了数目。

9.找出2000级计算机软件班的成绩为空的学生姓名。

useGradeManager

go

select姓名

fromstudentinnerjoingradeonstudent.学号=grade.学号

innerjoinclassonclass.班级号=student.班级

whereclass.入学年份='2000'andclass.专业='计算机软件'andGrade.

成绩isnull

go

--使用多个join实现多表连接查询。

4.针对以上四个表,用SELECT的嵌套查询完成以下各项查询:

①找出与李勇在同一个班级的学生信息;useGradeManager

go

select*fromstudentwhere班级in

(select班级fromStudentwhere姓名='李勇')

go

②找出所有与学生李勇有相同选修课程的学生信息;

useGradeManager

go

select

*fromstudent

where

学号in

(select

学号from

Grade

where

课程号in

(select

课程号from

Grade

where

学号in

(select

学号from

Student

where

姓名='李勇')))

go

③找出年龄介于学生李勇和

25岁之间的学生信息;

useGradeManager

 

go

select

*from

Student

where

年龄>(select

年龄

from

Student

where

姓名='

李勇')and

年龄<25

go

④找出选修了课程操作系统的学生学号和姓名;

useGradeManager

go

select

(select

(select

学号,姓名fromstudentwhere学号

学号fromGradewhere课程号in

课程号fromCoursewhere课程名称

in

 

='

 

操作系统

 

'))

go

⑤找出所有没有选修1号课程的学生姓名;

useGradeManager

go

select

select

姓名

学号

from

from

studentgrade

wher

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 自我管理与提升

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1