数据库实验——表/视图的创建与维护(完整版)by SixInNight

实验目的

  1. 通过进行数据库表的建立操作,熟悉并掌握 SQL SERVER 数据库表的建立方法,理解关系数据库表的结构,巩固 SQL 标准中关于数据库表的建立语句;
  2. 通过进行数据库表数据的增加、删除和插入等维护操作,熟悉并掌握 SQL SERVER 数据库数据的操作方法,巩固 SQL 中关于数据维护的语句;
  3. 通过对 SQL SERVER 中建立、维护视图的实验,熟悉 SQL SERVER 中对视图的操作方法和途径,理解和掌握视图的概念。

实验平台及环境

   采用 C/S 结构的企业版 SQL Server 2016 服务器及客户端;
   数据库存储在服务器上,表和视图也存储在服务器上,同学可同时
   搭建服务器和客户端,再使用客户端连接到服务器进行操作。

实验内容

   建立相应的表并熟悉基本操作,例如建表、对表进行增、删、改、查。

实验步骤

1. 创建相应的表(以建 BOOK 表为例)

2. 将提供的数据导入各表(以 CLASS 表为例)

( 注意:1)表中空列的处理;2)表结构与数据类型的匹配 )

3. 修改 “班级”表数据,增加名为“备注”的列,数据类型为 varchar() 型,且不为空

4. 修改 “班级”表数据,将 “备注”列的数据类型改为 int
5. 修改 “班级”表数据,删除“备注”列
6. 删除“班级”数据表


Transact_SQL 语句

1. 建立学生选课数据库并创建相应的表
DROP DATABASE IF EXISTS 学生选课
CREATE DATABASE 学生选课
ON PRIMARY(
	NAME = stu_data,
	FILENAME = 'D:\DATA\stu_data.mdf',
	SIZE = 20,
	FILEGROWTH = 1
)
LOG ON(
	NAME = stu_log,
	FILENAME = 'D:\DATA\stu_log.ldf',
	SIZE = 8,
	MAXSIZE = 1GB,
	FILEGROWTH = 10%
)
GO
USE 学生选课
DROP TABLE IF EXISTS BOOK
CREATE TABLE BOOK(
	教材ID号 VARCHAR(20) NOT NULL,
	教材名 VARCHAR(30) NOT NULL,
	出版社 VARCHAR(20) NOT NULL,
	作者 VARCHAR(20) NOT NULL,
	价格 MONEY NOT NULL
)
GO
DROP TABLE IF EXISTS COURSE
CREATE TABLE COURSE(
	课程号 VARCHAR(20) NOT NULL,
	课程名称 VARCHAR(30) NOT NULL,
	书号 VARCHAR(20) NOT NULL,
	课程总学时 INT NOT NULL,
	周学时 INT NOT NULL,
	课程学分 INT NOT NULL
)
GO
DROP TABLE IF EXISTS CLASS
CREATE TABLE CLASS(
	班级号 VARCHAR(20) NOT NULL,
	班主任姓名 VARCHAR(20) NOT NULL,
	教室 VARCHAR(20) NOT NULL,
	系编号 VARCHAR(20) NOT NULL
)
GO
DROP TABLE IF EXISTS CLASS_COURSE
CREATE TABLE CLASS_COURSE(
	班级号 VARCHAR(20) NOT NULL,
	课程号 VARCHAR(20) NOT NULL
)
GO
DROP TABLE IF EXISTS  DEPARTMENT
CREATE TABLE DEPARTMENT(
	部门ID号 VARCHAR(20) NOT NULL,
	部门名称 VARCHAR(20) NOT NULL,
	部门领导 VARCHAR(20) NOT NULL,
	教师数 INT NOT NULL
)
GO
DROP TABLE IF EXISTS STUDENT
CREATE TABLE STUDENT(
	学生ID号 VARCHAR(20) NOT NULL,
	学生姓名 VARCHAR(20) NOT NULL,
	班级ID号 VARCHAR(20) NOT NULL,
	性别 VARCHAR(20) NOT NULL,
	出生时间 VARCHAR(20) NOT NULL,
	入学日期 VARCHAR(20) NOT NULL,
	家庭住址 VARCHAR(40) NOT NULL
)
GO
DROP TABLE IF EXISTS STUDENT_COURSE
CREATE TABLE STUDENT_COURSE(
	课程ID号 VARCHAR(20) NOT NULL,
	学生ID号 VARCHAR(20) NOT NULL,
	分数 INT NOT NULL,
	学分 INT NOT NULL,
	学期 INT NOT NULL,
	学年 VARCHAR(20) NOT NULL
)
GO
DROP TABLE IF EXISTS TEACHER
CREATE TABLE TEACHER(
	教师ID号 VARCHAR(20) NOT NULL,
	教师姓名 VARCHAR(20) NOT NULL,
	性别 VARCHAR(20) NOT NULL,
	出生时间 VARCHAR(20) NOT NULL,
	部门ID号 VARCHAR(20) NOT NULL,
	职称或职业 VARCHAR(20) NOT NULL,
	联系电话 VARCHAR(20) NOT NULL,
	家庭地址 VARCHAR(40) NOT NULL,
	邮政编码 VARCHAR(20) NOT NULL,
	类别编号 INT NOT NULL
)
GO
DROP TABLE IF EXISTS TEACHER_COURSE_CLASS
CREATE TABLE TEACHER_COURSE_CLASS(
	教师编号 VARCHAR(20) NOT NULL,
	课程号 VARCHAR(20) NOT NULL,
	班级号 VARCHAR(20) NOT NULL,
	学期 INT NOT NULL,
	学年 VARCHAR(20) NOT NULL,
	排课标识 VARCHAR(20) NOT NULL,
	授课地点 VARCHAR(20) NOT NULL,
	教材编号 VARCHAR(20) NOT NULL
)
GO
DROP TABLE IF EXISTS 教师类别
CREATE TABLE 教师类别(
	类别编号 INT NOT NULL,
	类别名称 VARCHAR(20) NOT NULL
)
GO
2. 将提供的数据导入各表
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'Ad Hoc Distributed Queries', 1;
RECONFIGURE;
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1;
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1;
GO

