大家好我是SQL的新手,并试图自己学习它。 当我在sqlzoo网站上完成教程问题时,我有以下问题。假设我有一张表格,其中包含世界上所有国家/地区的信息。
当我想查询其名称中包含' A'和' B' ,我使用以下查询
SELECT name
FROM world
WHERE name LIKE '%A%'
AND name LIKE '%B%'
这里我可以重复使用name LIKE
查询
但是,当我想查询其名称为越南和泰国的国家时,我只能使用查询
SELECT name
FROM world
WHERE name IN ('Thailand', 'Vietnam')
而不是
WHERE name = 'Thailand'
AND name = 'Vietnam'
有人可以解释这背后的原因吗?当我可以使用许多AND xxxx
时,我不能使用它。
非常感谢!
答案 0 :(得分:3)
WHERE name = 'Thailand'
AND name = 'Vietnam'
这个搜索同时拥有泰国'泰国'和越南'在它的名字。但是
SELECT name
FROM world
WHERE name IN ('Thailand', 'Vietnam')
这个搜索的国家/地区名称是“泰国”和“泰国”。或者'越南'
这是他们之间的差别。
答案 1 :(得分:2)
WHERE name = 'Thailand' AND name = 'Vietnam'
AND是一个布尔AND,并返回结果,其中国家/地区名称=泰国和名称=越南。
改为使用
WHERE name = 'Thailand' OR name = 'Vietnam'
答案 2 :(得分:2)
并向您返回遵守您所声明的所有规则的结果。
国名可以是'泰国'和SAME国家名称是越南', 同时?我希望你看到答案是否定的。 所以这是一个典型的例子,你需要使用' OR'而不是' AND', 为什么?因为那时你会得到一个结果,其名称='泰国'以及名称='越南'的结果,因为他们都遵守' OR'规则,意思是两个名字都是“越南”和“越南”。或者'泰国'。
在您提到的第一种情况下,使用AND而不是OR的错误方法对您有用的原因是因为您使用的是通配符。还有一些国家/地区名称,您可以在其中找到“A'和一个' B'同一时间在同一国家名称内的不同地方。
希望这有帮助。
答案 3 :(得分:1)
WHERE name IN ('Thailand', 'Vietnam')
与
相同WHERE name = 'Thailand'
OR name = 'Vietnam'
答案 4 :(得分:0)
如果你想检查条件以匹配给定元素列表中的任何一个元素,那么你应该使用。
WHERE name IN ('Thailand', 'Vietnam')
如果你想满足这两个条件,你应该使用下面的代码
WHERE name = 'Thailand'
AND name = 'Vietnam'
注意: - AND条件的结果应始终为false 因为名字可以是泰国'或者'越南'
答案 5 :(得分:0)
WHERE
条件始终应用每条记录。所以
WHERE name = 'Thailand'
AND name = 'Vietnam'
并不意味着:在表格中查找“泰国”和“越南”名称的所有记录。
这意味着:查找名称与“泰国”和“越南”相同的记录。但是一个名字只能是“泰国”或“越南”,或者都不是,当然也不能同时出现。
因此,请使用OR
来查找名称等于'泰国'或'越南'的记录:
WHERE name = 'Thailand'
OR name = 'Vietnam'
正如您已经知道的那样,您可以使用IN
来查找国家/地区列表,从而使其更具可读性
WHERE name IN ('Thailand', 'Vietnam')
并且不容易出错。一个典型的错误:
WHERE name = 'Thailand' OR name = 'Vietnam'
AND size = 'big'
转换为
WHERE name = 'Thailand'
OR (name = 'Vietnam' AND size = 'big')
而不是
WHERE (name = 'Thailand' OR name = 'Vietnam')
AND size = 'big'
因为AND
优先于OR
。因此,当同时使用AND
和OR
使用括号时。如上所述,如果可能,请使用IN
代替OR
。