首页 > 数据库 >数据库系统原理-实验一

数据库系统原理-实验一

时间:2023-05-26 23:55:16浏览次数:40  
标签:grade sno SQL course 实验 cno sc 原理 数据库系统

一、实验目的:

掌握使用 SQL 语言进行数据定义和数据操纵的方法。

二、实验要求:

建立一个数据库 stumanage,建立三个关系表 student,course,sc。向表中插入 数据,然后对数据进行删除、修改等操作,对关系、数据库进行删除操作。

三、实验步骤:

1、 开始→程序→Microsoft SQL Server→SQL Server Management Stdio。

2、 在“连接到服务器”对话框中,选择“Windows 身份验证”,点击“连接”,进 入SQL Server Management Stdio操作界面。采用如下两种方式之一建立数据库。

3、 在“对象资源管理器”中右击“数据库”,在“新建数据库”对话框中输入数 据库名称 stumanage,设置数据库文件初始大小为 5M,限制文件增长 50M, 日志文件初始大小设为 2M,限制文件增长 5M,并更改文件存储路径。

4、 单击“新建查询”按钮,在 SQL 查询窗口中输入 SQL 语句,建立数据库 stumanage。然后单击工具栏上“执行”按钮(红色叹号)。下部的空白区显示 该语句的运行情况,将建立数据库的 SQL 语句写入实验报告。

以下为实验中的操作以及相应的sql 语句:

(1)在 SQL Server 中创建一个名为 `stumanage` 的数据库,以及三个关系表 `student`、`course` 和 `sc`,可以使用以下 SQL 语句:

-- 创建数据库 stumanage

CREATE DATABASE stumanage;

-- 使用 stumanage 数据库

USE stumanage;

-- 创建 student 表

CREATE TABLE student (
id INT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
gender VARCHAR(10) NOT NULL,
age INT NOT NULL,
phone VARCHAR(20),
address VARCHAR(100)
);

-- 创建 course 表

CREATE TABLE course (
id INT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
credit INT NOT NULL,
teacher VARCHAR(50) NOT NULL
);

-- 创建 sc 表

CREATE TABLE sc (
id INT PRIMARY KEY,
student_id INT NOT NULL,
course_id INT NOT NULL,
score INT NOT NULL,
FOREIGN KEY (student_id) REFERENCES student(id),
FOREIGN KEY (course_id) REFERENCES course(id)
);

 `student` 表用于存储学生的信息,包括学生编号、姓名、性别、年龄、联系电话和家庭地址。
 `course` 表用于存储课程的信息,包括课程编号、课程名称、学分和课程教师。
 `sc` 表用于存储学生选课的信息,包括选课记录编号、学生编号、课程编号和成绩,同时建立了 `student_id` 和 `course_id` 两个外键约束,确保选课记录与学生、课程信息的一致性。

(2)在 `stumanage` 数据库中,建立表 `student`、`course` 和 `sc`,可以使用以下 SQL 语句:

1. 建立 `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
);

2. 建立 `course` 表:

CREATE TABLE course (
cno CHAR(6) NOT NULL PRIMARY KEY,
cname VARCHAR(20) NOT NULL
);

3. 建立 `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)
);

 `student` 表中使用学号 `sno` 作为主键,包括姓名 `sname`、性别 `sex`、所在系 `sdept` 等字段。
 `course` 表中使用课程号 `cno` 作为主键,包括课程名称 `cname` 等字段。
 `sc` 表中使用 `(sno, cno)` 作为联合主键,同时设定 `sno` 和 `cno` 两个外键约束,确保选课记录的一致性。`grade` 字段存储成绩信息。

(3)在 `student`、`course` 和 `sc` 表中插入数据,可以使用以下 SQL 语句:

1. 向 `student` 表中插入两条数据:

INSERT INTO student (sno, sname, sex, sdept) VALUES
('20050101', '王飞', '男', '计算机系'),
('20050102', '李丽', '女', '信息系');

2. 向 `course` 表中插入两条数据:

INSERT INTO course (cno, cname) VALUES
('01', '数据结构'),
('02', '数据库原理');

3. 向 `sc` 表中插入两条数据:

INSERT INTO sc (sno, cno, grade) VALUES
('20050101', '01', 70),
('20050102', '02', 90);

使用 `INSERT INTO` 语句向表中插入数据,语法格式为 `INSERT INTO table_name (column1, column2, column3,...) VALUES (value1, value2, value3,...)`。

(4)按课程求学生平均成绩,并将结果存入基本表

1.针对每一门课,对学生成绩求平均并将结果存入基本表。

SQL 语句:

SELECT cno, AVG(grade) AS avg_grade INTO grade_avg
FROM sc
GROUP BY cno;

- 使用 `SELECT INTO` 语句将查询结果存储到一个新表 `grade_avg` 中。
- `SELECT cno, AVG(grade) AS avg_grade` 表示选出课程号和平均成绩两个列的结果集。
- `AVG()` 是 SQL 中的聚合函数,用于计算某列的平均值。
- `GROUP BY cno` 表示按照课程号进行分组,计算每门课程的平均成绩。
- `INTO grade_avg` 表示将查询结果存储到 `grade_avg` 表中。

2. 修改某条记录的 grade 属性值为 85,并删除该记录

 

