我正在做一个SQL问题,问题是:
获取俄罗斯的所有船级。如果数据库中没有俄罗斯类,请获取数据库中的所有类。 结果集:国家/地区,班级
3个答案(#3错了):
select country, class from Classes
where country = ALL(select country from Classes
where country='Russia')
select country, class
from classes
where not exists (select country
from classes
where country='Russia')
or country='Russia'
select distinct country, class
from classes
where country not in(select country
from classes
where country='Russia')
or country='Russia'
任何人都可以解释“所有例子是如何工作的”,我不完全理解这是如何涵盖上述所有案例的:只查找俄语课程,如果没有其他所有案例。
anoyone也可以解释ans2和错误的ans3是如何不同的,我认为它可能与null值有关但我不太确定..对于sql来说是相当新的
答案 0 :(得分:0)
all是对子查询中所有值的比较,我不认为你使用它的方式非常有用。
对于大于,小于等的数字比较,它会更有用。
来自MySQL网站:
SELECT s1 FROM t1 WHERE s1 > ALL (SELECT s1 FROM t2);
这将从t1中选择所有来自t1的s1的s1大于全部的s1。
您的示例
你的例子:select country, class from Classes where country = ALL(select country from Classes where country='Russia')
这个子查询只返回一堆“俄罗斯”,因为你只选择国家等于俄罗斯的国家。
但是,正如Oracle中所记载的那样(未在MySQL中记录),ALL将返回一个真实条件,如果没有值允许您从俄罗斯选择全部,除非没有俄罗斯行。