山东大学 2020级数据库系统 实验三

What’s more

山东大学 2020级数据库系统 实验一
山东大学 2020级数据库系统 实验二
山东大学 2020级数据库系统 实验三
山东大学 2020级数据库系统 实验四
山东大学 2020级数据库系统 实验五
山东大学 2020级数据库系统 实验六
山东大学 2020级数据库系统 实验七
山东大学 2020级数据库系统 实验八、九

写在前面

做数据库实验一定要静得下心来,才能发现其中的错误然后进行改正。同时,如果发现 SQL 语句总是报错,“一定是你错了,只是不知道错在哪里”

其次,SQL 语句中较为复杂的点博主都进行了注释,希望大家一定要看懂思路后自己写一遍,而不是盲目的 Ctrl+C,Ctrl+V,切记切记!!

实验三

知识储备:本实验涉及的主要是 delete … from … where 语句,完成本实验需要熟练这个子句描述的内容,然后组织对应的逻辑结构进行求解。

  • 3-1 将pub用户下的Student_31及数据复制到主用户的表test3_01,删除表中的学号不全是数字的那些错误数据,学号应该是数字组成,不能够包含字母空格等非数字字符。
    方法之一:用substr函数,例如Substr(sid,1,1)返回学号的第一位,判断是否是数字。

    思路:

    1. 此题最简便的方法我觉得是使用函数 regexp_like(string, 正则表达式) 来进行学号正确格式的寻找。

    下面对正则表达式进行一个补充:
    正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。主要是记忆住表达相应字符的符号就行了,具体可以上 B 站寻找教程。

    eg. ‘^’ 匹配一行字符的行首;’+’ 匹配前面一个字符出现 1 次及以上的字符串;’$’ 匹配一行字符的行尾;’[]’ 表示一个范围,匹配的字符只能取自于括号中的字符。

    因此,本实验中为了验证 sid 是否是全数字,可以这样:regexp_like(sid, '^[0-9]+$'),满足这个正则表达式返回 true,否则返回 false。

create table test3_01 asselect *from pub.student_31
delete from test3_01
where sid not in(select sidfrom test3_01where regexp_like(sid, '^[0-9]+$')) --检验字符串是否是全数字
  • 3-2 将pub用户下的Student_31及数据复制到主用户的表test3_02,删除表中的出生日期和年龄(截止到2012年的年龄,即年龄=2012-出生年份)不一致的那些错误数据。
    函数extract(year from birthday)返回birthday的年份

    思路:
    1. 此题直接使用题目中的提示 extract 函数提取出出生年份;
    2. 然后与 2012 作差,最后跟 age 比较即可;
create table test2_02 asselect *from pub.student_31
delete from test3_02
where age <> 2012 - extract(year from birthday)
  • 3-3 将pub用户下的Student_31及数据复制到主用户的表test3_03,删除表中的性别有错误的那些错误数据(性别只能够是"男"、"女"或者空值)。
    思路:
    1. 直接对性别进行判定即可。
      但是,注意:null 的判断需要使用 not null 而不是 = 哦~~
create table test3_03 asselect *from pub.student_31
delete from test3_03
where sex <> '男'
and sex <> '女'
and sex is not null
  • 3-4 将pub用户下的Student_31及数据复制到主用户的表test3_04,删除表中的院系名称有空格的、院系名称为空值的或者院系名称小于3个字的那些错误数据。
    思路:
    1. 直接对院系名称进行判断即可;
    2. 空格的判断可以采用 like 来对字符串进行处理;
    3. 院系名称小于 3 个字直接使用函数 length() 即可;
create table test3_04 asselect *from pub.student_31
delete from test3_04
where dname like '% %'
or dname is null
or length(dname) < 3
  • 3-5 将pub用户下的Student_31及数据复制到主用户的表test3_05,删除表中的班级不规范的那些错误数据,不规范是指和大多数不一致。
    这个题知识点是学会用sql找出不规范的数据,而不是用人工办法找不规范。
    提示:寻找不规范有很多解决思路,可以去对比大纲最后的提示。

    思路:
    1. 根据提示,我们可以先对 class 进行 select 看看哪些数据不太符合规范;
    2. 可以知道:不符合规范的数据是那些 class 中间有空格、后面加上了 ‘级’ 字的数据;
    3. 因此可以确定符合规范的数据是全数字的 class 数据;
    4. 使用前面讲到的 regexp_like() 函数来进行判断就好;
    5. 删除这些数据即可;