将 sc 表中 sno 为 20050102、cno 为 02 的记录的 grade 属性值改为 85,然后删除该条记录。

SQL 语句:

UPDATE sc SET grade = 85 WHERE sno = '20050102' AND cno = '02';
DELETE FROM sc WHERE sno = '20050102' AND cno = '02';

- `UPDATE sc SET grade = 85 WHERE sno = '20050102' AND cno = '02'` 用于将查询结果中 sno 和 cno 满足条件的记录的 grade 值修改为 85。
- `DELETE FROM sc WHERE sno = '20050102' AND cno = '02'` 用于删除查询结果中 sno 和 cno 满足条件的记录。

3. 修改‘数据库原理’课程的所有学生成绩为 0

SQL 语句:

UPDATE sc SET grade = 0 WHERE cno = '02';

- `UPDATE sc SET grade = 0 WHERE cno = '02'` 用于将查询结果中课程号为 02 的所有记录的 grade 值修改为 0。

4. 删除‘李丽’的所有选课情况。

SQL 语句:

DELETE FROM sc WHERE sno = '20050102';

- `DELETE FROM sc WHERE sno = '20050102'` 用于删除查询结果中 sno 为 20050102 的所有记录。

5. 删除数据库中的三个表中的所有数据

SQL 语句:

DELETE FROM sc;
DELETE FROM course;
DELETE FROM student;

- `DELETE FROM table` 用于删除表中所有数据。

6. 删除数据库中的三个表结构

SQL 语句:

DROP TABLE sc;
DROP TABLE course;
DROP TABLE student;

- `DROP TABLE table` 用于删除指定表的结构。

7. 删除数据库

SQL 语句:

DROP DATABASE stumanage;

- `DROP DATABASE database` 用于删除指定数据库。

标签:grade,sno,SQL,course,实验,cno,sc,原理,数据库系统
From: https://www.cnblogs.com/rsy-bxf150/p/17436108.html

相关文章

  • 实验六
    任务一#include<stdio.h>#include<string.h>#defineN3typedefstructstudent{intid;charname[20];charsubject[20];doubleperf;doublemid;doublefinal;......
  • 计算机组成原理之中央处理器(二)
    微程序这一章,感念比较多,注意好区分。微命令就是一个一个最小的控制信号,比如说三态门中的什么什么有效,总线中的什么什么有效,以及给ALU的什么运算类型等这些最小的信号就是微命令。相对来说,这两个概念就比较好理解了。微操作就是接受微命令后部件进行的操作,例如ALU接受命令后......
  • drf全局异常处理,接口文档,jwt介绍和原理,base64编码和解码
    drf全局异常处理:只要三大认证,视图类的方法出了异常,都会执行一个函数:rest_framework.viewsimportexception_handlersetting:REST_FRAMEWORK={'EXCEPTION_HANDLER':'app01.exception.commn_exception_handler',#导入自己写的异常类的路径}......
  • 实验六
    task4源代码#include<stdio.h>#include<string.h>#defineN100typedefstruct{charnum[10];//学号ints1;//期末成绩ints2;//平时成绩doublesum;//总评charlevel[10];//等级}ST......
  • 7、Hystrix 断路器执行原理
    断路器深入的工作原理1、如果经过断路器的流量超过了一定的阈值,HystrixCommandProperties.circuitBreakerRequestVolumeThreshold()举个例子,可能看起来是这样子的,要求在10s内,经过短路器的流量必须达到20个;在10s内,经过短路器的流量才10个,那么根本不会去判断要不要短路2、如果断......
  • 实验六
    实验任务1程序源码#include<stdio.h>#include<string.h>#defineN3typedefstructstudent{intid;charname[20];charsubject[20];doubleperf;doublemid;doublefinal;......
  • 4、深入分析hystrix执行时的8大流程步骤以及内部原理
    前面了解了Hystrix最基本的支持高可用的技术:资源隔离 + 限流。创建command;执行这个command;配置这个command对应的group和线程池。开始执行这个command,调用了这个command的execute()方法之后,Hystrix底层的执行流程和步骤以及原理是什么1、构建一个Hystri......
  • 实验6
    实验四#include<stdio.h>#include<string.h>#defineN100typedefstruct{charnum[10];//学号ints1;//期末成绩ints2;//平时成绩doublesum;//总评charlevel[10];//等级}STU;i......
  • 详解GaussDB(DWS)用户监控原理及应用
    摘要:本文将聚焦于用户监控的原理及应用进行介绍。本文分享自华为云社区《GaussDB(DWS)监控工具指南(二)用户级监控》,作者:幕后小黑爪。前言资源监控是整个运维乃至整个产品生命周期重要的一环,事前及时语句发现故障,事后提供详实的数据用于追查定位问题。GaussDB(DWS)整个资源监控......
  • 深度学习进阶篇-预训练模型[3]:XLNet、BERT、GPT,ELMO的区别优缺点,模型框架、一些Trick
    深度学习进阶篇-预训练模型[3]:XLNet、BERT、GPT,ELMO的区别优缺点,模型框架、一些Trick、TransformerEncoder等原理详细讲解1.XLNet:GeneralizedAutoregressivePretrainingforLanguageUnderstanding1.1.从AR和AE模型到XLNet模型自回归模型(AutoregressiveModel,AR),通过估计......