题目
现有一产品数据库,该数据库模式由四个关系组成,这四个关系的模式如下:
$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/
欢迎讨论和交流!