create table test3_05 asselect *from pub.student_31
delete
from test3_05
where class not in(select classfrom test3_05where regexp_like(class, '^[0-9]+$'))
  • 3-6 将pub用户下的Student_31及数据复制到主用户的表test3_06,删除表中的错误数据,不规范的数据也被认为是那些错误数据。
    (1)学号不全是数字;
    (2)出生日期和年龄不一致的(年龄=2012-出生年份);
    (3)姓名有空格的或者长度小于2个字的;函数length()返回字符串长度。
    (4)性别有错误的(只能够是"男"、“女”、空值);
    (5)院系名称有空格的、院系名称为空值的;
    (6)院系名称小于3个字的;
    (7)班级数据有错误的(需要先找到班级里面的错误)。
    保留最后全部正确的数据。

    思路:
    1. 综合全面的判断并用 or 将它们连接起来即可;
create table test3_06 asselect *from pub.student_31
delete
from test3_06
where not regexp_like(sid, '^[0-9]+$')
or age <> 2012 - extract(year from birthday)
or name like '% %'
or length(name) < 2
or sex in(select distinct sexfrom test3_06where sex <> '男'and sex <> '女'and sex is not null)
or dname like '% %'
or dname is null
or length(dname) < 3
or class not in(select classfrom test3_05where regexp_like(class, '^[0-9]+$'))
  • 3-7 将pub用户下的Student_course_32及数据复制到主用户的表test3_07,删除其中的错误数据,错误指如下情况:
    学号在学生信息pub.student中不存在的;

    思路:
    1. 直接在 pub.student 中找到 sid,然后使用 not in 判断即可;
create table test3_07 asselect *from pub.student_31
delete
from test3_07
where sid not in(select sidfrom pub.student)
  • 3-8 将pub用户下的Student_course_32及数据复制到主用户的表test3_08,删除其中的错误数据,错误指如下情况:
    课程号和教师编号在教师授课表pub.teacher_course中不同时存在的,即没有该教师教该课程;

    思路:
    1. 可以使用 not exists 来判断 cid, sid 是否存在于pub.teacher_course 即可;
create table test3_08 asselect *from pub.teacher_course
delete
from test3_08 S
where not exists(select cid, tidfrom pub.teacher_course Twhere S.cid = T.cidand S.tid = T.tid)
  • 3-9 将pub用户下的Student_course_32及数据复制到主用户的表test3_09,删除其中的错误数据,错误指如下情况:
    成绩数据有错误(需要先找到成绩里面的错误)。
    这个题知识点是学会用sql找出错误数据,而不是用人工办法找错误数据。
    提示:寻找不规范有很多解决思路,可以去对比大纲最后的提示。

    思路:
    1. 同样,还是可以先进行 select 来判断究竟哪些是错误数据;
    2. 可以发现:错误的数据在于分数有 > 100,也有 < 0 的;
    3. 使用 between … and … 将他们删除即可;
create table test3_09 asselect *from pub.student_31
delete
from test3_09
where score not between 0 and 100
  • 3-10 将pub用户下的Student_course_32及数据复制到主用户的表test3_10,删除其中的错误数据,错误指如下情况:
    (1) 学号在学生信息pub.student中不存在的;
    (2) 课程号在课程信息pub.course中不存在的;
    (3) 教师编号在教师信息pub.teacher中不存在的;
    (4) 课程号和教师编号在教师授课表pub.teacher_course中不存在的;
    (5) 成绩数据有错误(需要先找到成绩里面的错误)。
    保留最后正确的数据。

    思路:
    1. 综合前面的步骤,用 or 连接各条件,然后进行删除即可;
