比较两个相同的表如何在 sql 中工作?

问题描述

sql 如何比较两个相同的表非常有趣。例如,这是一个架构:

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