查询在具有最小内存容量的所有PC中具有最快处理器的PC制造商

本题目要求编写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表:

makermodeltype
D2003便携式电脑
D3001打印机
A1001个人电脑
A1002个人电脑
A1003个人电脑
B1004个人电脑
pc表:
modelspeedramhdcdprice
1001133.00161.606X1595
1002120.00161.606X1399
1003166.00242.506X1899
1004166.00322.506X1999

输出样例:

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
然后发现自己只对speed进行了约束,缺少对ram的约束。

正确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)
		)
		;

逻辑完整性很重要!!!!

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值