2016-05-26 50 views
2

取這兩個查詢: -不同類型的括號如何在SQL查詢中起作用?

SELECT * from movies WHERE (year BETWEEN 1990 AND 2000) AND (genre='comedy'); 
SELECT * from movies WHERE year BETWEEN 1990 AND 2000 AND genre='comedy'; 

是他們總是相同的技術,賦予相同的輸出?還是取決於我們使用的數據庫?同樣,{}和[]怎麼樣?

+1

在這種情況下,第一個AND與BETWEEN綁定在一起,所以不需要括號,我想不出任何需要括號的AND查詢。使用OR時,括號非常重要。 –

回答

1

在這種情況下,它們是相同的輸出,因爲只有兩個表達式。圓括號用於爲布爾表達式和數學表達式分組。這與數學和其他編程語言的用法相同。

當您在布爾表達式混合ANDOR,那麼你應該使用圓括號 - 即使沒有必要,他們幫助可讀性。

使用{,},[]是特定於數據庫的。這些不是SQL的標準部分。他們不會將表情分組。例如,[]用於轉義限定符(列和表名稱)。這包含在SQLite中以與SQL Server兼容。

+0

所以使用()對於所有DB總是相同的,並且它們的使用僅用於將表達式分組在一起。是嗎?或者還有其他用法()。 – shanti

1

在這種情況下,他們會給出相同的輸出在你的where子句中在技術上有兩個謂詞。 1990年到2000年之間的年份被認爲是一個謂詞,而genere =喜劇被認爲是另一個謂詞。當兩個謂詞通常涉及時,pamentalhesis可能無關緊要。

然而讓我們以下查詢

select * from sometable where (somecolumn1=x or somecolumn2=y) and somecolumn3=z 

select * from sometable where somecolumn1=x or (somecolumn2=y and somecolumn3=z) 

的示例結果將是針對上述情況不同,因爲它們將基於該條件爲真或假的不同evaulated。

+0

謝謝,你說得好。所以基本上,我們使用()只是將表達式分組在一起。 – shanti

+1

是的,我們也可以用它來檢查值列表.ex:'select * from sometable where somecolumn in(1,2,3)'。這將獲得somecolumn等於1或2或3的所有行 – cableload