題目
現有一產品數據庫,該數據庫模式由四個關系組成,這四個關系的模式如下:
\(Product(maker,model,type)\)
\(PC(model,speed,ram,hd,price)\)
\(Laptop(model,speed,ram,id,hd,screen,price)\)
\(Printer(model,color,type,price)\)
試寫出下列查詢的關系代數表達式,並針對下面數據樣例,給出查詢的結果。(你的答案應該在任何數據上都能正確工作,而不僅限於圖中的數據)
a)哪種PC模型具有最少3.00的速度?
b)哪個生產廠商的筆記本電腦(筆記本)的硬盤容量至少100GB?
c)查詢廠商B生產的所有產品的型號和價格。
d)查詢所有彩色激光打印機的型號。
e)查詢那些只出售筆記本電腦,不出售PC的廠商。
f)查詢在一種或者兩種PC機中出現過的硬盤的容量。
g)查詢有同樣處理速度和同樣內存大小的PC對。每對只被列表一次,即列表給出\((i,j)\)但不給出\((j,i)\)。
h)查詢那些至少生產兩種處理速度大於2.80的PC或者筆記本電腦的廠商。
i)查詢平均處理速度(PC或者是筆記本電腦)最高的所有廠商。
j)查詢至少生產三種不同處理速度電腦的廠商。
k)查詢恰好出售三種型號的PC廠商。
四個關系的數據樣例如下圖所示:
a)哪種PC模型具有最少3.00的速度?
1.要操作的表:\(PC\)
2.要進行的操作:選擇、投影
3.各操作的對象和順序
- 選擇關系\(PC\)中\(speed\ge3.0\)的元組:\(R_1:=\sigma_{speed\ge3.0}(PC)\)
- 將\(R_1\)投影到屬性\(model\)上:\(R_2:=\pi_{model}(R_1)\)
4.關系代數表達式
- \(\pi_{model}(\sigma_{speed\ge3.0}(PC))\)
5.數據樣例查詢結果
\(model\) |
---|
1005 |
1006 |
1013 |
b)哪個生產廠商的筆記本電腦(筆記本)的硬盤容量至少100GB?
1.要操作的表:\(Laptop\)、\(Product\)
2.要進行的操作:選擇、自然連接、投影、差
3.各操作的對象和順序
- 選擇關系\(Laptop\)中\(hd<100\)的元組\(R_1\):\(R_1:=\sigma_{hd<100}(Laptop)\)
- 將關系\(Product\)和關系\(R_1\)自然連接:\(R_2:=R_1\bowtie Product\)
- 將\(R_2\)投影到屬性\(maker\)上:\(R_3:=\pi_{maker}(R_2)\)
- 將關系\(Product\)和關系\(Laptop\)自然連接:\(R_4:=Product\bowtie Laptop\)
- 將關系\(R_4\)投影到屬性\(maker\)上:\(R_5:=\pi_{maker}(R_4)\)
- 求關系\(R_5\)和關系\(R_3\)的差:\(R_6:=R_5-R_3\)
4.關系代數表達式
- \(Product\bowtie Laptop-\pi_{maker}(\sigma_{hd<100}(Laptop)\bowtie Product)\)
5.數據樣例查詢結果
\(maker\) |
---|
B |
G |
c)查詢廠商B生產的所有產品的型號和價格。
1.要操作的表:\(Product\)、\(PC\)、\(Laptop\)、\(Printer\)
2.要進行的操作:選擇、投影、自然連接、並
3.各操作的對象和順序
- 選擇關系\(Product\)中\(maker='B'\)的元組:\(R_1:=\sigma_{maker='B'}(Product)\)
- 將關系\(R_1\)投影到屬性\(model\)上:\(R_2:=\pi_{model}(R_1)\)
- 將關系\(R_2\)和關系\(PC\)自然連接:\(R_3:=R_2\bowtie PC\)
- 將關系\(R_2\)和關系\(Laptop\)自然連接:\(R_4:=R_2\bowtie Laptop\)
- 將關系\(R_2\)和關系\(Printer\)自然連接:\(R_5:=R_2\bowtie Printer\)
- 將關系\(R_3\)投影到屬性組\(\{ model,price \}\)上:\(R_6:=\pi_{model,price}(R_3)\)
- 將關系\(R_4\)投影到屬性組\(\{ model,price \}\)上:\(R_7:=\pi_{model,price}(R_4)\)
- 將關系\(R_5\)投影到屬性組\(\{ model,price \}\)上:\(R_8:=\pi_{model,price}(R_5)\)
- 將關系\(R_6\)、\(R_7\)和\(R_8\)並起來:\(R_9:=R_6\cup R_7\cup R_8\)
4.關系代數表達式
- \(R_9\),該表達式展開寫會太長,因此省略其展開式。
5.數據樣例查詢結果
\(model\) | \(price\) |
---|---|
1004 | 649 |
1005 | 630 |
1006 | 1049 |
2007 | 1429 |
d)查詢所有彩色激光打印機的型號。
1.要操作的表:\(Printer\)
2.要進行的操作:選擇、投影
3.各操作的對象和順序
- 選擇關系\(Printer\)中\(color=true\)並且\(type='laser'\)的元組:\(R_1:=\sigma_{color=true\wedge type='laser'}(Printer)\)
- 將關系\(R_1\)投影到屬性\(model\)上:\(R_2:=\pi_{model}(R_1)\)
4.關系代數表達式
- \(\pi_{model}(\sigma_{color=true\wedge type='laser'}(Printer))\)
5.數據樣例查詢結果
\(model\) |
---|
3003 |
3007 |
e)查詢那些只出售筆記本電腦,不出售PC的廠商。
20200320更新:經網友@我要我覺得提醒,發現下邊的\(R_1\)和\(R_2\)有點錯誤,具體可看本文評論和我修改后的答案(想看修改后的答案的話繼續往下看就找到了)
1.要操作的表:\(Product\)、\(PC\)、\(Laptop\)
2.要進行的操作:自然連接、投影、差
3.各操作的對象和順序
- 將關系\(Product\)與關系\(Laptop\)自然連接:\(R_1:=Product\bowtie Laptop\)
- 將關系\(Product\)與關系\(PC\)自然連接:\(R_2:=Product\bowtie PC\)
- 將關系\(R_1\)投影到屬性\(maker\)上:\(R_3:=\pi_{maker}(R_1)\)
- 將關系\(R_2\)投影到屬性\(maker\)上:\(R_4:=\pi_{maker}(R_2)\)
- 求關系\(R_3\)和\(R_4\)的差:\(R_5:=R_3-R_4\)
4.關系代數表達式
- \(\pi_{maker}(Product\bowtie Laptop)-\pi_{maker}(Product\bowtie PC)\)
5.數據樣例查詢結果
\(maker\) |
---|
F |
G |
20200320將\(R_1\)和\(R_2\)的錯誤修改后,正確答案應該如下:
1.要操作的表:\(Product\)
2.要進行的操作:選擇、投影、差
3.各操作的對象和順序
- 選擇屬性\(type\)的值為\(laptop\)的\(Product\):\(R_1:=\sigma_{type=laptop}(Product)\)
- 選擇屬性\(type\)的值為\(pc\)的\(Product\):\(R_2:=\sigma_{type=pc}(Product)\)
- 將關系\(R_1\)投影到屬性\(maker\)上:\(R_3:=\pi_{maker}(R_1)\)
- 將關系\(R_2\)投影到屬性\(maker\)上:\(R_4:=\pi_{maker}(R_2)\)
- 求關系\(R_3\)和\(R_4\)的差:\(R_5:=R_3-R_4\)
4.關系代數表達式
- \(\pi_{maker}(\sigma_{type=laptop}(Product))-\pi_{maker}(\sigma_{type=pc}(Product))\)
5.數據樣例查詢結果
\(maker\) |
---|
F |
G |
f)查詢在一種或者兩種PC機中出現過的硬盤的容量。
1.要操作的表:\(PC\)
2.要進行的操作:重命名、\(\theta\)連接、投影、差
3.各操作的對象和順序
-
將關系\(PC\)通過重命名復制:\(R_1:=\rho_{PC1(model_1,speed,ram,hd,price)}(PC)\)
-
將關系\(PC\)通過重命名復制:\(R_2:=\rho_{PC2(model_2,speed,ram,hd,price)}(PC)\)
-
將關系\(R_1\)和\(R_2\)進行\(\theta\)連接:\(R_3:=R_1\bowtie_{R_1.hd=R_2.hd\wedge R_1.model_1\neq R_2.model_2}R_2\)
-
將關系\(R_3\)和\(PC\)進行\(\theta\)連接:\(R_4:=PC\bowtie_{PC.hd=R_3.hd\wedge PC.model\neq R_3.model_1\wedge PC.model\neq R_3.model_2}R_3\),由此得到至少出現三次的\(hd\)值
-
將關系\(R_4\)投影到屬性\(hd\)上:\(R_5:=\pi_{hd}(R_4)\)
-
將關系\(PC\)投影到屬性\(hd\)上:\(R_6:=\pi_{hd}(PC)\)
-
求關系\(R_6\)和\(R_5\)的差:\(R_7:=R_6-R_5\)
4.關系代數表達式
- \(R_7\),該關系代數表達式展開長度太長,略
5.數據樣例查詢結果
\(hd\) |
---|
80 |
320 |
200 |
300 |
160 |
g)查詢有同樣處理速度和同樣內存大小的PC對。
1.要操作的表:\(PC\)
2.要進行的操作:重命名、\(\theta\)連接、投影
3.各操作的對象和順序
- 將關系\(PC\)通過重命名復制:\(R_1:=\rho_{PC1(model_1,speed,ram,hd,price)}(PC)\)
- 將關系\(PC\)通過重命名復制:\(R_2:=\rho_{PC2(model_2,speed,ram,hd,price)}(PC)\)
- 將關系\(R_1\)和\(R_2\)進行\(\theta\)連接:\(R_3:=R_1\bowtie_{R_1.speed=R_2.speed\wedge R_1.ram=R_2.ram\wedge R_1.model_1\neq R_2.model_2}R_2\)
- 將關系\(R_3\)投影到屬性組\(\{ model_1,model_2 \}\)上:\(R_4:=\pi_{model_1,model_2}(R_3)\)
4.關系代數表達式
- \(R_4\),該關系代數表達式展開長度太長,略
5.數據樣例查詢結果
\(model_1\) | \(model_2\) |
---|---|
1004 | 1012 |
h)查詢那些至少生產兩種處理速度大於2.80的PC或者筆記本電腦的廠商。
1.要操作的表:\(PC\)
2.要進行的操作:選擇、並、投影、自然連接、重命名、\(\theta\)連接
3.各操作的對象和順序
- 選擇關系\(PC\)中屬性\(speed>2.80\)的元組:\(R_1:=\sigma_{speed>2.80}(PC)\)
- 選擇關系\(Laptop\)中屬性\(speed>2.80\)的元組:\(R_2:=\sigma_{speed>2.80}(Laptop)\)
- 將關系\(R_1\)和\(R_2\)並起來,並求其在屬性\(model\)上的投影:\(R_3=\pi_{model}(R_1\cup R_2)\)
- 將關系\(R_3\)與\(Product\)自然連接,並求其在屬性組\(\{ maker,model \}\)上的投影:\(R_4:=\pi_{maker,model}(R_3\bowtie Product)\)
- 將關系\(R_4\)通過重命名復制:\(R_5:=\rho_{R_5(maker,model_5)}(R_4)\)
- 將關系\(R_4\)通過重命名復制:\(R_6:=\rho_{R_6(maker,model_6)}(R_4)\)
- 將關系\(R_5\)和\(R_6\)進行\(\theta\)連接:\(R_7:=R_5\bowtie_{R_5.maker=R_6.maker\wedge R_5.model_5\neq R_6.model_6}R_6\)
- 將關系\(R_7\)投影到屬性\(maker\)上:\(R_8:=\pi_{maker}(R_7)\)
4.關系代數表達式
- \(R_8\),該關系代數表達式展開長度太長,略
5.數據樣例查詢結果
\(maker\) |
---|
B |
i)查詢平均處理速度(PC或者是筆記本電腦)最高的所有廠商。
1.要操作的表:\(PC\)、\(Laptop\)、\(Product\)
2.要進行的操作:投影、重命名、\(\theta\)連接、差、自然連接
3.各操作的對象和順序
- 將關系\(PC\)和\(Laptop\)投影到屬性組\(\{ model,speed \}\)上並將兩者並起來:\(R_1:=\pi_{model,speed}(PC)\cup\pi_{model,speed}(Laptop)\)
- 通過重命名復制關系\(R_1\):\(R_2:=\rho_{R_2}(R_1)\)
- 關系\(R_1\)和\(R_2\)進行\(\theta\)連接:\(R_3:=R_1\bowtie_{R_1.speed<R_2.speed} R_2\),求出\(speed\)小於最大值的元組
- 求關系\(R_1\)和\(R_3\)的差:\(R_4:=R_1-R_3\)
- 關系\(R_4\)和\(Product\)自然連接:\(R_5:=R_4\bowtie Product\)
4.關系代數表達式
- \(R_5\),該關系代數表達式展開長度太長,略
5.數據樣例查詢結果
\(maker\) |
---|
B |
j)查詢至少生產三種不同處理速度電腦的廠商。
1.要操作的表:\(PC\)、\(Product\)
2.要進行的操作:自然連接、投影、重命名、\(\theta\)連接
3.各操作的對象和順序
- 關系\(Product\)和\(PC\)自然連接並投影到屬性組\(\{ maker,speed \}\)上:\(R_1:=\pi_{maker,speed}(Procuct\bowtie PC)\)
- 復制並重命名關系\(R_1\):\(R_2:=\rho_{R_2(maker,speed_2)}(R_1)\)
- 復制並重命名關系\(R_1\):\(R_3:=\rho_{R_3(marker,speed_3)}(R_1)\)
- 關系\(R_1\)和\(R_2\)進行\(\theta\)連接:\(R_4:=R_1\bowtie_{R_1.maker=R_2.maker\wedge R_1.speed\neq R_2.speed_2}R_2\)
- 關系\(R_3\)和\(R_4\)進行\(\theta\)連接:\(R_5:=R_3\bowtie_{R_3.maker=R_4.maker\wedge R_4.speed\neq R_3.speed_3 /wedge R_4.speed_2\neq R_3.speed_3}R_4\)
- 將關系\(R_5\)投影到屬性\(maker\)上:\(R_6:=\pi_{maker}(R_5)\)
4.關系代數表達式
- \(R_5\),該關系代數表達式展開長度太長,略
5.數據樣例查詢結果
\(maker\) |
---|
A |
D |
E |
k)查詢恰好出售三種型號的PC廠商。
1.要操作的表:\(PC\)、\(Product\)
2.要進行的操作:自然連接、投影、重命名、\(\theta\)連接、差
3.各操作的對象和順序
- 關系\(Product\)和\(PC\)自然連接並投影到屬性組\(\{ maker,model \}\)上:\(R_1:=\pi_{maker,model}(Procuct\bowtie PC)\)
- 復制並重命名關系\(R_1\):\(R_2:=\rho_{R_2(maker,model_2)}(R_1)\)
- 復制並重命名關系\(R_1\):\(R_3:=\rho_{R_3(marker,model_3)}(R_1)\)
- 復制並重命名關系\(R_1\):\(R_4:=\rho_{R_4(marker,model_4)}(R_1)\)
- 關系\(R_1\)和\(R_2\)進行\(\theta\)連接:\(R_5:=R_1\bowtie_{R_1.maker=R_2.maker\wedge R_1.model\neq R_2.model_2}R_2\)
- 關系\(R_3\)和\(R_5\)進行\(\theta\)連接:\(R_6:=R_3\bowtie_{R_3.maker=R_5.maker\wedge R_5.model\neq R_3.model_3 /wedge R_5.model_2\neq R_3.model_3}R_5\)
- 關系\(R_4\)和\(R_6\)進行\(\theta\)連接:\(R_7:=R_4\bowtie_{R_4.maker=R_6.maker\wedge R_6.model\ne R_4.model_4 \wedge R_6.model_2\ne R_4.model_4 \wedge R_6.model_3\ne R_4.model_4}R_6\)
- 求關系\(R_6\)和\(R_7\)的差:\(R_8:=R_6-R_7\)
- 將關系\(R_8\)投影到屬性\(maker\)上:\(R_8:=\pi_{maker}(R_8)\)
4.關系代數表達式
- \(R_8\),該關系代數表達式展開長度太長,略
5.數據樣例查詢結果
\(maker\) |
---|
A |
B |
D |
E |
作者:@臭咸魚
轉載請注明出處:https://www.cnblogs.com/chouxianyu/
歡迎討論和交流!