本题目要求编写SQL语句, 查询由生产厂商B生产的所有产品的型号(model) 和价格(price)。 提示:查询按照pc、laptop和printer的顺序进行。
表结构:
CREATE TABLE product
( maker CHAR(20) , --制造商
model CHAR(20) NOT NULL, --产品型号
type CHAR(20), --产品类型
PRIMARY KEY(model)
);
CREATE TABLE laptop
( model CHAR(20) NOT NULL, --型号
speed DECIMAL(6,2), --速度
ram INT, --内存
hd DECIMAL(6,2), --硬盘容量
screen DECIMAL(6,2), --屏幕大小
price INT, --价钱
PRIMARY KEY(model),
FOREIGN KEY(model) REFERENCES product(model)
);
CREATE TABLE printer
( model CHAR(20) NOT NULL, --型号
color BIT, --是否彩色
type CHAR(10), --类型
price INT, --价钱
PRIMARY KEY(model),
FOREIGN KEY(model) REFERENCES product(model)
);
CREATE TABLE pc
( model CHAR(20) NOT NULL, --型号
speed DECIMAL(6,2), --速度
ram INT, --内存
hd DECIMAL(6,2), --硬盘容量
cd CHAR(4), --光驱
price INT, --价钱
PRIMARY KEY(model),
FOREIGN KEY(model) REFERENCES product(model)
);
表样例:
product表:
maker | model | type |
---|---|---|
A | 1001 | 个人电脑 |
D | 2003 | 便携式电脑 |
D | 3001 | 打印机 |
D | 2001 | 便携式电脑 |
B | 1006 | 个人电脑 |
B | 3002 | 打印机 |
pc表:
model | speed | ram | hd | cd | price |
---|---|---|---|---|---|
1001 | 133.00 | 16 | 1.60 | 6X | 1595 |
1006 | 200.00 | 32 | 3.1 | 8X | 2099 |
laptop表:
model | speed | ram | hd | screen | price |
---|---|---|---|---|---|
2001 | 100.00 | 20 | 1.10 | 9.50 | 1999 |
2003 | 117.00 | 32 | 1.00 | 11.20 | 3599 |
printer表;
model | color | type | price |
---|---|---|---|
3001 | 1 | 喷墨 | 275 |
3002 | 1 | 喷墨 | 269 |
输出样例:
model | price |
---|---|
1006 | 2099 |
3002 | 269 |
分析:
题目说查询所有由B生产的产品型号和价格,我想到的就是让条件为 maker=‘B’;题目还规定了产品类型的查询顺序,并且查询的投影都是型号和价格,因此可以使用union
思路一:
先将不同类型的产品的所有数据投影到型号和价格,使用union并起来,再筛选条件 maker=‘B’
思路二:
按照pc、laptop、printer的顺序,分别筛选出maker=‘B’的产品,再将三个结果用union并起来
我的代码(思路一):
select model,price
from(select model,price from pc
union
select model,price from laptop
union
select model,price from printer
) a
where model in (select model from product where maker='B')