数据库系统实验

news2024/11/18 3:34:15

一、数据库管理系统软件的使用

1、实验概要

        创建用于学生管理的数据库,数据库名为xsgl,包含学生的基本信息,课程信息和选课信息。数据库xsgl包含下列3个表:

  • student:学生基本信息;
  • course:课程信息表;
  • sc:学生选课表。

2、实验步骤

(1)建立xsgl数据库

  • 启动SQL Server Management Studio;
  • 选择树形菜单“数据库”,点击鼠标右键,出现弹出式菜单,选择新建数据库;
  • 分别设置数据库xsgl的属性,点击确定按钮,完成数据库的创建。

(2)建立student、course、sc表

  • 选择xsgl数据库树形菜单,选择表,在表逻辑对象中点击鼠标的右键,在弹出式菜单中选择新建表,启动表设计器;
  • 在表设计器中建立表结构,保存为student;
  • 继续按要求分别建立course表和sc表。

(3)在表中添加记录

  • 选择student表,按右键,选择“编辑前200行”,进入表中;
  • 输入学生表中的记录,一行数据输入完成后,单击下一行的行标记(有*号), 选定这一行,即完成输入;
  • 依次按相同方法建立course表和sc表,并输入其中的记录。

(4)修改表中的数据

        在表格中将相应的数据修改即可。

(5)删除表中的记录

        单击左边的行标记, 选定某一行, 或单击后拖动选择相邻的多行, 再右击鼠标选择弹出式菜单中的删除。

3、实验结果

4、问题分析

        SQL SERVER数据库主要由哪些逻辑对象组成?物理数据库文件包括哪些文件?

答: 逻辑对象包括表、视图、存储过程、函数等;物理数据库文件包括日志文件和数据文件:

  • 日志文件分为主要日志文件和次要日志文件LDF;
  • 数据文件分为主数据文件MDF和次要数据文件NDF。

二、数据库的建立和维护

1、实验概要

        创建学生管理数据库,数据库名为xsgl,包含学生的基本信息,课程信息和选课信息。数据库xsgl包含下列3个表:

  • student:学生基本信息;
  • course:课程信息表;
  • sc:学生选课表。

2、实验步骤

(1)建立数据库

        ① 启动SQL Server Management Studio,点击“新建查询”;

        ② 在SQL SERVER中,输入SQL语句:

CREATE DATABASE xsgl
ON (NAME='XSGL_DATA', FILENAME='E:\XSGL.MDF', SIZE=10MB, MAXSIZE=50MB, FILEGROWTH=5%)
LOG ON (NAME='XSGL_Log', FILENAME='e:\XSGL_Log.ldf', SIZE=2MB, MAXSIZE=5MB, FILEGROWTH=1MB)

        ③  点击“执行”,执行命令。

(2)建立数据表

use xsgl
Create table student(sno CHAR(10), sname CHAR(10), ssex CHAR(2), sage INT, sdept CHAR(4))
go
Create table course(cno	CHAR(3), cname CHAR(30), credit INT, pcno CHAR(3) NULL)
go
Create table sc(sno CHAR(10), cno CHAR(3), grade INT NULL)
go

(3)添加表数据

insert into student(sno,sname,ssex,sage,sdept) values('95001','李勇','男', 20,'CS') ......
insert into course(cno,cname,credit,pcno) values('1','数据库',4,'5') ......
insert into sc(sno,cno,grade) values('95001','1',92) ......

(4)修改表数据

        ① 将所有学生的年龄增加一岁:

update student set sage = sage + 1

        ② 将4号课程的学分改为4:

update course set credit = 4 where cno = 4

        ③ 设置7号课程没有先行课:

update course set pcno = null where cno = 7

        ④ 将95001号学生的1号课程的成绩增加3分:

update sc set grade = grade + 3 where sno = 95001 and cno = 1

(5)删除表数据

        ① 删除学号为95005的学生的记录:

delete from student where sno = 95005

        ② 删除所有的课程记录:

