《数据库原理》上机实验:SQL实验3(详细代码+截图)

实验三 SQL练习3

一、实验目的

    1.掌握基本表的删除与修改;

    2.掌握实体完整性、参照完整性和用户定义的完整性的定义、检查和违约处理;

    3.掌握视图的定义、查询和更新,了解视图的作用。

二、实验学时

2学时

三、实验内容

1.完成以下操作:

⑴ 向在实验二中所定义的数据表增加“备注”列,其数据类型为字符型,并查看新增列的值。
ALTER TABLE 材料表

ADD 备注 VARCHAR(50);

ALTER TABLE 材料消耗表

ADD 备注 VARCHAR(50);

ALTER TABLE 成本表

ADD 备注 VARCHAR(50);

ALTER TABLE 单位表

ADD 备注 VARCHAR(50);

ALTER TABLE 油水井表

ADD 备注 VARCHAR(50);

 

ALTER TABLE 汇总表

ADD 备注 VARCHAR(50);

⑵ 对上述数据表增加主码约束条件,并观察在数据表中存在数据的情况下主码约束是否创建成功,然后再次执行实验二中实验内容3-的操作,并观察记录执行结果。

因为在实验一中就定义了主码PRIMARY KEY,所以此步省略。

INSERT INTO 汇总表(施工单位,年月,结算金额)

       SELECT 单位名称,YEAR(结算日期)*100+MONTH(结算日期), SUM(结算金额)

       FROM 成本表,单位表

       WHERE 预算单位 = 单位代码

       GROUP BY 单位名称,YEAR(结算日期)*100+MONTH(结算日期);

⑶ 删除上述数据表中的数据,然后再删除该数据表,对这两个操作进行比较。

DELETE

FROM 汇总表;

(只删除了表格数据,但表格还存在,只是为空表)

DROP TABLE 汇总表;

(即把表格都给删除了,包括表格数据及表格本身)

2.完成以下任务:

⑴ 对实验一中所定义的5个数据表增加主码约束条件,并观察在数据表中存在数据的情况下主码约束是否创建成功,然后执行以下2个操作,观察并记录实体完整性的检查和违约处理。
① insert  into  材料消耗表  values('zy2022001','wm004',100)
② insert  into  材料消耗表  values('zy2022002',NULL,200)

ALTER TABLE 材料表 ALTER COLUMN 物码 CHAR(20) NOT NULL;

(不成功)

ALTER TABLE 材料表 ADD CONSTRAINT 主码 PRIMARY KEY (物码);

(不成功)

ALTER TABLE 材料消耗表 ALTER COLUMN 物码 CHAR(20) NOT NULL;

(不成功)

ALTER TABLE 材料消耗表 ALTER COLUMN 单据号 VARCHAR(20) NOT NULL;

(不成功)

ALTER TABLE 材料消耗表 ADD CONSTRAINT 主码_材料消耗表 PRIMARY KEY (单据号,物码);

(成功)

ALTER TABLE 单位表 ALTER COLUMN 单位代码 VARCHAR(20) NOT NULL;

(不成功)

ALTER TABLE 单位表 ADD CONSTRAINT 主码_单位表 PRIMARY KEY (单位代码);

(成功)

ALTER TABLE 油水井表 ALTER COLUMN 井号 VARCHAR(20) NOT NULL;

(不成功)

ALTER TABLE 油水井表 ADD CONSTRAINT 主码_油水井表 PRIMARY KEY(井号);

(成功)

ALTER TABLE 成本表 ALTER COLUMN 单据号 VARCHAR(20) NOT NULL;

(不成功)

ALTER TABLE 成本表 ADD CONSTRAINT 主码_成本表 PRIMARY KEY(单据号);

(成功)

INSERT  INTO  材料消耗表  VALUES('ZY2021001','WM004',100);

(报错)

INSERT  INTO  材料消耗表  VALUES('ZY2021002',NULL,200);

(报错)

⑵ 对实验一中所定义的5个数据表增加相应的参照完整性约束,并观察在数据表中存在数据的情况下参照完整性约束是否创建成功,然后执行以下操作,观察并记录参照完整性的检查和违约处理。

ALTER TABLE 材料消耗表 ADD FOREIGN KEY(单据号) REFERENCES 成本表(单据号);

(成功)

ALTER TABLE 材料消耗表 ADD FOREIGN KEY(物码) REFERENCES 材料表(物码);

(不成功)

ALTER TABLE 油水井表 ADD FOREIGN KEY(单位代码) REFERENCES 单位表(单位代码);

(成功)

ALTER TABLE 成本表 ADD FOREIGN KEY(预算单位) REFERENCES 单位表(单位代码);

(成功)

ALTER TABLE 成本表 ADD FOREIGN KEY(井号) REFERENCES 油水井表(井号);

(不成功)

① 将(y007   油井   112203002)插入到油水井表。

START TRANSACTION;

INSERT INTO 油水井表 VALUES('Y007','油井','112203002');

(不成功)

// INSERT 语句与 FOREIGN KEY 约束"FK__油水井表__单位代码__6E01572D"冲突。

