本题目要求编写SQL语句,
查询至少生产三种不同速度PC的厂商。
表结构:
CREATE TABLE product
( maker CHAR(20) , --制造商
model CHAR(20) NOT NULL, --产品型号
type CHAR(20), --产品类型
PRIMARY KEY(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 |
---|---|---|
D | 2001 | 便携式电脑 |
D | 2002 | 便携式电脑 |
E | 2004 | 便携式电脑 |
D | 3001 | 打印机 |
B | 3002 | 打印机 |
A | 1001 | 个人电脑 |
A | 1002 | 个人电脑 |
A | 1003 | 个人电脑 |
D | 1008 | 个人电脑 |
pc表:
model | speed | ram | hd | cd | price |
---|---|---|---|---|---|
1001 | 133.00 | 16 | 1.60 | 6X | 1595 |
1002 | 120.00 | 16 | 1.60 | 6X | 1399 |
1003 | 166.00 | 32 | 2.50 | 8X | 1999 |
1008 | 180.00 | 32 | 2.00 | 8X | 3699 |
输出样例:
maker |
---|
A |
SELECT maker
FROM product
JOIN pc ON product.model = pc.model
WHERE type = '个人电脑'
GROUP BY maker
HAVING COUNT(DISTINCT speed) >= 3;
首先通过 JOIN
连接 product
表和 pc
表,然后筛选出产品类型为 “个人电脑” 的记录,接着按 maker
分组,最后使用 HAVING
子句筛选出生产至少三种不同速度 PC 的厂商。