1. 程式人生 > >資料庫習題自學練習(一)簡單查詢練習

資料庫習題自學練習(一)簡單查詢練習

《資料庫系統概論》(第五版)高等教育出版社 王珊 薩師煊 編著 課後習題自學練習,若有不足望指正。

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');