2017-04-05 74 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