delete from course

        ③ 删除成绩为不及格(少于60分)的学生的选课记录:

delete from sc where grade < 60

3、实验结果

(1)添加数据

(2)修改数据

(3)删除数据

4、问题分析

        比较用可视化界面与命令方式在数据的插入、修改、删除方面的优缺点。

答:可视化界面,可以轻易上手,操作性高,不容易出错,设计工作量相对大,但因为现在的设计语言或工具都可以可视化,所以缺点不明显;命令方式,需要操作人员的熟练度,操作性差,容易出错;

三、数据库的简单查询和连接查询

1、实验概要

        通过操作数据库中的数据表,掌握简单查询操作和连接查询操作。

2、实验步骤

(1)单表查询

        ① 查询全体学生的学号和姓名

select sno, sname from student

        ② 查询全体学生的所有信息

select * from student
或 select sno, sname, ssex,sage, sdept from student

        ③ 查询全体学生的姓名, 出生年份,和所在系, 并用小写字母表示所有系名

select sname, '出生年份为: ', year(getdate()) - sage, lower(sdept) from student

        ④ 给上例的结果集指定列名

select sname, '出生年份为: '出生, year(getdate()) - sage 年份, lower(sdept) 系名from student

        ⑤ 查询选修了课程的学生的学号

select distinct sno from sc
比较:select sno from sc

        ⑥ 查询年龄在20岁以下的学生的姓名及其年龄

select sname, sage from student where sage < 20

        ⑦ 查询考试成绩有不及格的学生的学号

select distinct sno from sc where grade<60
比较:select sno from sc where grade < 60

        ⑧ 查询年龄在20-30岁直接的学生的姓名, 姓名, 所在系

select sname, ssex, sdept from student where sage between 20 and 30

        ⑨ 查询IS,CS,MA系的所有学生的姓名和性别

select sname, ssex from student where sdept in ('IS', 'MA','CS')

        ⑩ 查找所有姓’李’的学生的姓名, 学号和性别

select sname, sno, ssex from student where sname like '李%'
比较:将学生表中的’95001’号学生的姓名’李勇’改为’李勇勇’, 再执行:
select sname, sno, ssex from student where sname like '李_'

        ⑪ 查询没有先行课的课程的课程号cno和课程名cname

select cno, cname from course where pcno is null

(2)查询结果排序

        ① 查询选修了3号课程的学生的学号和成绩, 并按分数降序排列

select sno, grade from sc where cno = '3' order by grade DESC

        ② 查询全体学生的情况,查询结果按所在系号升序排列, 同一系中的学生按年龄降序排列

select * from student order by sdept ASC, sage DESC

(3)连接查询

        ① 查询每个学生及其选修课程的情况

select student.*, sc.* from student, sc where student.sno = sc.sno
比较:笛卡尔集: select student.*, sc.* from student, sc
比较:自然连接: select student.sno, sname, ssex, sdept, cno, grade from student, sc where student.sno = sc.sno

        ② 查询每一门课程的间接先行课(只求两层即先行课的先行课)

select First.cno, Second.pcno 间接先行课 from course First, course Second where First.pcno=Second.cno
比较:select First.cno, Second.pcno 间接先行课 from course First, course Second where First.pcno = Second.cno and Second.pcno is not null

        ③ 列出所有学生的基本情况和选课情况, 若没有选课,则只列出基本情况信息

select s.sno, sname, ssex, sdept, cno, grade from student s, sc sc where s.sno* = sc.sno

        ④ 查询每个学生的学号, 姓名, 选修的课程名和成绩

select S.sno, sname, cname, grade from student S, course C, sc SC where S.sno = SC.sno and C.cno = SC.cno

3、实验结果(部分)

4、问题分析

        如何求出不及格学生的学号, 姓名, 不及格的课程名以及成绩。

select sno, sname,cno, grade from student, sc where student.sno = sc.sno and grade < 60

四、数据库的嵌套查询实验

