数据库
实验一:
- 要求在本地磁盘D创建一个学生-课程数据库(名称为student),只有一个数据文件和日志文件,文件名称分别为stu和stu_log,物理名称为stu_data.mdf 和stu_log.ldf,初始大小都为3MB,增长方式分别为10%和1MB,数据文件最大为500MB,日志文件大小不受限制。
1 | CREATE DATABASE student |
-
创建一个Company数据库,该数据库的主数据文件逻辑名称为Company_data,物理文件为Company.mdf,初始大小为10MB,最大尺寸为无限大,增长速度为10%;数据库的日志文件逻辑名称为Company_log,物理文件名为Company.ldf,初始大小为1MB,最大尺寸为50MB,增长速度为1MB。
1 | CREATE DATABASE Company |
-
创建数据库DB,具有2个数据文件,文件逻辑名分别为DB_data1和DB_data2,文件初始大小均为5MB,最大为100MB,按10%增长;只有一个日志文件,初始大小为3MB,按10%增长;所有文件都存储在D盘文件夹ceshi中。
1 | create database DB |
注:先在D盘新建一个 ceshi 文件夹
-
在数据库student中增加数据文件db2,初始大小为10MB,最大大小为50 MB,按10%增长;
1 | ALTER DATABASE student |
-
在数据库student中添加日志文件,保存在D盘中,初始大小为1MB,最大无限制,增长方式按照1MB增长;
1 | ALTER DATABASE student |
-
修改数据库student主数据文件的大小,将主数据文件的初始大小修改为10Mb,增长方式为20%;
1 | ALTER DATABASE student |
-
修改数据库student辅助数据文件初始大小为3MB,最大为100MB,按照10%增长,名称为db2;
1 | ALTER DATABASE student |
报错原因:不能被收缩
-
删除数据库student辅助数据文件和第二个日志文件;
1 | ALTER DATABASE student |
-
删除数据库company和DB。
1 | DROP DATABASE company |
实验二
请分别使用Management Stuio及T-SQL完成以下内容:
-
请在指定数据库内完成以下内容:
1) 依据数据表的结构创建相对应的数据表,表结构如下所示;
学生信息表(student)
字段名称 | 字段类型及长度 | 说明 | 备注 |
---|---|---|---|
Sno | Char(9) | 学生学号 | 主关键字 |
Sname | Char(6) | 学生姓名 | 非空 |
Ssex | Char(2) | 学生性别 | 可为空 |
Sage | Int | 学生年龄 | 可为空 |
Sdept | VarChar(8) | 学生所在院系 | 可为空 |
课程信息表(course)
字段名称 | 字段类型及长度 | 说明 | 备注 |
---|---|---|---|
Cno | Char(4) | 课程编号 | 主关键字 |
Cname | VarChar(20) | 课程名称 | 非空 |
Cpno | Char(4) | 先行课 | 可为空 |
Ccredit | Int | 学分 | 可为空 |
选课信息表(sc)
字段名称 | 字段类型及长度 | 说明 | 备注 |
---|---|---|---|
Sno | Char(9) | 学生学号 | 主关键字 |
Cno | Char(4) | 课程编号 | 主关键字 |
Grade | Int | 成绩 | 可为空 |
1 | create table Student ( |
2) 在表student中增加新字段 “班级名称(sclass)”;
1 | Alter table student add sclass VarChar(20) |
3) 在表student中删除字段“班级名称(sclass)”;
1 | Alter table student drop column sclass |
4) 修改表student中字段名为“sname”的字段长度由原来的6改为8;
1 | Alter table student alter column Sname char(8) |
5) 修改表student中字段“sdept”名称为“dept”,长度为20;
1 | Alter table student drop column Sdept |
6) 修改表student中sage字段名称为sbirth,类型为smalldatetime;
1 | Alter table student drop column Sage |
7) 修改表student新名称为stu_info;
1 | exec sp_rename'student','stu_info' |
8) 删除数据表student;
1 | drop table student |
注:改名了还如何删除?
1 | drop table stu_info |
真实删除
2、创建教师授课管理数据库JSSK,并完成以下内容;
1) 在数据库JSSK中创建下列三张表;
表名:teachers
列名 | 数据类型 | 说明 | 描述 |
---|---|---|---|
Tno | 字符型,长度7 | 主键 | 教师号 |
Tname | 字符型,长度10 | 非空 | 姓名 |
Tsex | 字符型,长度2 | 默认取值为“男” | 性别 |
Birthday | 小日期时间型 | 允许空 | 出生日期 |
Dept | 字符型,长度20 | 允许空 | 所在部门 |
Sid | 字符型,长度18 | 身份证号 |
表名: lessons
列名 | 数据类型 | 说明 | 描述 |
---|---|---|---|
Cno | 字符型,长度10 | 主键 | 课程号 |
Cname | 字符型,长度20 | 非空 | 课程名 |
Credit | 短整型 | 学分 | |
property | 字符型,长度为10 | 课程性质 |
表名: shouke
列名 | 数据类型 | 说明 | 描述 |
---|---|---|---|
Tno | 字符型,长度7 | 主键 | 教师号 |
Cno | 字符型,长度10 | 主键 | 课程名 |
Hours | 整数 | 课时 |
1 | create database JSSK |
2) 在shouke表里添加一个授课类别字段,列名为Type,类型为Char,长度为4;
1 | Alter table shouke add Type char(4) |
3) 将shouke表的Hours的类型改为smallint;
1 | Alter table shouke alter column Hours smallint |
4) 删除lessons表中的property列;
1 | Alter table lessons drop column property |
实验三
以课本指定的数据库为例,并依据数据表的结构创建相对应的数据表(student、course、sc),请分别使用Management Stuio界面方式及T-SQL 语句实现进行以下操作:
1 | create table Student ( |
预备:预建表格
-
向各个数据表中插入如下记录:
*学生信息表(student)
Sno | Sname | Ssex | Sage | Sdept |
---|---|---|---|---|
200515001 | 赵菁菁 | 女 | 23 | CS |
200515002 | 李勇 | 男 | 20 | CS |
200515003 | 张力 | 男 | 19 | CS |
200515004 | 张衡 | 男 | 18 | IS |
200515005 | 张向东 | 男 | 20 | IS |
200515006 | 张向丽 | 女 | 20 | IS |
200515007 | 王芳 | 女 | 20 | CS |
200515008 | 王民生 | 男 | 25 | MA |
200515009 | 王小民 | 女 | 18 | MA |
200515010 | 李晨 | 女 | 22 | MA |
200515011 | 张毅 | 男 | 20 | WM |
200515012 | 杨磊 | 女 | 20 | EN |
200515013 | 李晨 | 女 | 19 | MA |
200515014 | 张丰毅 | 男 | 22 | CS |
200515015 | 李蕾 | 女 | 21 | EN |
200515016 | 刘社 | 男 | 21 | CM |
200515017 | 刘星耀 | 男 | 18 | CM |
200515018 | 李贵 | 男 | 19 | EN |
200515019 | 林自许 | 男 | 20 | WM |
200515020 | 马翔 | 男 | 21 | |
200515021 | 刘峰 | 男 | 25 | CS |
200515022 | 牛站强 | 男 | 22 | |
200515023 | 李婷婷 | 女 | 18 | |
200515024 | 严丽 | 女 | 20 | |
200515025 | 朱小鸥 | 女 | 30 | WM |
课程信息表(course)
Cno | Cname | Cpno | Ccredit |
---|---|---|---|
1 | 数据库 | 5 | 4 |
2 | 数学 | 2 | |
3 | 信息系统 | 1 | 4 |
4 | 操作系统 | 6 | 3 |
5 | 数据结构 | 7 | 4 |
6 | 数据处理 | 2 | |
7 | PASCAL语言 | 6 | 4 |
8 | 大学英语 | 4 | |
9 | 计算机网络 | 4 | |
10 | 人工智能 | 2 |
选课信息表(sc)
Sno | Cno | Grade |
---|---|---|
200515001 | 1 | 75 |
200515002 | 1 | 85 |
200515002 | 3 | 53 |
200515003 | 1 | 86 |
200515004 | 1 | 74 |
200515005 | 1 | 58 |
200515006 | 1 | 84 |
200515004 | 2 | 46 |
200515005 | 2 | 89 |
200515006 | 2 | 65 |
200515008 | 2 | 72 |
200515009 | 2 | 76 |
200515010 | 2 | 96 |
200515010 | 8 | 86 |
200515011 | 8 | 62 |
200515015 | 8 | 0 |
200515018 | 8 | 58 |
200515001 | 4 | 62 |
200515002 | 4 | 85 |
200515021 | 9 | 54 |
200515001 | 5 | 58 |
200515021 | 6 | 58 |
200515001 | 7 | 70 |
200515005 | 10 | 65 |
200515016 | 8 | Null |
200515017 | 8 | Null |
1 | insert into student values('200515001','赵菁菁' ,'女',23,'CS') |
-
修改CS系姓名为“李勇”的学生姓名为“李咏”;
1 | update student |
-
修改课程“数据处理”的学分为3学分;
1 | update course set Ccredit=3 |
-
将选修课程“1”的同学成绩加5分;
1 | update sc set Grade=Grade+5 |
-
将选修课程“大学英语”的同学成绩加5分;
1 | update sc set Grade = Grade+5 |
-
将学号为“200515010”的学生信息重新设置为“王丹丹、女、20、MA”;
1 | update student set Sname = '王丹丹',Ssex='女',Sage=20,Sdept='MA' |
-
向student表中增加记录:(200515026,王婧婧、女、21,CS);
1 | insert into student values(200515026,'王婧婧','女',21,'CS') |
-
删除数据表student中无系别的学生记录;
1 | delete from student |
-
删除数据表student中计算机系年龄大于25的男同学的记录;
1 | delete from student |
原因:数据表student中无计算机系年龄大于25的男同学
(惊了,计算机专业居然没有大蜀黍)
-
删除数据表course中学分低于1学分的课程信息;
1 | delete from course |
原因:数据表course中无学分低于1学分的课程
实验四
1、在学生选课库(如下3个表)中,用Transact-SQL语句实现下列简单数据查询操作。
1 | create table Student ( |
预备:预建表格
Student表
学号Snum | 姓名Sname | 性别Sex | 年龄Sage | 电话Sphone | 系编号Dnum |
---|---|---|---|---|---|
S001 | 王明 | 男 | 19 | 86824571 | D2 |
S002 | 李勇 | 男 | 23 | 89454321 | D3 |
S003 | 刘燕 | 女 | 21 | D1 | |
S004 | 王萍 | 女 | 23 | D1 | |
S005 | 王佳 | 男 | 24 | 13098765892 | D3 |
S006 | 赵婷 | 女 | 20 | D1 |
SC表
学号Snum | 课程号Cnum | 成绩Score |
---|---|---|
S001 | C1 | 83 |
S001 | C2 | 89 |
S001 | C3 | 65 |
S001 | C4 | 85 |
S001 | C5 | 69 |
S002 | C3 | 78 |
S002 | C4 | 75 |
S005 | C1 | 95 |
S004 | C1 | 85 |
S005 | C1 | 92 |
S005 | C3 | 76 |
Course表
课程号Cnum | 课程名称Cname | 学分Cfreq |
---|---|---|
C1 | 数据库系统原理 | 4 |
C2 | C程序设计 | 4 |
C3 | 计算机体系结构 | 3 |
C4 | 自动控制原理 | 2 |
C5 | 数据结构 | 4 |
1 | insert into Student(Snum,Sname,Sex,Sage,Sphone,Dnum) |
插入信息
注:有一行重复键无法输入plus:这是老师您的良苦用心嘛:)
plus+:不能用excel表格导入的原因
微软自家的SQL连自家的Excel2019都导入不了(是不是废了?:)
怪我版本号高喽~
-
查询系编号为‘D2’学生的基本信息(学号、姓名、性别、年龄)。
1 | select *from Student --查询全部列 |
-
查询学号为S006的学生的姓名。
1 | select Sname from Student |
-
查询成绩在60-85之间的学生的学号。
1 | select Snum from SC |
(当然,后面的题目告诉我这里不必要用DISTINCT:)
-
查询所有姓王,并且姓名为两个字的学生的信息。
1 | SELECT *FROM Student |
-
查询选修课程号为‘C1’且成绩非空的学生学号和成绩,成绩按150分制输出(每个成绩乘以系数1.5)。
1 | SELECT Snum,Score*1.5 FROM SC |
-
查询有选课记录的所有学生的学号,用DISTINCT限制结果中学号不重复。
1 | select DISTINCT Snum from SC |
-
查询选修课程‘C1’的学生学号和成绩,结果按成绩的升序排列,如果成绩相同则按学号的降序排列。
1 | select Snum,Score from SC |
2、以数据库原理实验三数据库中数据为基础,请使用T-SQL 语句实现以下操作:
-
列出所有不姓刘的所有学生;
1 | SELECT Sname FROM Student |
-
列出姓“沈”且全名为3个汉字的学生;
1 | SELECT Sname FROM Student |
空
-
显示在1985年以后出生的学生的基本信息;
1 | SELECT *FROM student |
-
按照“性别、学号、姓名、年龄、院系”的顺序列出学生信息,其中性别按以下规定显示:性别为男显示为男 生,性别为女显示为女 生,其他显示为“条件不明”;
1 | SELECT |
-
查询出课程名含有“数据”字串的所有课程基本信息;
1 | SELECT *FROM course |
-
显示学号第八位或者第九位是1、2、3、4或者9的学生的学号、姓名、性别、年龄及院系;
1 | SELECT Sno,Sname,Ssex,Year(GETDATE())-Sage FROM student --Year(GETDATE()) 现在的年份 |
-
列出选修了‘1’课程的学生,按成绩的降序排列;
1 | SELECT *FROM sc |
-
列出同时选修“1”号课程和“2”号课程的所有学生的学号;
1 | SELECT Sno FROM sc |
-
列出课程表中全部信息,按先修课的升序排列;
1 | SELECT *FROM course |
-
列出年龄超过平均值的所有学生名单,按年龄的降序显示;
1 | SELECT Sname,Sage FROM student |
-
按照出生年份升序显示所有学生的学号、姓名、性别、出生年份及院系,在结果集中列标题分别指定为“学号,姓名,性别,出生年份,院系”;
1 | SELECT Sno as '学号',Sname as '姓名',Ssex,Year(getDate())-Sage as '出生年份',Sdept as '院系' FROM student |
-
显示所有院系(要求不能重复,不包括空值),并在结果集中增加一列字段“院系规模”,其中若该院系人数>=5则该字段值为“规模很大”,若该院系人数大于等于4小于5则该字段值为“规模一般”, 若该院系人数大于等于2小于4则该字段值为“规模稍小”,否则显示“规模很小”;
1 | select Sdept,院系规模=( |
-
按照课程号、成绩降序显示课程成绩在70-80之间的学生的学号、课程号及成绩;
1 | SELECT *FROM sc |
-
显示学生信息表中的学生总人数及平均年龄,在结果集中列标题分别指定为“学生总人数,平均年龄”;
1 | SELECT count(Sno) as '学生总人数',avg(Sage) as '平均年龄' FROM student |
-
显示选修的课程数大于3的各个学生的选修课程数;
1 | SELECT Sno,count(Cno) as '选修课程数' FROM sc |
-
按课程号降序显示选修各个课程的总人数、最高成绩、最低成绩及平均成绩;
1 | SELECT count(Sno)as '课程总人数',max(Grade) as '最高成绩',min(Grade) as '最低成绩',avg(Grade) '平均成绩' from sc |
选做题:
-
显示平均成绩大于“200515001”学生平均成绩的各个学生的学号、平均成绩;
1 | SELECT Sno,avg(Grade) as 平均成绩 FROM sc |
-
显示选修各个课程的及格的人数;
1 | SELECT Cno, |
-
显示选修最多的课程数和最少的课程数;
1 | SELECT Sno '选修课程数最多的学号' FROM sc |
-
显示各个院系男女生人数,其中在结果集中列标题分别指定为“院系名称、男生人数、女生人数”;
1 | SELECT Sdept,'男生人数'= |
-
列出有二门以上课程(含两门)不及格的学生的学号及该学生的平均成绩;
1 | SELECT Sno'学生的学号',AVG(Grade)'平均成绩' |
实验五
1、以数据库原理实验四——学生选课库中,用Transact-SQL语句实现下列简单数据查询操作。
-
查询选修了计算机体系结构的学生的基本信息。
1 | select * from student |
-
查询年龄比李勇小的学生的学号和成绩。
1 | select student.Snum,Score from student,sc |
-
查询其他系中比系编号为‘D1’的学生中年龄最小者要大的学生的信息。
1 | select * from Student |
-
查询其他系中比系编号为‘D3’的学生年龄都大的学生的姓名。
1 | select Sname from Student |
-
查询‘C1’课程的成绩高于70的学生姓名。
1 | select Sname from Student,SC |
-
查询‘C1’课程的成绩不高于70的学生姓名。
1 | select Sname from Student |
-
查询没有选修的学生姓名。
1 | select Sname from Student |
-
查询学校开设的课程总数。
1 | select count(*) from SC |
-
查询选修两门及两门以上课程的学生姓名。
1 | select Sname from Student,SC |
-
查询开设的课程和选修该课程的学生的总成绩、平均成绩、最高成绩和最低成绩。
1 | select Cnum,sum(Score) '总成绩',avg(Score) '平均成绩',max(Score) '最高成绩',min(Score) '最低成绩' from sc |
2、以数据库原理实验四数据为基础,请使用T-SQL 语句实现进行以下操作:
-
查询以‘DB_’开头,且倒数第3个字符为‘s’的课程的详细情况;
1 | select * from course |
-
查询名字中第2个字为‘阳’的学生姓名和学号及选修的课程号、课程名;
1 | select Sname,student.Sno,course.Cno,Cname from student,course,SC |
-
列出选修了‘数学’或者‘大学英语’的学生学号、姓名、所在院系、选修课程号及成绩;
1 | select student.Sno,sname,Sdept,Cno,Grade from student,sc |
-
查询缺少成绩的所有学生的详细情况;
1 | select student.* from student,SC |
-
查询与‘张力’(假设姓名唯一)年龄不同的所有学生的信息;
1 | select * from student |
-
查询所选课程的平均成绩大于张力的平均成绩的学生学号、姓名及平均成绩;
1 | select student.Sno,Sname,平均成绩=AVG(Grade) from student,sc |
-
按照“学号,姓名,所在院系,已修学分”的顺序列出学生学分的获得情况。其中已修学分为考试已经及格的课程学分之和;
1 | select student.Sno,Sname,Sdept,'已修学分'=SUM(Ccredit) from student,course,sc |
-
列出只选修一门课程的学生的学号、姓名、院系及成绩;
1 | select student.Sno,Sname,Sdept,Grade from sc,student |
-
查询选修“数据库”或“数据结构”课程的学生的基本信息;
1 | select student.sno,sname,Ssex,Sage,Sdept |
选修了“数据库”或“数据结构”课程,选择了其他课程不可以入选
-
列出所有课程被选修的详细情况,包括课程号、课程名、学号、姓名及成绩;
1 | select course.Cno,Cname,student.Sno,Sname,Grade from student,sc,course |
-
查询只被一名学生选修的课程的课程号、课程名;
1 | select sc.Cno,Cname from sc,course |
-
检索所学课程包含学生‘张向东’所学课程的学生学号、姓名;
1 | select distinct student.Sno,student.Sname from student,sc |
-
检索所学课程包含学生‘张向东’所学全部课程的学生学号、姓名;
1 | select distinct course.sno,sname from sc course,student |
-
使用嵌套查询列出选修了“数据结构”课程的学生学号和姓名;
1 | select Sno,Sname from student |
-
使用嵌套查询查询其它系中年龄小于CS系的某个学生的学生姓名、年龄和院系;
1 | select 姓名=Sname,年龄=Sage,院系=Sdept from student |
-
使用ANY、ALL 查询,列出其他院系中比CS系所有学生年龄小的学生;
1 | select Sname,Sage from Student |
-
分别使用连接查询和嵌套查询,列出与‘张力’在一个院系的学生的信息;
1 | select first.* from student first,student second |
-
使用集合查询列出CS系的学生以及性别为女的学生名单;
1 | select Sname from student |
-
使用集合查询列出CS系的学生与年龄不大于19岁的学生的交集、差集;
1 | select *from student |
-
使用集合查询列出选修课程1的学生集合与选修课程2的学生集合的交集;
1 | select sno from sc |
实验六
以系统管理员身份登录到SQL Server服务器,在SQL Server2005界面中实现以下操作;
-
在当前计算机中增加一个用户zhang和cheng,密码为secret。使此用户通过winows nt模式下登录SQL Server服务器,登录名分别为zhang和cheng;
| | |
| | |
-
新建以混合模式登录SQL Server服务器的用户登录名为stu1、stu2和stu3,登录密码为secret,默认登录数据库为stu;
-
将帐号zhang添加为数据库stu的用户,用户名为zhang;
1 | create user zhang for login [LAPTOP-0LH877B2\zhang] |
-
在数据库stu中创建用户stu1、stu2和stu3,登录帐号分别为stu1、stu2和stu3;
1 | create user stu1 for login stu1 |
-
给数据库用户zhang赋予创建数据库的权限;
1 | grant create database to zhang |
或者
-
给数据库用户stu1赋予对sc表进行插入、修改、删除操作权限;
1 | grant insert,alter,delete on sc to stu1 |
-
给数据库用户stu2和stu3赋予对student表、course表所有操作权限及查询sc的操作权限,并允许再授权给其他用户;
1 | grant all PRIVILEGES on student to stu2,stu3 |
-
收回数据库用户stu2对student表和course表的删除操作的权限;
1 | revoke delete on student to stu2 cascade |
-
若一个小组共5个成员,他们对数据库stu具有相同的操作权限,具体权限如下:
1 | create role small_group |
1)对于student、course表只能进行数据查询;
1 | grant select on student to small_group |
2)只能对student表中sname进行更改;
1 | grant update on student(sname) to small_group |
3)对于sc表只能进行修改、删除或插入;
1 | grant update,delete,insert on sc to small_group |
实验七
没有图片是因为我也是从网上获取
以系统管理员身份登录到SQL Server服务器,并使用T-SQL语句实现以下操作;
-
请用至少2种方法定义stu数据库中student表的主键sno;
1 | create table student( |
-
将数据库stu的表course的cno字段定义为主键,约束名称为cno_pk;
1 | alter table course |
-
为表course中的字段cname添加唯一值约束;
1 | alter table course |
-
将数据库stu的表sc的sno及cno字段组合定义为主键,约束名称为sc_pk;
1 | alter table sc |
-
对于数据表sc的sno、cno字段定义为外码,使之与表student的主码sno及表course的主码cno对应,实现如下参照完整性:
1)删除student表中记录的同时删除sc表中与该记录sno字段值相同的记录;
1 | alter table sc |
2)修改student表某记录的sno时,若sc表中与该字段值对应的有若干条记录,则拒绝修改;
3)修改course表cno字段值时,该字段在sc表中的对应值也应修改;
4)删除course表一条记录时,若该字段在在sc表中存在,则删除该字段对应的记录;
5)向sc表添加记录时,如果该记录的sno字段的值在student中不存在,则拒绝插入;
-
定义check约束,要求学生学号sno必须为9位数字字符,且不能以0开头,第二三位皆为0;
1 | alter table student |
-
定义stu数据库中student表中学生年龄值在16-25范围内;
1 | alter table student |
-
定义stu数据库中student表中学生姓名长度在2-8之间;
1 | alter table student |
-
定义stu数据库中student表中学生性别列中只能输入“男”或“女”;
1 | alter table student |
-
定义stu数据库student表中学生年龄值默认值为20;
1 | alter table student |
-
修改student表学生的年龄值约束可以为15-30范围内;
1 | alter table student |
-
删除上述唯一值约束、外键约束及check约束;
1 | alter table student |