sqlserver01(使用篇从新建数据库开始)
先说一下我们要完成的如下(我放在代码块里了
1.在“对象资源管理器”中右击“数据库”,在“新建数据库”对话框中输入数 据库名称 stumanage,设置数据库文件初始大小为 5M,限制文件增长 50M, 日志文件初始大小设为 2M,限制文件增长 5M,并更改文件存储路径。 2、单击“新建查询”按钮,在 SQL 查询窗口中输入 SQL 语句,建立数据库 stumanage。然后单击工具栏上“执行”按钮(红色叹号)。下部的空白区显示 该语句的运行情况,将建立数据库的 SQL 语句写入实验报告。(注:以下操作 均在上部的空白区输入 SQL 语句,单击执行后,下部的空白区显示该语句的 运行情况。) 3、在 stumanage 数据库中,如下图建立表 student: 列名 数据类型 允许空 主键 说明 1 sno Char(8) 否 是 学号 2 sname Varchar(20) 是 否 姓名 3 sex Char(2) 是 否 性别 4 sdept Varchar(20) 是 否 所在系 如下图建立表:course 列名 数据类型 允许空 主键 说明 1 cno Char(6) 否 是 课程号 2 cname Varchar(20) 是 否 课程名 如下图建立表 sc:(注:包括两个外键,sno 和 cno 共同组成主键) 2 列名 数据类型 允许空 主键 外键 说明 1 sno Char(8) 否 是 students(sno) 学号 2 cno Char(6) 否 是 course(cno) 课程号 3 grade int 否 否 否 成绩 4、将三条建表语句写入实验报告。 5、在 student 表中插入两条数据: (1)20050101,王飞,男,计算机系 (2)20050102,李丽,女,信息系 6、在 course 表中插入两条数据: (1)01,数据结构 (2)02,数据库原理 7、在 sc 表中插入两条数据: (1)20050101,01,70 (2)20050102,02,90 8、将此八条 SQL 语句写入实验报告。 9、对每一门课,求学生的平均成绩,并把结果以基本表的形式存入数据库。将操 作命令和所用 SQL 语句写入实验报告。 10、修改 sc 表中 sno 为 20050102、cno 为 02 的记录的 grade 属性值为 85,然后将 该条记录删除。将此两条 SQL 语句写入实验报告。 11、修改‘数据库原理’课程的所有学生成绩为 0。将此条 SQL 语句写入实验报告。 12、删除‘李丽’的所有选课情况。将此条 SQL 语句写入实验报告。 13、删除数据库中的三个表中的所有数据,将所用 SQL 语句写入实验报告。 14、删除数据库中的三个表结构。将所用 SQL 语句写入实验报告。 15、删除数据库,将所用语句写入实验报告。
1.新建数据库(这里我们选择1方法新建数据库,2我没有尝试)
CREATE DATABASE stumanage ON PRIMARY ( NAME = stumanage_data, FILENAME = 'C:\Path\To\Data\stumanage_data.mdf', SIZE = 5MB, MAXSIZE = 50MB, FILEGROWTH = 5MB ) LOG ON ( NAME = stumanage_log, FILENAME = 'C:\Path\To\Log\stumanage_log.ldf', SIZE = 2MB, MAXSIZE = 5MB, FILEGROWTH = 1MB );
我们根据第一步的要求做出如下更改
我们创建完成之后可以看到如下图
3.我们的建表语句如下(右键stumanage新建查询-》输入如下语句-》运行)
-- 创建 student 表 CREATE TABLE student ( sno CHAR(8) NOT NULL PRIMARY KEY, sname VARCHAR(20) NOT NULL, sex CHAR(2) NOT NULL, sdept VARCHAR(20) NOT NULL ); -- 创建 course 表 CREATE TABLE course ( cno CHAR(6) NOT NULL PRIMARY KEY, cname VARCHAR(20) NOT NULL ); -- 创建 sc 表 CREATE TABLE sc ( sno CHAR(8) NOT NULL, cno CHAR(6) NOT NULL, grade INT NOT NULL, PRIMARY KEY (sno, cno), FOREIGN KEY (sno) REFERENCES student(sno), FOREIGN KEY (cno) REFERENCES course(cno) );
我们看一下建成功的图片
5,6,7的语句如下
-- 在 student 表中插入两条数据 INSERT INTO student (sno, sname, sex, sdept) VALUES ('20050101', '王飞', '男', '计算机系'), ('20050102', '李丽', '女', '信息系'); -- 在 course 表中插入两条数据 INSERT INTO course (cno, cname) VALUES ('01', '数据结构'), ('02', '数据库原理'); -- 在 sc 表中插入两条数据 INSERT INTO sc (sno, cno, grade) VALUES ('20050101', '01', 70), ('20050102', '02', 90);
我们看一下插入预计成功后的样子(这里我们连接的navicat方便查看,因为我再SQLQuery里面没有找到插入数据的内容咋哪里查看,如果可以找到就不用连接了,连接的我也有写方法在后面的篇章里面sqlserver连接navicat)
9.对每一门课,求学生的平均成绩,并把结果以基本表的形式存入数据库。语句如下
首先新建一个存储的 表:
CREATE TABLE course_avg_scores (
cno CHAR(6) NOT NULL PRIMARY KEY,
average_grade DECIMAL(5, 2)
);
-- 计算每门课程的平均成绩并插入到course_avg_scores表中
INSERT INTO course_avg_scores (cno, average_grade)
SELECT cno, AVG(grade) AS average_grade
FROM sc
GROUP BY cno;
让我们看一下插入后的效果
10修改 sc 表中 sno 为 20050102、cno 为 02 的记录的 grade 属性值为 85,然后将
该条记录删除。
-- 修改 sc 表中 sno 为 20050102、cno 为 02 的记录的 grade 属性值为 85 UPDATE sc SET grade = 85 WHERE sno = '20050102' AND cno = '02'; -- 删除 sc 表中 sno 为 20050102、cno 为 02 的记录 DELETE FROM sc WHERE sno = '20050102' AND cno = '02';
为了看清楚效果这里先展示之前的sc表
这里是执行完语句之后的(一语句执行后)
(二语句执行后)
11、修改‘数据库原理’课程的所有学生成绩为 0。
-- 确定“数据库原理”课程的 cno SELECT cno FROM course WHERE cname = '数据库原理'; -- 根据查询结果更新 sc 表中相应记录的 grade 为 0 -- 假设查询结果中的 cno 为 '01' UPDATE sc SET grade = 0 WHERE cno = '01';
我们看一下效果
12、删除‘李丽’的所有选课情况。
-- 查找“李丽”的 sno SELECT sno FROM student WHERE sname = '李丽'; -- 根据查询结果删除 sc 表中相应的选课记录 -- 查询结果中的 sno 为 '20050102' DELETE FROM sc WHERE sno = '20050102';
13、删除数据库中的三个表中的所有数据。
注:可以使用 DELETE
语句或者 TRUNCATE
语句。两者的区别是 DELETE
语句逐行删除数据,并且可以回滚(如果在事务中使用),而 TRUNCATE
语句则是直接清空表中的所有数据,无法回滚,且效率更高。
-- 清空 student 表中的所有数据 TRUNCATE TABLE student; -- 清空 course 表中的所有数据 TRUNCATE TABLE course; -- 清空 sc 表中的所有数据 TRUNCATE TABLE sc;
消息 4712,级别 16,状态 1,第 5 行 无法截断表 'student',因为该表正由 FOREIGN KEY 约束引用。
这里由于外键的原因student和course无法用TRUNCATE删除,用DELETE可以
14、删除数据库中的三个表结构。
-- 删除 sc 表 DROP TABLE IF EXISTS sc; -- 删除 student 表 DROP TABLE IF EXISTS student; -- 删除 course 表 DROP TABLE IF EXISTS course;
15、删除数据库。(这里记得要先关闭数据库)