Sql 按字母顺序查找唯一对象
我试图通过SQLZOO网站了解SQL是如何工作的。我在这项任务上结巴了:按字母顺序列出每一个大陆和排在第一位的国家的名称。我试过这个:Sql 按字母顺序查找唯一对象,sql,Sql,我试图通过SQLZOO网站了解SQL是如何工作的。我在这项任务上结巴了:按字母顺序列出每一个大陆和排在第一位的国家的名称。我试过这个: SELECT DISTINCT continent, name FROM world WHERE name LIKE 'A%' ORDER BY name 但后来我发现: SELECT continent, name FROM world x WHERE name <= ALL(SELECT name FROM world y WHERE x.
SELECT DISTINCT continent, name
FROM world
WHERE name LIKE 'A%'
ORDER BY name
但后来我发现:
SELECT continent, name
FROM world x
WHERE name <= ALL(SELECT name FROM world y WHERE x.continent = y.continent)
选择大陆、名称
来自世界x
其中名称您的代码仅查找以A开头的国家,如阿尔巴尼亚、奥地利和安道尔
这段代码做了一些完全不同的事情:
SELECT continent, name
FROM world x
WHERE name <= ALL (SELECT name FROM world y WHERE x.continent = y.continent);
或者更简单地说:
SELECT continent, MIN(name)
FROM world
GROUP BY continent;
我认为这两种方法都用一种更简单的方式来表达逻辑。对于文本类型的数据来说,什么是“最小值”(MIN(name)“?MIN()
和MAX()
在字符串上定义得非常好。从技术上讲,他们使用一种叫做“排序规则”(你可以研究)。实际上,它使用字母顺序。但是为什么DISTICNT本身不给出唯一的名称/值呢?“这对我没有任何意义,我真的不明白。”气球熊selectdistinct
是SQL中的一个子句,它跨select
中的所有列/表达式返回唯一值。它不会仅基于一列返回不同的值。为什么在我的代码中,如果在开始时使用distinct,它会返回两次欧洲?
SELECT continent, MIN(name)
FROM world
GROUP BY continent;