1、实验概要:

        使用IN、比较符、ANY或ALL和EXISTS操作符进行嵌套查询操作。

2、实验步骤:

(1)使用带IN谓词的子查询

        ① 查询与’刘晨’在同一个系学习的学生的信息

select * from student where sdept in (select sdept from student where sname = '刘晨')
比较:select * from student where sdept = (select sdept from student where sname = '刘晨')
比较:select * from student where sdept = (select sdept from student where sname = '刘晨') and sname <> '刘晨'
比较: select S1.* from student S1, student S2 where S1.sdept=S2.sdept and S2.sname = '刘晨'

        ② 查询选修了课程名为’信息系统’ 的学生的学号和姓名

select sno, sname from student where sno in (select sno from sc where cno in (select cno from course where cname = '信息系统'))

        ③ 查询选修了课程’1’和课程’2’的学生的学号

select sno from student where sno in (select sno from sc where cno = '1') and sno in (select sno from sc where cno = '2')
比较: 查询选修了课程’1’或课程’2’的学生的sno:
select sno from sc where cno = '1' or cno = '2'
比较:连接查询:
select A.sno from sc A, sc B where A.sno = B.sno and A.cno = '1' and B.cno = '2'

(2)使用带比较运算的子查询

        查询比’刘晨’年龄小的所有学生的信息

select * from student where sage < (select sage from student where sname = '刘晨')

(3) 使用带Any, All谓词的子查询

        ① 查询其他系中比信息系(IS)某一学生年龄小的学生姓名和年龄

select sname, sage from student where sage < Any (select sage from student where sdept = 'IS') and sdept <> 'IS'

        ② 查询其他系中比信息系(IS)学生年龄都小的学生姓名和年龄

select sname, sage from student where sage < ALL (select sage from student where sdept = 'IS') and sdept <> 'IS'

        ③ 查询与计算机系(CS)系所有学生的年龄均不同的学生学号, 姓名和年龄

select sno, sname, sage from student where sage <> all (select sage from student where sdept = 'CS')

(4)使用带Exists谓词的子查询和相关子查询

        ① 查询与其他所有学生年龄均不同的学生学号, 姓名和年龄

select sno, sname, sage from student A where not exists (select * from student B where A.sage = B.sage and A.sno <> B.sno)

        ② 查询所有选修了1号课程的学生姓名

select sname from student where exists (select * from sc where sno = student.sno and cno = '1')

        ③ 查询没有选修了1号课程的学生姓名

select sname from student where not exists (select * from sc where sno = student.sno and cno = '1')

        ④ 查询选修了全部课程的学生姓名

select sname from student where not exists (select * from course where not exists (select * from sc where sno = student.sno and cno = course.cno))

        ⑤ 查询至少选修了学生95002选修的全部课程的学生的学号

select distinct sno from sc A  where not exists (select * from sc B where sno = '95002'and not exists (select * from sc C where sno = A.sno and cno = B.cno))

        ⑥ 求没有人选修的课程号cno和cnamecname

select cno, cname from course C where not exists (select * from sc where sc.cno = C.cno )

        ⑦ 查询满足条件的(sno,cno)对, 其中该学号的学生没有选修该课程号cno的课程

select sno, cno from student, course where not exists (select * from sc where cno = course.cno and sno = student.sno)

        ⑧ 查询每个学生的课程成绩最高的成绩信息(sno,cno,grade)

select * from sc A where grade = (select max(grade) from sc where sno = A.sno)

3、实验结果(部分)

 

4、问题分析

        如何查询所有学生都选修了的课程的课程号cno?

select cou.cno from (select cno,count(*) as c_snum from sc group by cno) as cou,(select count(*) as snum from student) as stu where stu.snum = cou.c_snum

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1479205.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

流水账-20240229

目录 git本地回滚到到120bc409ee3b8f63a23d0060e55118bcce557acf提交记录本地提交到已有代码分支 IDEA批量导入快捷键无效更换背景主题快捷键快捷键可以设置eclipse模式&#xff0c;但是有些不生效&#xff0c;可能是冲突了Ctrl单击&#xff0c;Eclipse里面是可以跳转到代码内部…