INSERT INTO 学生选课.dbo.BOOK SELECT * FROM OPENROWSET(
	'MICROSOFT.ACE.OLEDB.12.0', 'Excel 5.0; User ID=Admin; Password=; HDR=YES; Database=D:\Downloads\实验平台\BOOK.xls', Sheet1$
)
GO
INSERT INTO 学生选课.dbo.COURSE SELECT * FROM OPENROWSET(
	'MICROSOFT.ACE.OLEDB.12.0', 'Excel 5.0; User ID=Admin; Password=; HDR=YES; Database=D:\Downloads\实验平台\COURSE.xls', Sheet1$
)
GO
INSERT INTO 学生选课.dbo.CLASS SELECT * FROM OPENROWSET(
	'MICROSOFT.ACE.OLEDB.12.0', 'Excel 5.0; User ID=Admin; Password=; HDR=YES; Database=D:\Downloads\实验平台\CLASS.xls', Sheet1$
)
GO
INSERT INTO 学生选课.dbo.CLASS_COURSE SELECT * FROM OPENROWSET(
	'MICROSOFT.ACE.OLEDB.12.0', 'Excel 5.0; User ID=Admin; Password=; HDR=YES; Database=D:\Downloads\实验平台\CLASS_COURSE.xls', Sheet1$
)
GO
INSERT INTO 学生选课.dbo.DEPARTMENT SELECT * FROM OPENROWSET(
	'MICROSOFT.ACE.OLEDB.12.0', 'Excel 5.0; User ID=Admin; Password=; HDR=YES; Database=D:\Downloads\实验平台\DEPARTMENT.xls', Sheet1$
)
GO
INSERT INTO 学生选课.dbo.STUDENT SELECT * FROM OPENROWSET(
	'MICROSOFT.ACE.OLEDB.12.0', 'Excel 5.0; User ID=Admin; Password=; HDR=YES; Database=D:\Downloads\实验平台\STUDENT.xls', Sheet1$
)
GO
INSERT INTO 学生选课.dbo.STUDENT_COURSE SELECT * FROM OPENROWSET(
	'MICROSOFT.ACE.OLEDB.12.0', 'Excel 5.0; User ID=Admin; Password=; HDR=YES; Database=D:\Downloads\实验平台\STUDENT_COURSE.xls', Sheet1$
)
GO
INSERT INTO 学生选课.dbo.TEACHER SELECT * FROM OPENROWSET(
	'MICROSOFT.ACE.OLEDB.12.0', 'Excel 5.0; User ID=Admin; Password=; HDR=YES; Database=D:\Downloads\实验平台\TEACHER.xls', Sheet1$
)
GO
INSERT INTO 学生选课.dbo.TEACHER_COURSE_CLASS SELECT * FROM OPENROWSET(
	'MICROSOFT.ACE.OLEDB.12.0', 'Excel 5.0; User ID=Admin; Password=; HDR=YES; Database=D:\Downloads\实验平台\TEACHER_COURSE_CLASS.xls', Sheet1$
)
GO
INSERT INTO 学生选课.dbo.教师类别 SELECT * FROM OPENROWSET(
	'MICROSOFT.ACE.OLEDB.12.0', 'Excel 5.0; User ID=Admin; Password=; HDR=YES; Database=D:\Downloads\实验平台\教师类别.xls', Sheet1$
)
GO

