本题目要求编写SQL语句, 查询在具有最小内存容量的所有PC中具有最快处理器的PC制造商。
提示:请使用SELECT语句作答。
表结构:
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 | 2003 | 便携式电脑 |
D | 3001 | 打印机 |
A | 1001 | 个人电脑 |
A | 1002 | 个人电脑 |
A | 1003 | 个人电脑 |
B | 1004 | 个人电脑 |
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 | 24 | 2.50 | 6X | 1899 |
1004 | 166.00 | 32 | 2.50 | 6X | 1999 |
输出样例:
maker |
---|
A |
解决办法:
最初的想法是:
SELECT DISTINCT maker
FROM product
WHERE model IN
(
SELECT model
FROM pc
WHERE speed>=ALL(
SELECT speed
FROM pc
WHERE ram <=ALL (
SELECT ram
FROM pc
)
)
);
然而PTA没有通过,自己建了数据库进行测试,结果是:
maker |
---|
A |
B |
正确SQL语句:
SELECT DISTINCT maker
FROM product
WHERE model IN
(
SELECT model
FROM pc
WHERE speed>=ALL(
SELECT speed
FROM pc
WHERE ram <=ALL (
SELECT ram
FROM pc
)
)
AND
ram <= ALL(
SELECT ram
FROM pc
)
);
或者
SELECT maker
FROM pc,product
WHERE
pc.model=product.model
AND
ram=(
SELECT MIN(ram) FROM pc
)
AND
speed = (
SELECT MAX(speed) FROM pc WHERE ram =(SELECT MIN(ram) FROM pc)
)
;
逻辑完整性很重要!!!!