数据库学习笔记和小练习(6)sql查询和更新练习

来源:互联网 发布:皇室战争恶搞卡牌软件 编辑:程序博客网 时间:2024/05/17 21:08

这篇文章所用关系为上一篇文章所建的S,PJ,SPJ表

(1)找出所有供应商的姓名和所在城市

分析:直接查询供应商表即可,而且没有条件。

select SNAME,CITYfrom S;

(2)找出所有零件的名称,颜色,重量

分析:这些属性都是P表的,直接查询P表即可

select PNAME,COLOR,WEIGHTfrom p;

(3)找出使用供应商S1所供应零件的工程号码

分析:根据SNO查JNO,在SPJ表中查询即可

select JNOfrom SPJwhere SNO='S1';
(4)找出工程项目J2使用的各种零件的名称和数量

分析:J2是J表和SPJ表的连接属性,数量是SPJ表的独有属性,这样看来只要用J2条件查询SPJ就可以了,但是,还有一个要列出的属性是名称,这是P表和SPJ表的连接属性,我们要列出它,那么最后一定要落到P表上,而且一定是通过PNO来连接,这相当于是一种映射,在SPJ表根据J2查找数量之余,在映射到P表,找出这些PNO的名称属性。

select P.PNAME,SPJ.QTYfrom P,SPJwhere P.PNO = SPJ.PNOand SPJ.JNO='J2'; 
(5)找出上海厂商供应的所有零件号码

分析:供应厂商是S表的特有属性,但是又要查询PNO,所以先在S表找,再通过SNO关联到SPJ表即可。

select distinct PNOfrom SPJwhere SNO in(select SNOfrom Swhere CITY='上海');
(6)找出使用上海产的零件的工程名称

分析:思路很简单,我们根据S表的上海属性,来查询对应的SNO,根据SNO关联到SPJ,匹配到对应的JNO,再根据JNO连接到J表,查询出JNAME

方法1:

select distinct JNAMEfrom Jwhere JNO in(select JNOfrom SPJwhere SNO in(select SNO from Swhere S.CITY='上海'));
方法2:

select distinct JNAMEfrom Jwhere JNO in(select JNOfrom SPJ,Swhere SPJ.SNO=S.SNOand S.CITY='上海');

方法3:

select distinct JNAMEfrom J,SPJ,Swhere J.JNO=SPJ.JNOand SPJ.SNO=S.SNOAND S.CITY='上海';
(6)

找出没有使用天津产的零件的工程号码

分析:天津找SNO,关联到SPJ,找到JNO,关联到J表

select JNOfrom Jwhere not exists(select * from SPJwhere SPJ.JNO=J.JNOand SNO in(select SNOfrom Swhere CITY='天津'));

方法二:

select JNOfrom Jwhere not exists(select * from SPJ,Swhere SPJ.JNO=J.JNOand SPJ.SNO=S.SNOand S.CITY='天津');

(8)把全部红色零件的颜色改成蓝色

分析:该P表即可

update Pset COLOR='蓝'where COLOR='红';

(9)y由S5供给J4的零件P6改为由S3供应

分析:这几个属性都是SPJ表的,不外乎在where的时候,多几个条件

update SPJset SNO='S3'where SNO='S5'and JNO='J4'and PNO='P6';

(10)从供应商关系中删除S2的记录,并从供应情况关系中删除相应的记录

分析:先删除SPJ表中的记录,反之是不和逻辑的,会失败。(不存在却有记录)

delete from SPJwhere SNO='S2';
delete from Swhere SNO='S2';
(11)请将(S2,J2,P4,200)插入供应情况关系

分析: 指定列名就按照列明的顺序插入,否则需要按照表的顺序

理论上:

insert into SPJvalues('S2','P4','J6',200);

但是插入失败,因为spj是子表,插入不允许。

查询发现S2没有了,应该是前面删除了,加上之后,再插入成功。(必须保证插入的SNO,JNO,PNO即所有外键在父表都存在)

0 0
原创粉丝点击