SQL_Server_SQL实验与练习题参考答案
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
选课日期
参考答案:
USE test
GO
CREATE TABLEcouse
(
cs_idnVarChar(4)NOT NULL,
st_idnVarChar(9)NOT NULL,
scoreintNULL,
sltdatedatetimeNULL
)
GO
操作2.4:创建院系信息表:
表名:dept
说明:院系信息表
3.
操作2.8:删除“dept”表
参考答案:
DROP TABLE student
4.
操作2.9:分别向“student”表、“couse”表、“slt_couse”表、“dept”表中输入数据记录
实验
1
操作3.1:将student表中的st_sex列属性更改为NOT NULL
参考答案:
ALTER TABLE studentALTER COLUME st_nm nVarChar(8) NOT NULL
参考答案:
CREATE RULE rl_sexAS @chksex’男’OR@chksex=’女’
或
CREATE RULE rl_sexAS @chksex IN (’男’,’女’)
GO
EXEC sp_bindrule rl_sex, 'student.st_sex'
GO
EXEC sp_unbindrule 'student.st_sex'
cs_scintNULL
)
GO
操作2.3:创建选课表:
表名:slt_couse
说明:选课表
属性列
数据类型
长度
空值
列约束
说明
cs_id
nVarChar
4
Not Null
FK
课程编号
st_id
nVarChar
9
Not Null
FK
学生编号
score
int
Null
课程成绩
sltdate
datetime
Null
20
Not Null
课程名称
cs_tm
int
Null
课程学时
cs_sc
int
Null
课程学分
参考答案:
USE test
GO
CREATE TABLEcouse
(
cs_idnVarChar(4)primary key NOT NULL,
cs_nmnVarChar(20)NOT NULL,
cs_tmintNULL,
DELETE FROMslt_couseWHEREcs_id='1234'ANDst_id='070201001'
操作4.9:删除couse表记录,将课程号为1234的记录删除
DELETE FROMcouseWHEREcs_id='1234'
实验
(1)查询表中所有的列
操作5.1:查询所有系的信息
SELECT * FROMdept
参考答案:
create database Test
ON primary
(
name = test_data,
filename = 'd:\test\test_data.mdf',
size = 5MB,
maxsize = unlimited,
filegrowth = 1MB
)
LOG ON
(
name = test_log,
参考答案:
CREATE DEFAULT df_today ASGetdate( )
GO
EXEC sp_bindefault df_today, 'slt_couse.sltdate'
GO
EXEC sp_unbindefault 'slt_couse.sltdate'
GO
DROP DEFAULT df_today
(2)查询表中指定列的信息
操作5.2:查询所有的课程号与课程名称
SELECTcs_id,cs_nm FROMcouse
(3)在查询列表中使用列表达式
操作5.3:在查询student表时使用列表达式:入学成绩+400
SELECT st_id,st_nm,st_score,st_score+400AS new_score
(
操作2.6:修改“dept”表的“dp_count”列数据类型为int
参考答案:
ALTER TABLEdeptALTER COLUMNdp_countintNULL
(
操作2.7:删除“dept”表的“dp_count”列
参考答案:
ALTER TABLEdeptDROP COLUMNdp_count
st_ fromnVarChar(20)NULL,
st_dpidnVarChar(2)NULL,
st_ mnttinyintNULL
)
GO
操作2.2:创建课程信息表:
表名:couse
说明:课程信息表
属性列
数据类型
长度
空值
列约束
说明
cs_id
nVarChar
4
Not Null
PK
课程编号
cs_nm
nVarChar
FROM student
(4)重新命名查询结果
操作5.4:使用AS关键字为dept表中属性指定列名:系号、系名、系主任、联系电话
SELECTdp_id AS系号,dp_nm AS系名,dp_drtAS系主任,dp_telAS联系电话
FROMdept
操作5.5:使用"="号为couse表中属性指定列名:课程号、课程名、学时(=cs_sc*16)、学分
实验
1.创建数据库:
操作1.1:创建一个test数据库,其主数据文件逻辑名test_data,物理文件名test_data.mdf,初始大小10MB,最大尺寸为无限大,增长速度1MB;数据库日志文件逻辑名称为test_log,物理文件名为test_log.ldf,初始大小为1MB,最大尺寸为5MB,增长速度为10%。
FROMdept
(6)查询列表中使用系统函数
操作5.7:显示所有学生的学号、姓名、性别和入学年份
SELECT st_id, st_nm, st_sex,DATEPART(yy,st_birth) AS入学年份
FROM student
操作5.8:显示所有学生学号、姓名、性别和班级(学号前6位)
SELECT st_id, st_nm, st_sex,LEFT(st_id, 6) AS班级
操作4.3:向couse表插入一条记录,课程号1234,课程名为操作系统,其余字段为NULL或默认值
INSERT INTOcouse(cs_id,cs_nm)VALUES ('1234', '操作系统')
操作4.4:向slt_couse表插入一条记录,课程号1234,学名070201001,其余字段为NULL或默认值
8.标识列
操作3.8:向slt_couse表中添加标识列id,第1行默认值为1,相邻两个标识列间的增量为1
参考答案:
ALTER TABLEslt_couseADD id INT IDENTITY(1,1) NOT NULL
9.外键(
操作3.9:被参照表为dept,参照表为student
参考答案:
ALTER TABLE student
filename = 'd:\test\test_log.ldf',
size = 1MB,
maxsize = 5MB,
filegrowth = 10%
)
GO
2.查看数据库属性:
操作1.2:使用T-SQL语句查看数据库test属性
参考答案:
EXEC sp_helpdb test
3.删除数据库:
操作1.3:使用T-SQL语句删除数据库test
INSERT INTOslt_couse(cs_id, st_id)VALUES ('1234', '070201001')
2.
操作4.5:修改student表记录,将王小五的入学成绩改为88
UPDATE student SET st_score=88WHERE st_nm='王小五'
操作4.6:修改couse表记录,将所有记录的学分改为4,学时改为64
GO
DROP RULE rl_sex
GO
6.
操作3.6:将dept表中的dp_id列设置为主键
参考答案:
ALTER TABLE deptADDPRIMARYKEY (dp_id)
7.唯一性约束
操作3.7:将dept表中的dp_nm列设置为唯一性约束
参考答案:
ALTER TABLEdeptADD UNIQUE (dp_nm)
2
操作3.2:将student表中的st_from列默认值设置为“陕西省”
参考答案:
ALTER TABLE studentADD DEFAULT '陕西省' FORst_from
3
操作3.3:创建默认值对象df_today为当前日期,并将其绑定到slt_couse表中的sltdate列,然后取消绑定,最后删除默认值对象df_today。
属性列
数据类型
长度
空值
列约束
说明
dp_id
nVarChar
2
Not Null
系编号
dp_nm
nVarChar
20
Not Null
院系名称
dp_drt
nVarChar
8
Null
院系主任
dt_tel
nVarChar
12
Null
联系电话
参考答案:
USE test
GO
CREATE TABLE dept
(
dp_idnVarChar(2)NOT NULL,
参考答案:
drop databຫໍສະໝຸດ Baiduse Test
实验
1.创建表:
操作2.1:创建学生表:
表名:student
说明:学生基本信息表
属性列
数据类型
长度
空值
列约束
说明
st_id
nVarChar
9
Not Null
PK
学生学号
st_nm
nVarChar
8
Not Null
学生姓名
st_sex
nVarChar
2
Null
GO
CREATE TABLE student
(
st_idnVarChar(9)primary keyNOT NULL,
st_nmnVarChar(8)NOT NULL,
st_sexnVarChar(2)NULL,
st_birthdatetimeNULL,
st_scoreintNULL,
st_datedatetimeNULL,
SELECT课程号=cs_id,课程名=cs_nm,学分=cs_sc,学时=cs_sc*16
FROMcouse
(5)增加说明列
操作5.6:查询dept表的系号、系名和系主任,向查询结果中插入说明列:系号、系名和系主任
SELECT '系号:', st_id, '系名:', st_nm,'系主任:', st_drt
学生性别
st_birth
datetime
Null
出生日期
st_score
int
Null
入学成绩
st_date
datetime
Null
入学日期
st_from
nChar
20
Null
学生来源
st_dpid
nVarChar
2
Null
所在系编号
st_mnt
tinyint
Null
学生职务
参考答案:
USE test
ADD FOREIGN KEY (st_dpid)REFERENCESdept(dp_id)
实验
1.
操作4.1:向dept表插入一条记录,系号11,系名自动控制系,系主任为李其余,电话81234567
INSERT INTOdeptVALUES('11', '自动控制系','李其余','81234567')
dp_nmnVarChar(20)NOT NULL,
dp_drtnVarChar(8)NULL,
dp_telnVarChar(12)NULL
)
GO
2.修改表结构:
(
操作2.5:为“dept”表添加“dp_count”列(数据类型为nvarchar,长度为3,允许为空)
参考答案:
ALTER TABLEdeptADDdp_countnvarchar(3) NULL
GO
4
操作3.4:将slt_couse表中的score列的检查约束设置为>=0且<=100
参考答案:
ALTER TABLEslt_couseADD CHECK (score>=0 AND score<=100)
5.
操作3.5:创建规则约束对象rl_sex,用于检查性别的取值仅限于“男”和“女”,并将其绑定到student表中的st_sex列,然后取消绑定,最后删除规则约束对象rl_sex。
UPDATEcouseSETcs_tm=64,cs_sc=4
操作4.7:修改slt_couse表记录,将课程号为1234,学名为070201001的记录的成绩改为77
UPDATEslt_couseSETscore=77WHEREcs_id='1234'ANDst_id='070201001'
3.
操作4.8:删除slt_couse表记录,将课程号为1234,学名为070201001的记录删除
操作4.2:向student表插入一条记录,学号070201001,姓名为王小五,性别为男,出生日期为1990年9月9日,系号为11,其余字段为NULL或默认值
INSERT INTO student(st_id, st_nm, st_sex, st_birth, st_dpid)
VALUES ('070201001', '王小五', '男', '1990.9.9','11')
参考答案:
USE test
GO
CREATE TABLEcouse
(
cs_idnVarChar(4)NOT NULL,
st_idnVarChar(9)NOT NULL,
scoreintNULL,
sltdatedatetimeNULL
)
GO
操作2.4:创建院系信息表:
表名:dept
说明:院系信息表
3.
操作2.8:删除“dept”表
参考答案:
DROP TABLE student
4.
操作2.9:分别向“student”表、“couse”表、“slt_couse”表、“dept”表中输入数据记录
实验
1
操作3.1:将student表中的st_sex列属性更改为NOT NULL
参考答案:
ALTER TABLE studentALTER COLUME st_nm nVarChar(8) NOT NULL
参考答案:
CREATE RULE rl_sexAS @chksex’男’OR@chksex=’女’
或
CREATE RULE rl_sexAS @chksex IN (’男’,’女’)
GO
EXEC sp_bindrule rl_sex, 'student.st_sex'
GO
EXEC sp_unbindrule 'student.st_sex'
cs_scintNULL
)
GO
操作2.3:创建选课表:
表名:slt_couse
说明:选课表
属性列
数据类型
长度
空值
列约束
说明
cs_id
nVarChar
4
Not Null
FK
课程编号
st_id
nVarChar
9
Not Null
FK
学生编号
score
int
Null
课程成绩
sltdate
datetime
Null
20
Not Null
课程名称
cs_tm
int
Null
课程学时
cs_sc
int
Null
课程学分
参考答案:
USE test
GO
CREATE TABLEcouse
(
cs_idnVarChar(4)primary key NOT NULL,
cs_nmnVarChar(20)NOT NULL,
cs_tmintNULL,
DELETE FROMslt_couseWHEREcs_id='1234'ANDst_id='070201001'
操作4.9:删除couse表记录,将课程号为1234的记录删除
DELETE FROMcouseWHEREcs_id='1234'
实验
(1)查询表中所有的列
操作5.1:查询所有系的信息
SELECT * FROMdept
参考答案:
create database Test
ON primary
(
name = test_data,
filename = 'd:\test\test_data.mdf',
size = 5MB,
maxsize = unlimited,
filegrowth = 1MB
)
LOG ON
(
name = test_log,
参考答案:
CREATE DEFAULT df_today ASGetdate( )
GO
EXEC sp_bindefault df_today, 'slt_couse.sltdate'
GO
EXEC sp_unbindefault 'slt_couse.sltdate'
GO
DROP DEFAULT df_today
(2)查询表中指定列的信息
操作5.2:查询所有的课程号与课程名称
SELECTcs_id,cs_nm FROMcouse
(3)在查询列表中使用列表达式
操作5.3:在查询student表时使用列表达式:入学成绩+400
SELECT st_id,st_nm,st_score,st_score+400AS new_score
(
操作2.6:修改“dept”表的“dp_count”列数据类型为int
参考答案:
ALTER TABLEdeptALTER COLUMNdp_countintNULL
(
操作2.7:删除“dept”表的“dp_count”列
参考答案:
ALTER TABLEdeptDROP COLUMNdp_count
st_ fromnVarChar(20)NULL,
st_dpidnVarChar(2)NULL,
st_ mnttinyintNULL
)
GO
操作2.2:创建课程信息表:
表名:couse
说明:课程信息表
属性列
数据类型
长度
空值
列约束
说明
cs_id
nVarChar
4
Not Null
PK
课程编号
cs_nm
nVarChar
FROM student
(4)重新命名查询结果
操作5.4:使用AS关键字为dept表中属性指定列名:系号、系名、系主任、联系电话
SELECTdp_id AS系号,dp_nm AS系名,dp_drtAS系主任,dp_telAS联系电话
FROMdept
操作5.5:使用"="号为couse表中属性指定列名:课程号、课程名、学时(=cs_sc*16)、学分
实验
1.创建数据库:
操作1.1:创建一个test数据库,其主数据文件逻辑名test_data,物理文件名test_data.mdf,初始大小10MB,最大尺寸为无限大,增长速度1MB;数据库日志文件逻辑名称为test_log,物理文件名为test_log.ldf,初始大小为1MB,最大尺寸为5MB,增长速度为10%。
FROMdept
(6)查询列表中使用系统函数
操作5.7:显示所有学生的学号、姓名、性别和入学年份
SELECT st_id, st_nm, st_sex,DATEPART(yy,st_birth) AS入学年份
FROM student
操作5.8:显示所有学生学号、姓名、性别和班级(学号前6位)
SELECT st_id, st_nm, st_sex,LEFT(st_id, 6) AS班级
操作4.3:向couse表插入一条记录,课程号1234,课程名为操作系统,其余字段为NULL或默认值
INSERT INTOcouse(cs_id,cs_nm)VALUES ('1234', '操作系统')
操作4.4:向slt_couse表插入一条记录,课程号1234,学名070201001,其余字段为NULL或默认值
8.标识列
操作3.8:向slt_couse表中添加标识列id,第1行默认值为1,相邻两个标识列间的增量为1
参考答案:
ALTER TABLEslt_couseADD id INT IDENTITY(1,1) NOT NULL
9.外键(
操作3.9:被参照表为dept,参照表为student
参考答案:
ALTER TABLE student
filename = 'd:\test\test_log.ldf',
size = 1MB,
maxsize = 5MB,
filegrowth = 10%
)
GO
2.查看数据库属性:
操作1.2:使用T-SQL语句查看数据库test属性
参考答案:
EXEC sp_helpdb test
3.删除数据库:
操作1.3:使用T-SQL语句删除数据库test
INSERT INTOslt_couse(cs_id, st_id)VALUES ('1234', '070201001')
2.
操作4.5:修改student表记录,将王小五的入学成绩改为88
UPDATE student SET st_score=88WHERE st_nm='王小五'
操作4.6:修改couse表记录,将所有记录的学分改为4,学时改为64
GO
DROP RULE rl_sex
GO
6.
操作3.6:将dept表中的dp_id列设置为主键
参考答案:
ALTER TABLE deptADDPRIMARYKEY (dp_id)
7.唯一性约束
操作3.7:将dept表中的dp_nm列设置为唯一性约束
参考答案:
ALTER TABLEdeptADD UNIQUE (dp_nm)
2
操作3.2:将student表中的st_from列默认值设置为“陕西省”
参考答案:
ALTER TABLE studentADD DEFAULT '陕西省' FORst_from
3
操作3.3:创建默认值对象df_today为当前日期,并将其绑定到slt_couse表中的sltdate列,然后取消绑定,最后删除默认值对象df_today。
属性列
数据类型
长度
空值
列约束
说明
dp_id
nVarChar
2
Not Null
系编号
dp_nm
nVarChar
20
Not Null
院系名称
dp_drt
nVarChar
8
Null
院系主任
dt_tel
nVarChar
12
Null
联系电话
参考答案:
USE test
GO
CREATE TABLE dept
(
dp_idnVarChar(2)NOT NULL,
参考答案:
drop databຫໍສະໝຸດ Baiduse Test
实验
1.创建表:
操作2.1:创建学生表:
表名:student
说明:学生基本信息表
属性列
数据类型
长度
空值
列约束
说明
st_id
nVarChar
9
Not Null
PK
学生学号
st_nm
nVarChar
8
Not Null
学生姓名
st_sex
nVarChar
2
Null
GO
CREATE TABLE student
(
st_idnVarChar(9)primary keyNOT NULL,
st_nmnVarChar(8)NOT NULL,
st_sexnVarChar(2)NULL,
st_birthdatetimeNULL,
st_scoreintNULL,
st_datedatetimeNULL,
SELECT课程号=cs_id,课程名=cs_nm,学分=cs_sc,学时=cs_sc*16
FROMcouse
(5)增加说明列
操作5.6:查询dept表的系号、系名和系主任,向查询结果中插入说明列:系号、系名和系主任
SELECT '系号:', st_id, '系名:', st_nm,'系主任:', st_drt
学生性别
st_birth
datetime
Null
出生日期
st_score
int
Null
入学成绩
st_date
datetime
Null
入学日期
st_from
nChar
20
Null
学生来源
st_dpid
nVarChar
2
Null
所在系编号
st_mnt
tinyint
Null
学生职务
参考答案:
USE test
ADD FOREIGN KEY (st_dpid)REFERENCESdept(dp_id)
实验
1.
操作4.1:向dept表插入一条记录,系号11,系名自动控制系,系主任为李其余,电话81234567
INSERT INTOdeptVALUES('11', '自动控制系','李其余','81234567')
dp_nmnVarChar(20)NOT NULL,
dp_drtnVarChar(8)NULL,
dp_telnVarChar(12)NULL
)
GO
2.修改表结构:
(
操作2.5:为“dept”表添加“dp_count”列(数据类型为nvarchar,长度为3,允许为空)
参考答案:
ALTER TABLEdeptADDdp_countnvarchar(3) NULL
GO
4
操作3.4:将slt_couse表中的score列的检查约束设置为>=0且<=100
参考答案:
ALTER TABLEslt_couseADD CHECK (score>=0 AND score<=100)
5.
操作3.5:创建规则约束对象rl_sex,用于检查性别的取值仅限于“男”和“女”,并将其绑定到student表中的st_sex列,然后取消绑定,最后删除规则约束对象rl_sex。
UPDATEcouseSETcs_tm=64,cs_sc=4
操作4.7:修改slt_couse表记录,将课程号为1234,学名为070201001的记录的成绩改为77
UPDATEslt_couseSETscore=77WHEREcs_id='1234'ANDst_id='070201001'
3.
操作4.8:删除slt_couse表记录,将课程号为1234,学名为070201001的记录删除
操作4.2:向student表插入一条记录,学号070201001,姓名为王小五,性别为男,出生日期为1990年9月9日,系号为11,其余字段为NULL或默认值
INSERT INTO student(st_id, st_nm, st_sex, st_birth, st_dpid)
VALUES ('070201001', '王小五', '男', '1990.9.9','11')