create table test3_10 asselect *from pub.student_31
delete
from test3_10 S
where sid not in(select sidfrom pub.student)
or cid not in(select cidfrom pub.course)
or tid not in(select tidfrom pub.teacher)
or not exists(select cid, tidfrom pub.teacher_course Twhere S.cid = T.cidand S.tid = T.tid)
or score not between 0 and 100

再次强调:一定是看懂思路之后自己实践哈~~
有问题还请斧正!

请添加图片描述

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

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

相关文章

山东大学 2020级数据库系统 实验四

What’s more 山东大学 2020级数据库系统 实验一 山东大学 2020级数据库系统 实验二 山东大学 2020级数据库系统 实验三 山东大学 2020级数据库系统 实验四 山东大学 2020级数据库系统 实验五 山东大学 2020级数据库系统 实验六 山东大学 2020级数据库系统 实验七 山东大学 20…

jupyter(Anaconda)打不开浏览器

问题描述 有时jupyter不能自动打开浏览器&#xff0c;jupyter notebook输入回车后&#xff0c;不能跳转&#xff0c;把输出的链接复制粘贴到浏览器后&#xff0c;写的代码页不能运行。 问题解决 不是软件什么的问题&#xff0c;而是他们的用户名为中文的问题。只要把用户名改为…

C语言数组初入

情景 实用程序输出一个 44 的整数矩阵&#xff0c;代码如下&#xff1a; #include <stdio.h> #include <stdlib.h> int main() {int a120, a2345, a3700, a422;int b156720, b299, b322, b42;int c1233, c2205, c31, c46666;int d134, d20, d323, d423006783;pri…

最全python爬虫库安装详解

目录 一、请求库的安装 1.requests 的安装 2.Selenium的安装 3.ChromeDrive 的安装 4.GeckoDriver 的安装 5.PhantomJS 的安装 6.aiohttp 的安装 二、解析库的安装 1.lxml 的安装 2.Beautiful Soup 的安装 3.pyquery 的安装 4.tesserocr 的安装 一、请求库的安装 …

山东大学 2020级数据库系统 实验五

What’s more 山东大学 2020级数据库系统 实验一 山东大学 2020级数据库系统 实验二 山东大学 2020级数据库系统 实验三 山东大学 2020级数据库系统 实验四 山东大学 2020级数据库系统 实验五 山东大学 2020级数据库系统 实验六 山东大学 2020级数据库系统 实验七 山东大学 20…

C语言二维数组的使用

二维数组的定义 二维数组定义的一般形式是&#xff1a; dataType arrayName[length1][length2];其中&#xff0c;dataType 为数据类型&#xff0c;arrayName 为数组名&#xff0c;length1 为第一维下标的长度&#xff0c;length2 为第二维下标的长度。 我们可以将二维数组看…

python基础入门(8)之集合

目录 Python集合 一、集合理解 二、访问集合 2.1&#xff09;遍历集合 3.2&#xff09;检查是否存在 三、添加集合 3.1&#xff09;添加项目值 3.3&#xff09;添加任何可迭代对象 四、移除集合项 4.1&#xff09;remove方法 4.2&#xff09;iscard() 方法 4.3&…

山东大学 2020级数据库系统 实验六

What’s more 山东大学 2020级数据库系统 实验一 山东大学 2020级数据库系统 实验二 山东大学 2020级数据库系统 实验三 山东大学 2020级数据库系统 实验四 山东大学 2020级数据库系统 实验五 山东大学 2020级数据库系统 实验六 山东大学 2020级数据库系统 实验七 山东大学 20…

C语言数组元素的查询

数组的查询 在日常的开发过程中&#xff0c;我们经常需要查询数组中的元素&#xff0c;这就需要我们使用数组元素查询的方法来进行查询。 对无序数组的查询 无序数组&#xff0c;就是数组元素的排列没有规律。无序数组元素查询的思路也很简单&#xff0c;就是用循环遍历数组…

山东大学 2020级数据库系统 实验七

What’s more 山东大学 2020级数据库系统 实验一 山东大学 2020级数据库系统 实验二 山东大学 2020级数据库系统 实验三 山东大学 2020级数据库系统 实验四 山东大学 2020级数据库系统 实验五 山东大学 2020级数据库系统 实验六 山东大学 2020级数据库系统 实验七 山东大学 20…

