SQL WHERE和LIKE子句重复

时间:2017-04-05 06:05:31

标签: mysql sql sql-server oracle

大家好我是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时,我不能使用它。

非常感谢!

6 个答案:

答案 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。因此,当同时使用ANDOR使用括号时。如上所述,如果可能,请使用IN代替OR