資料庫習題自學練習(一)簡單查詢練習
《資料庫系統概論》(第五版)高等教育出版社 王珊 薩師煊 編著 課後習題自學練習,若有不足望指正。
P70T6
設有一個數據庫SPJ資料庫,包括S、P、J及SPJ 4個關係模式:
S(SNO,SNAME,STATUS,CITY);
P(PNO,PNAME,COLOR,WEINGHT);
J(JNO,JNAME,CITY);
SPJ(SNO,PNO,JNO,QTY)。
供應商表由供應商程式碼(SNO)、供應商姓名(SNAME)、供應商狀態(STATUS)、供應商所在城市(CITY)。
零件表由零件程式碼(PNO)、零件名(PNAME)、顏色(COLOR)、重量(WEIGHT)組成。
工程專案表J由工程專案程式碼(JNO)、工程專案名(JNAME)、工程專案所在城市(CITY)組成。
供應情況表SPJ由供應商程式碼(SNO)、零件程式碼(PNO)、工程專案程式碼(JNO)、供應數量(QTY)組成,表示某供應商供應某種零件給某工程專案的數量為QTY。
完成表的建立與資料的填入,如下所示:
s表
p表
j表
spj表
使用SQL語言完成以下查詢:
(1)求供應工程J1零件的供應商號碼SNO;
(2)求供應工程J1零件P1的供應商號碼SNO;
(3)求供應工程J1零件為紅色的供應商號碼SNO;
(4)求沒有使用天津供應商生產的紅色零件的工程好JNO;
(5)求至少用了供應商S1所供應的全部零件的工程和JNO;
解答:
(1)在spj表裡查詢SNO為S1的條目的JNO即可。
select jno from spj where sno='S1';
(2)在spj表裡查詢JNO為J1且PNO為P1的條目的SNO即可。
select sno from spj where jno='j1' and pno='p1';
(3)在p表中查詢顏色color和零件號PNO資訊,在spj表中查詢工程號JNO和零件號PNO資訊,當spj表和p表中的的PNO相同時則該條目的供應商程式碼SNO則是我們需要查詢到的資訊。
SELECT sno from spj,p where jno='J1'and p.color='紅' and spj.pno=p.pno;
(4)欲求沒有使用天津供應商生產的紅色零件的工程好JNO可以先求使用天津供應商生產的紅色零件的工程好JNO然後與總體求反即可,使用NOT IN實現求反過程。
select jno from j where jno not in (select jno from spj,s,p where s.city='天津' and p.color='紅' and spj.sno=s.sno and spj.pno=p.pno);
(5)欲求至少用了供應商S1所供應的全部零件的工程和JNO,可以先用了供應商S1所供應的全部零件的工程和JNO的集合,然後IN語句從集合中提取j表的JNO即可。
select jno from j where jno in(select jno from spj where sno='S1');