山东大学2012年数据库实验四答案(更新)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1.

CREATE TABLE test4_01 AS

SELECT *

FROM pub.student_41

WHERE LENGTH(sid) = 12

AND LENGTH(name) >=2

AND dname IS NOT NULL

AND LENGTH(dname)>=3

AND LENGTH(class) =4

//(1)完成学号不是12位,姓名长度小于2个字的, 院系名称为空值的,院系名称小于3个字的被跳过。

delete from test4_01 where name like '% %' or dname like '% %'

//(2)删除名字和院系名中带空格的

delete from test4_01 where length(sex)<>1

delete from test4_01 where sex like '%南%'

//(3)性别有误

delete from test4_01 where age <> 2012- extract(year from birthday)

//(4) 出生日期和年龄不一致的

delete from test4_01 where sid like '% %'

delete from test4_01 where sid like '%A%'

//(5)学号中有非数字的(看了眼数据,感觉只有这两种,居然猜对了)

//【求助】学号中有非数字的正规思路怎么写?

2.

create table test4_02 as select * from pub.Student_course_42

delete from test4_02 where test4_02.sid not in (select sid from pub.student)

//(1)学号在学生信息pub.student中不存在的

delete from test4_02 where test4_02.cid not in (select cid from pub.course)

//(2) 课程号在课程信息pub.course中不存在的

delete from test4_02 where test4_02.tid not in (select tid from pub.teacher)

//(3)教师编号在教师信息pub.teacher中不存在的

create table tt as

selecta.sid,a.cid,a.score,a.tid

from test4_02 a, pub.teacher_course b

wherea.cid in b.cid and a.tid in b.tid

drop table test4_02

create table test4_02 as select * from tt

drop table tt

//(4)有点混乱,先建一个临时表tt,把test4_02中“满足课程号和教师编号在教师授课表pub.teacher_course中存在”的数据放到tt中,在drop掉test4_02,然后重新定义test4_02

//【求助】感觉不太正规,肯定有比这好很多的方法

delete from test4_02 where score not between 0 and 100

//(5)成绩数据有错误

3.

create table t1 as select distinct name from pub.student

//去除重复的名字

CREATE TABLE test4_03 AS

SELECT first_name,

COUNT(*) Frequency

FROM

(SELECT SUBSTR(name,2,LENGTH(name)-1)first_name FROM t1

)

GROUP BY first_name

Drop table t1

//一定要drop table t1这只是一个临时表,虽然一会还要用,不过这是一个很好

的习惯(ps:上一个答案的drop忘记复制了)

4.

create table t2 as select distinct name from pub.student

create table test4_04 as

SELECT letter,count(*) Frequency

FROM

(

SELECT SUBSTR(name,2,1) letter FROM t2

UNION ALL

SELECT SUBSTR(name,3,1) letter FROM t2 WHERE LENGTH(name)>2

)

GROUP BY letter

Drop table t2

相关文档
最新文档