计网 - 子网掩码的改变与内网之间通信的关系

文章目录 面试题A与B通信的全过程 面试题 想要弄清楚这个问题&#xff0c;必须了解数据包在网络上是如何传输的&#xff1a; 首先B想向A发送数据包&#xff0c;会根据双方IP来判断是否在同一子网&#xff1a; A的IP地址属于192.168.26.0/24这个网段。B的IP地址属于192.168.26.…

微信小程序构建npm失败解决方式

安装完所需要的依赖后&#xff0c;在微信开发者工具菜单栏中选择&#xff1a;“工具” -> “构建 npm”&#xff0c;但是失败。 解决方法&#xff1a;修改 project.config.json 开发者工具创建的项目&#xff0c;miniprogramRoot 默认为 miniprogram&#xff0c;package.js…

LVGL的基础知识总结

详细的内容可以参考正点原子的LVGL开发指南&#xff0c;本文只记录重点内容 正点原子后续的例程都是基于操作系统来写的 面向对象 在 LVGL 中&#xff0c;用户界面的基本构建成分是对象&#xff0c;也称为小部件&#xff0c;例如&#xff1a;按钮、标签、图片、列表、图表、文…

【Python_Zebra斑马打印机编程学习笔记(三)】解决ZPL指令无法显示中文的问题

解决ZPL指令无法显示中文的问题 解决ZPL指令无法显示中文的问题前言一、问题描述二、字符集、码表文件、字库文件1、字符集2、码表文件3、字库文件 三、两种设置中文字体的方式1、通过设置字符集、码表文件、字库文件改变默认字体2、通过^CF指令设置标准字体名称改变默认字体 解…

DOM 创建节点、添加节点和删除节点

创建元素节点 document.createElement(‘标签名’) 创建文本节点document.createTextNode ( 内容 ) 根据传入的标签名创建出一个空的元素对象创建出来的默认不显示&#xff0c;要成为别人的子元素才能显示&#xff0c;所以要结合appendChild使用 添加节点&#xff08;后面&am…

【AI Agent系列】【MetaGPT多智能体学习】4. 基于MetaGPT的Team组件开发你的第一个智能体团队

本系列文章跟随《MetaGPT多智能体课程》&#xff08;https://github.com/datawhalechina/hugging-multi-agent&#xff09;&#xff0c;深入理解并实践多智能体系统的开发。 本文为该课程的第四章&#xff08;多智能体开发&#xff09;的第二篇笔记。主要是对MetaGPT中Team组件…

每日一练:LeeCode-701、二叉搜索树中的插入操作【二叉搜索树+DFS+全搜】

本文是力扣 每日一练&#xff1a;LeeCode-701、二叉搜索树中的插入操作【二叉搜索树DFS全搜】学习与理解过程&#xff0c;本文仅做学习之用&#xff0c;对本题感兴趣的小伙伴可以出门左拐LeeCode。 给定二叉搜索树&#xff08;BST&#xff09;的根节点 root 和要插入树中的值 …

机器学习图像识别如何处理标签以外的图像?

机器学习图像识别技术是一种基于人工智能的图像处理方法&#xff0c;它通过训练大量的图像数据集来让计算机学习如何识别和分类图像。在图像识别任务中&#xff0c;我们通常需要对图像进行标注和分类&#xff0c;以便让计算机能够从中学习。但是&#xff0c;有时候我们可能会遇…

减少页面加载时间:提升用户体验的关键

✨✨ 祝屏幕前的您天天开心&#xff0c;每天都有好运相伴。我们一起加油&#xff01;✨✨ &#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; 目录 引言 一、为什么页面加载时间重要&#xff1f; 二、如何减少页面加载时间&#xff1f; …

集中和离散