python基础入门(9)之字典

目录 Python字典 一、字典理解 1.1&#xff09;创建字典与访问 1.2&#xff09;字典长度 1.3&#xff09;数据类型 二、访问字典 2.1&#xff09;访问键名 2.2&#xff09;访问健值 三、更改字典各种方法 四、添加字典项各种方法 五、删除字典的各种方法 ​六、遍历…

山东大学 2020级数据库系统 实验八、九

What’s more 山东大学 2020级数据库系统 实验一 山东大学 2020级数据库系统 实验二 山东大学 2020级数据库系统 实验三 山东大学 2020级数据库系统 实验四 山东大学 2020级数据库系统 实验五 山东大学 2020级数据库系统 实验六 山东大学 2020级数据库系统 实验七 山东大学 20…

python基础入门(10)之循环语句

目录 一、If … Else语句 一.if语句 二.缩进 三.elif语句 四.else语句 4.1基本else 4.2&#xff09;and语句 4.3&#xff09;or 语句 4.4&#xff09;嵌套if语句 4.4&#xff09;pass语句 二、while循环语句 一.基本理解 二.中断声明 三.continue 声明 四.else …

python基础(11)之函数

目录 函数 一、创建函数与调用 二、参数 三、参数数量 四、任意参数&#xff0c;*args 五、关键字参数 七、任意关键字参数&#xff0c;**kwargs 八、默认参数值 九、将列表作为参数传递 十、返回值 十一、pass语句 函数 一、创建函数与调用 在 Python 中&#xf…

排序算法的实现及时间复杂度分析——计数排序、选择排序、冒泡排序、插入排序

文章目录排序算法计数排序选择排序冒泡排序插入排序排序算法 排序算法是解决问题中常见且非常重要的一环&#xff0c;针对相应的问题选择相应的排序算法&#xff0c;能够提高问题解决速度&#xff0c;节省时间&#xff01;&#xff01;&#xff01; 常见的排序算法有&#xf…

python基础(12)之匿名函数lambda

lambda lambda 函数是一个小的匿名函数。一个 lambda 函数可以接受任意数量的参数&#xff0c;但只能有一个表达式。 语法&#xff1a; lambda arguments : expression 执行表达式并返回结果&#xff1a; 示例将 10 添加到 argument a&#xff0c;并返回结果&#xff1a; …

C语言快速排序

快速排序是对冒泡法排序的一种改进。 快速排序算法 的基本思想是&#xff1a;将所要进行排序的数分为左右两个部分&#xff0c;其中一部分的所有数据都比另外一 部分的数据小&#xff0c;然后将所分得的两部分数据进行同样的划分&#xff0c;重复执行以上的划分操作&#xff0…

机器学习入门(1)之基本概念简介

目录 一、机器学习概述 1.1 什么是机器学习&#xff1f; 1.2 为什么需要机器学习&#xff1f; 1.3 机器学习应用场景 1.4 机器学习的一般流程 1.5 典型的机器学习过程​ 二、机器学习的基本术语 三.假设空间与版本空间 四、归纳偏好 1.哪种更好 2..假设的选择原则 …

山东大学 2020级计算机系统原理——拆解二进制炸弹

写在前面 第一次拿到这个实验还是有点慌&#xff01;之前没见过&#xff0c;不过还是慢慢做过来了。 这是个需要耐心的过程&#xff0c;请一定静下心来哦&#xff01; 环境及配置 环境&#xff1a;Ubuntu 20.04 GDB 调试工具 可参考配置&#xff1a;GDB调试工具配置&#…

机器学习入门(2)之模型评估与选择

目录 一、误差与拟合 1. 泛化误差与经验误差 2. 损失函数与训练误差 3. 过拟合与欠拟合 4. 过拟合的另一种现象&#xff1a;数据泄露 二、评估方法 1. 留出法 2. 交叉验证法&#xff08;留一法&#xff09; 3. 自助法 4. 调参与最终模型 三、性能度量 1. 混淆矩阵 …