EXEC sp_configure 'Ad Hoc Distributed Queries', 0;
RECONFIGURE;
EXEC sp_configure 'show advanced options', 0;
RECONFIGURE;
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 0;
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 0;
GO
3. 修改 “班级”表数据,增加名为“备注”的列
USE 学生选课
ALTER TABLE CLASS ADD 备注 VARCHAR(40) NOT NULL DEFAULT 0;
GO
4. 修改 “班级”表数据,将 “备注”列的数据类型改为 int
USE 学生选课
ALTER TABLE CLASS DROP CONSTRAINT DF_CLASS_备注_2B3F6F97;
ALTER TABLE CLASS ALTER COLUMN 备注 INT;
GO
5. 修改 “班级”表数据,删除“备注”列
USE 学生选课
ALTER TABLE CLASS DROP COLUMN 备注;
GO
6. 删除“班级”数据表
USE 学生选课
DROP TABLE CLASS;
GO

实验结果及分析

  1. 分布式查询:使用(Transact-SQL)OPENROWSET 或 OPENDATASOURCE 函数直接从 Excel 文件导入 SQL Server
  2. 先启用 ad hoc distributed queries 服务器配置选项,然后再运行分布式查询:
    在这里插入图片描述
  3. 允许在进程中使用 ACE.OLEDB.12:
    在这里插入图片描述

本文后续内容查看方法

本文后续内容点击此处跳转 查看

  1. 从 Excel 文件导入 SQL Server 语句:
  2. 建表语句:
  3. 向表中添加列:
  4. 修改表中某列属性:
  5. 删除表中某列:

实验小结

本文后续内容点击此处跳转 查看

1. 开始→服务→右键 SQL SEVER(MSSQLSEVER)→属性→登录→本地系统账户
2. 卸载 32 位 Office
3. 设置 Microsoft.ACE.OLEDB.12.0 属性→所有访问接口选项均不启用
4. 到官网下载 AccessDatabaseEngine_X64.exe→安装
5. 执行导入表之前,务必关闭源数据所在的 Excel 表格
6. 修改表的某列属性时,需要先 DROP 影响该列的约束
  • 18
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、建立以下五个: 教师:Teacher,学生:Student, 课程:Course,选课:SC,授课:TC 二、完成以下查询: 1.查询成绩在80-90之间的记录。 2.查询至少4个同学选修的课程名。 3.查询其他系中比“信息系”所有学生年龄都大的学生名单及年龄,并按年龄降序输出: 4.查询与学生张建国同岁的所有学生的学号。姓名和系别。 5.查询选修了2门以上课程的学生名单。 6.查询至少有一门与“张建国”选课相同的学生的姓名,课程号,系别 7.查询成绩比该课程平均成绩高的学生的成绩。 8.查询选课号为01001课程且成绩高于课程01002学生的姓名,此两门课的课程名和成绩。 9.查询所有没选修01001号课程的学生名单 10、查询每个同学各门课程的平均成绩和最高成绩,按降序输出姓名、平均成绩、最高成绩; 11、查询所有学生都选修了的课程号和课程名; 12、查询选修了991102号学生选修了的课程的学生学号和姓名。 三、使用SQL创建视图,修改记录 1.创建成绩视图SCORE_VIEW,包含学号sno,姓名sn,课程名cn,成绩score; 2.创建一个计算机系学生名单视图S_VIEW,包含学号sno,姓名sn,性别sex; 3.通过上面的视图,修改学号为991102,课程号01001的成绩记录; 4,创建一个视图,计算机系学生的成绩单score_view_CDEPT,包含学号sno,姓名sn,课程名cn,成绩score
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值