② insert  into  材料消耗表  values('zy2022007','wm006',100)

INSERT  INTO  材料消耗表  VALUES('ZY2021007','WM006',100);

(不成功)

// INSERT 语句与 FOREIGN KEY 约束"FK__油水井__单位代码__2A4B4B5E"冲突

③ 将单位表中的(112202002  采油二矿二队)删除,查看油水井表和成本表中的数据有何变化。
DELETE

FROM 单位表

WHERE 单位代码 = '112202002'

AND 单位名称 ='采油二矿二队';

(不成功)

// DELETE 语句与 REFERENCE 约束"FK__油水井表__单位代码__6E01572D"冲突。

④ 将材料表中的(wm004 材料四 袋 10)修改为(wm04 材料四 袋 10)。

UPDATE 材料表

SET 物码 = 'WM04'

WHERE 物码 = 'WM004';

(成功)

⑤ 撤销上述成功的更新操作。

ROLLBACK;

⑶ 对实验一中所定义的5个数据表按以下要求增加相应的完整性约束条件,并观察在数据表中存在数据的情况下完整性约束是否创建成功。
① 单位表的单位名称不能取空值、且取值唯一。

ALTER TABLE 单位表 ALTER COLUMN 单位名称 CHAR(12) NOT NULL;

ALTER TABLE 单位表 ADD UNIQUE(单位名称);

② 油水井表的井别只允许取“油井”或“水井”,单位代码不能取空值。

ALTER TABLE 油水井表 ADD CHECK(井别 = '油井' OR 井别 = '水井');

ALTER TABLE 油水井表 ALTER COLUMN 单位代码 CHAR(10) NOT NULL;

③ 材料表的名称不能取空值、且取值唯一,计量单位不能取空值。
ALTER TABLE 材料表 ALTER COLUMN 名称 CHAR(20) NOT NULL;

ALTER TABLE 材料表 ADD UNIQUE(名称);

ALTER TABLE 材料表 ALTER COLUMN 计量单位 CHAR(20) NOT NULL;

材料消耗表的消耗数量不能取空值。

ALTER TABLE 材料消耗表 ALTER COLUMN 消耗数量 FLOAT NOT NULL;

⑤ 对成本表根据实际应用的要求定义适当的用户定义的完整性约束条件。

ALTER TABLE 成本表 ALTER COLUMN 施工内容 VARCHAR(20) NOT NULL;

3.完成以下操作:

⑴ 定义视图V1,用于保存成本表材料消耗表的全部列。
START TRANSACTION;

CREATE VIEW V1

AS

SELECT 成本表.*,材料消耗表.消耗数量,材料消耗表.物码

FROM 成本表,材料消耗表

WHERE 成本表.单据号 = 材料消耗表.单据号;

⑵ 查询上面定义的视图V1,可任意组合查询条件,构造出2个查询。

SELECT *

FROM V1

WHERE 单据号 = 'ZY2020001';

⑶ 定义一个反映成本表预算状态的视图V2,并向该视图插入('zy2022008','112202002','y005',10000,'张三', '2022-07-02'),查看成本表的数据有何变化。
CREATE VIEW V2

AS

SELECT 单据号,预算单位,井号,预算金额,预算人,预算日期

FROM 成本表;

INSERT

INTO V2

VALUES('ZY2021008','112202002','Y005',10000,'张三', '2021-07-02');

SELECT * FROM V2

​​​​​​​

⑷ 撤销上述成功的更新操作。

ROLLBACK;

数据库概念实验代码。。 在表S,C,SC上完成以下查询: 1. 查询学生的基本信息; 2. 查询“CS”系学生的基本信息; 3. 查询“CS”系学生年龄不在19到21之间的学生的学号、姓名; 4. 找出“CS”系年龄最大的学生,显示其学号、姓名; 5. 找出各系年龄最大的学生,显示其学号、姓名; 6. 统计“CS”系学生的人数; 7. 统计各系学生的人数,结果按升序排列; 8. 按系统计各系学生的平均年龄,结果按降序排列; 9. 查询无先修课的课程的课程名和学时数; 10.统计每位学生选修课程的门数、学分及其平均成绩; 11. 统计选修每门课程的学生人数及各门课程的平均成绩; 12. 找出平均成绩在85分以上的学生,结果按系分组,并按平均成绩的升序排列; 13. 查询选修了“1”或“2”号课程的学生学号和姓名; 14. 查询选修了“1”和“2”号课程的学生学号和姓名; 15. 查询选修了课程名为“数据库系统”且成绩在60分以下的学生的学号、姓名和成绩; 16. 查询每位学生选修了课程的学生信息(显示:学号,姓名,课程号,课程名,成绩); 17. 查询没有选修课程的学生的基本信息; 18. 查询选修了3门以上课程的学生学号; 19. 查询选修课程成绩至少有一门在80分以上的学生学号; 20. 查询选修课程成绩均在80分以上的学生学号; 21. 查询选修课程平均成绩在80分以上的学生学号;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云边牧风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值