问题描述
CREATE TABLE Sailors (
sid INTEGER,sname CHAR(20),rating INTEGER,age REAL,PRIMARY KEY (sid));
INSERT INTO Sailors VALUES
(1,'Hu',10,22),(2,'Gat',11,39),(3,'Ej',1,27),(4,'Pon',5,19);
这是我的查询:
SELECT *
FROM Sailors S
WHERE NOT EXISTS
(SELECT *
FROM Sailors S2
WHERE S.age > S2.age);
它返回最年轻的水手。你能一步一步地向我解释它是如何工作的吗?
解决方法
对于每个水手,它执行 subquery 以检查是否有任何年轻的水手(其中 S.age > S2.age)。如果有,它们会被过滤掉(不存在的地方)。
这可以通过找到最小年龄然后选择所有水手来更简单、更快捷地完成。
select *
from sailors
where age = (
select min(age) from sailors
);