SQL视图定义、查询、更新(一)

S,P,J,SPJ

设有四个关系(只示意性给出一条记录):
在这里插入图片描述

S(SNO,SNAME, ADDRESS,TEL)其中,SNO:供应商代码 SNAME:姓名 ADDRESS:地址 TEL:电话;

J(JNO,JNAME,LEADER,BG)其中,JNO:工程代码 JNAME:工程名 LEADER:负责人 BG:预算;

P(PNO,PNAME,SPEC,CITY,COLOR)其中,PNO:零件代码 PNAME:零件名 SPEC:规格 CITY:产地 COLOR:颜色;

SPJ(SNO,PNO,JNO, QTY)其中,SNO:供应商代码 JNO:工程代码 PNO:零件代码 QTY:数量;

1.请将上述的“零件”P和“供应零件”SPJ关系的连接定义一个视图P_SPJ_VIEW,要求包含P零件所有信息以及供应信息

CREATE VIEW P_SPJ_VIEW
AS
SELECT P.PNO,PNAME,SPEC,CITY,COLOR,SNO,JNO,QTY
FROM P,SPJ
WHERE P.PNO = SPJ.PNO

2.已经对“零件”和“供应零件”关系的连接定义一个视图P_SPJ_VIEW,该视图能显示完整零件信息和供应零件情况,请在这个视图的基础上完成下列查询:找出工程代码为J2的工程使用的所有零件名称、数量

SELECT PNAME,QTY
FROM P_SPJ_VIEW
WHERE JNO = 'J2'

3.已经对“零件”和“供应零件”关系的连接定义一个视图P_SPJ_VIEW,该视图能显示完整零件信息和供应零件情况,请在这个视图的基础上完成下列查询:找出使用上海产的零件的工程号

SELECT DISTINCT JNO  --一个工程对应多个零件,因此需加上DISTINCT
FROM P_SPJ_VIEW
WHERE CITY='上海'

PAPER,CUSTOMER,CP

已有订报管理子系统的数据库DingBao,在DingBao数据库中有如下三表的表结构(表的定义):
在这里插入图片描述

CREATE TABLE PAPER
(
    pno CHAR(6) NOT NULL PRIMARY KEY,
    pna NVARCHAR(5) NOT NULL,
    ppr money --或者decimal(4,1)
);
CREATE TABLE CUSTOMER
(
    cno CHAR(8) NOT NULL PRIMARY KEY,
    cna NVARCHAR(4) NOT NULL,
    adr VARCHAR(30)
);
CREATE TABLE CP
(
    cno CHAR(8) NOT NULL,
    pno CHAR(6) NOT NULL,
    num SMALLINT DEFAULT 1,
    CONSTRAINT KEY_cp PRIMARY KEY(cno,pno),
    CONSTRAINT FK_cno FOREIGN KEY(cno) REFERENCES CUSTOMER(cno),
    CONSTRAINT FK_pno FOREIGN KEY(pno) REFERENCES PAPER(pno)
);

4.现要求在上述DingBao数据库中,创建含有顾客编号、顾客名称、报纸编号、报纸名称、订阅份数等信息的视图,视图名设定为C_P_N

CREATE VIEW C_P_N
AS
SELECT CUSTOMER.cno,CUSTOMER.cna,PAPER.pno,PAPER.pna,num
FROM PAPER,CUSTOMER,CP
WHERE PAPER.pno = CP.pno AND CUSTOMER.cno = CP.cno

5.在上述DingBao数据库中,目前已经创建含有顾客编号、顾客名称、报纸编号、报纸名称、订阅份数等信息的视图C_P_N。现要求在通过视图C_P_N,查询“人民日报”被订阅的情况(顾客编号、顾客名称、订阅份数)

SELECT cno,cna,num
FROM C_P_N
WHERE pna = '人民日报'

6.在上述DingBao数据库中,目前已经创建含有顾客编号、顾客名称、报纸编号、报纸名称、订阅份数等信息的视图C_P_N。现要求在通过视图C_P_N,更新“李涛”顾客订阅“人民日报”的订阅份数为10,请通过验证,确认是否可以更新

UPDATE C_P_N
SET num = 10
WHERE cna='李涛' AND pna='人民日报'

本文到此就结束了,如有错误欢迎指出

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

芷汀若静

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

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

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

打赏作者

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

抵扣说明:

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

余额充值