做网站公司哪家好,网页在线代理浏览,怎么开发手机网页,汕头网站搭建多少钱What’s more
山东大学 2020级数据库系统 实验一 山东大学 2020级数据库系统 实验二 山东大学 2020级数据库系统 实验三 山东大学 2020级数据库系统 实验四 山东大学 2020级数据库系统 实验五 山东大学 2020级数据库系统 实验六 山东大学 2020级数据库系统 实验七 山东大学 20…What’s more
山东大学 2020级数据库系统 实验一 山东大学 2020级数据库系统 实验二 山东大学 2020级数据库系统 实验三 山东大学 2020级数据库系统 实验四 山东大学 2020级数据库系统 实验五 山东大学 2020级数据库系统 实验六 山东大学 2020级数据库系统 实验七 山东大学 2020级数据库系统 实验八、九
写在前面
做数据库实验一定要静得下心来才能发现其中的错误然后进行改正。同时如果发现 SQL 语句总是报错“一定是你错了只是不知道错在哪里”
其次SQL 语句中较为复杂的点博主都进行了注释希望大家一定要看懂思路后自己写一遍而不是盲目的 CtrlCCtrlV切记切记
实验三
知识储备本实验涉及的主要是 delete … from … where 语句完成本实验需要熟练这个子句描述的内容然后组织对应的逻辑结构进行求解。 3-1 将pub用户下的Student_31及数据复制到主用户的表test3_01删除表中的学号不全是数字的那些错误数据学号应该是数字组成不能够包含字母空格等非数字字符。 方法之一用substr函数例如Substr(sid,1,1)返回学号的第一位判断是否是数字。 思路 此题最简便的方法我觉得是使用函数 regexp_like(string, 正则表达式) 来进行学号正确格式的寻找。 下面对正则表达式进行一个补充 正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。主要是记忆住表达相应字符的符号就行了具体可以上 B 站寻找教程。 eg. ‘^’ 匹配一行字符的行首’’ 匹配前面一个字符出现 1 次及以上的字符串’$’ 匹配一行字符的行尾’[]’ 表示一个范围匹配的字符只能取自于括号中的字符。 因此本实验中为了验证 sid 是否是全数字可以这样regexp_like(sid, ^[0-9]$)满足这个正则表达式返回 true否则返回 false。
create table test3_01 asselect *from pub.student_31delete 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的年份 思路 此题直接使用题目中的提示 extract 函数提取出出生年份然后与 2012 作差最后跟 age 比较即可
create table test2_02 asselect *from pub.student_31delete from test3_02
where age 2012 - extract(year from birthday)3-3 将pub用户下的Student_31及数据复制到主用户的表test3_03删除表中的性别有错误的那些错误数据性别只能够是男、女或者空值。 思路 直接对性别进行判定即可。 但是注意null 的判断需要使用 not null 而不是 哦~~
create table test3_03 asselect *from pub.student_31delete from test3_03
where sex 男
and sex 女
and sex is not null3-4 将pub用户下的Student_31及数据复制到主用户的表test3_04删除表中的院系名称有空格的、院系名称为空值的或者院系名称小于3个字的那些错误数据。 思路 直接对院系名称进行判断即可空格的判断可以采用 like 来对字符串进行处理院系名称小于 3 个字直接使用函数 length() 即可
create table test3_04 asselect *from pub.student_31delete from test3_04
where dname like % %
or dname is null
or length(dname) 33-5 将pub用户下的Student_31及数据复制到主用户的表test3_05删除表中的班级不规范的那些错误数据不规范是指和大多数不一致。 这个题知识点是学会用sql找出不规范的数据而不是用人工办法找不规范。 提示寻找不规范有很多解决思路可以去对比大纲最后的提示。 思路 根据提示我们可以先对 class 进行 select 看看哪些数据不太符合规范可以知道不符合规范的数据是那些 class 中间有空格、后面加上了 ‘级’ 字的数据因此可以确定符合规范的数据是全数字的 class 数据使用前面讲到的 regexp_like() 函数来进行判断就好删除这些数据即可
create table test3_05 asselect *from pub.student_31delete
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班级数据有错误的需要先找到班级里面的错误。 保留最后全部正确的数据。 思路 综合全面的判断并用 or 将它们连接起来即可
create table test3_06 asselect *from pub.student_31delete
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中不存在的 思路 直接在 pub.student 中找到 sid然后使用 not in 判断即可
create table test3_07 asselect *from pub.student_31delete
from test3_07
where sid not in(select sidfrom pub.student)3-8 将pub用户下的Student_course_32及数据复制到主用户的表test3_08删除其中的错误数据错误指如下情况 课程号和教师编号在教师授课表pub.teacher_course中不同时存在的即没有该教师教该课程 思路 可以使用 not exists 来判断 cid, sid 是否存在于pub.teacher_course 即可
create table test3_08 asselect *from pub.teacher_coursedelete
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找出错误数据而不是用人工办法找错误数据。 提示寻找不规范有很多解决思路可以去对比大纲最后的提示。 思路 同样还是可以先进行 select 来判断究竟哪些是错误数据可以发现错误的数据在于分数有 100也有 0 的使用 between … and … 将他们删除即可
create table test3_09 asselect *from pub.student_31delete
from test3_09
where score not between 0 and 1003-10 将pub用户下的Student_course_32及数据复制到主用户的表test3_10删除其中的错误数据错误指如下情况 1 学号在学生信息pub.student中不存在的 2 课程号在课程信息pub.course中不存在的 3 教师编号在教师信息pub.teacher中不存在的 4 课程号和教师编号在教师授课表pub.teacher_course中不存在的 5 成绩数据有错误需要先找到成绩里面的错误。 保留最后正确的数据。 思路 综合前面的步骤用 or 连接各条件然后进行删除即可
create table test3_10 asselect *from pub.student_31delete
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再次强调一定是看懂思路之后自己实践哈~~ 有问题还请斧正