数据分类&#xff1a;定性(分类&#xff0c;顺序)&#xff0c;定量(数值) 分类&#xff1a;男&#xff0c;女 顺序&#xff1a;高&#xff0c;中&#xff0c;低 数值&#xff1a;可计算的数字 数据等级&#xff1a;分类<顺序<数值。高级数据可以用低级数据&#xff0c…

day09_面向对象_构造方法_封装

今日内容 零、 复习昨日 一、构造方法 二、重载 三、封装 零、 复习昨日 1 类和对象是什么关系? 类是模板(原材料)对象是具体实例(成品)类创建出对象 2 类中有什么?(类的成员) 成员属性(成员变量), 成员方法 3 创建对象的语法? 类名 对象名 new 类名(); 4 调用对象属性,方法…

音频筑基:CD还是HiRes?高清音频分类一文说透

音频筑基&#xff1a;CD还是HiRes&#xff1f;高清音频分类一文说透 前言音乐品质分类相关资料 前言 音频信号中&#xff0c;经常遇到高清音乐、无损音质、CD、HiRes等说法&#xff0c;本文主要在纯数字信号级别&#xff0c;从音源分类和编码质量两个维度&#xff0c;做一个分析…

[AutoSar]BSW_Com06 CAN报文应用层到Can总线的函数调用

目录 关键词平台说明一、背景二、PDU转换三、函数调用 关键词 嵌入式、C语言、autosar、OS、BSW 平台说明 项目ValueOSautosar OSautosar厂商vector &#xff0c;芯片厂商TI 英飞凌编程语言C&#xff0c;C编译器HighTec (GCC)autosar版本4.3.X >>>>>回到总目…

《商用密码应用安全性评估管理办法》解读

根据《中华人民共和国密码法》&#xff08;以下简称《密码法》&#xff09;、《商用密码管理条例》&#xff08;以下简称《条例》&#xff09;等法律法规&#xff0c;国家密码管理局研究制定了《商用密码应用安全性评估管理办法》&#xff08;国家密码管理局令第3号&#xff09…

Vue页面更新后刷新页面不会渲染解决

小编今天犯了个很低级的错误&#xff0c;导致VUE页面刷新样式不会更新的问题&#xff01; 解决方法&#xff1a;查看你的路由路径大小写是否正确&#xff01;小编是犯了这种错误&#xff0c;特此分享下&#xff01;

Vite 构建的 Vue3 项目如何整合 Monaco Editor 代码编辑器

目录 &#x1f981; 一. 前言&#x1f981; 二. 探索过程2.1 安装2.2 配置 Monaco Editor2.3 编写 Monaco Editor 代码编辑器2.3.1 创建 Coding Editor 组件2.3.2 父组件使用 CodingEditor 组件 2.4 效果展示 三. 总结 &#x1f981; 一. 前言 各位好&#xff01;我是&#x1…

Unity 预制体与变体

预制体作用&#xff1a; 更改预制体&#xff0c;则更改全部的以预制体复制出的模型。 生成预制体&#xff1a; 当你建立好了一个模型&#xff0c;从层级拖动到项目中即可生成预制体。 预制体复制模型&#xff1a; 将项目中的预制体拖动到层级中即可复制。或者选择物体复制粘贴。…

2024年2月总结及随笔之平平安安过大年

1. 回头看 日更坚持了425天。 读《千脑智能》开更并更新完成 读《十堂极简人工智能课》开更并更新完成 读《人工不智能&#xff1a;计算机如何误解世界》开更并持续更新中 2023年至2024年2月底累计码字898882字&#xff0c;累计日均码字2115字。 2024年2月码字84475字&am…

【机器学习:Recommendation System】推荐系统

推荐系统&#xff08;或推荐系统&#xff09;是一类机器学习&#xff0c;它使用数据来帮助预测、缩小范围并在呈指数级增长的选项中找到人们正在寻找的内容。 【机器学习&#xff1a;Recommendation System】推荐系统 什么是推荐系统&#xff1f;用例和应用电子商务与零售&…