2017-04-05 141 views
1

嗨,大家好我是SQL新手,试图自己学习它。 当我在sqlzoo网站上做了教程问题时,我有以下问题。假设我有一张包含世界上所有国家信息的表格。SQL WHERE和LIKE子句重复

当我要查询其名称包含“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,当我不能使用它。

非常感谢!

+4

您应该使用'WHERE name ='泰国' OR name ='越南'。研究“AND”和“OR”的区别。 – Renzo

+0

正如@Renzo所说的。检查名称是“泰国”和“越南”都没有意义。它根本没有意义,但“OR”正是为了这些目的。 – Detilium

回答

1
WHERE name IN ('Thailand', 'Vietnam') 

相同

WHERE name = 'Thailand' 
OR name = 'Vietnam' 
2
WHERE name = 'Thailand' AND name = 'Vietnam' 

,是一个布尔AND并返回结果,其中国家名称=泰国和名称=越南单行。

而是使用

WHERE name = 'Thailand' OR name = 'Vietnam' 
3
WHERE name = 'Thailand' 
AND name = 'Vietnam' 

为此在其名称中既有“泰国”和“越南国家这一次搜索。但

SELECT name 
FROM world 
WHERE name IN ('Thailand', 'Vietnam') 

这一个搜索国家,名称是“泰国”或“越南”

这就是他们之间的尊重。

0

如果你想检查条件来匹配给定元素列表中的任何一个元素,那么你应该使用。

WHERE name IN ('Thailand', 'Vietnam') 

,如果你要满足这两个条件,那么你应该在下面的代码中使用

WHERE name = 'Thailand' 
AND name = 'Vietnam' 

注: - AND条件应该总是假 因为名字可以是“泰国”或“越南的结果'

2

并返回给你的结果服从你所说的所有规则。

一个国家的名字是'泰国',同一个国家的名称是'越南', ?我希望你看到这个答案是否定的。 所以这是一个经典的例子,你需要使用'或'而不是'AND', 为什么?因为那么你会得到一个名字='泰国'的结果,以及名称='越南'的结果,因为它们都遵守'OR'规则,这意味着两个名称都是'越南'或'泰国' 。

在您提到的第一种情况下,使用AND而不是OR的错误方法正是为您工作的原因,因为您使用的是通配符。还有国名,你可以在同一时间在同一个国家名称的不同地方有'A'和'B'。

希望这会有所帮助。

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