取這兩個查詢: -不同類型的括號如何在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';
是他們總是相同的技術,賦予相同的輸出?還是取決於我們使用的數據庫?同樣,{}和[]怎麼樣?
取這兩個查詢: -不同類型的括號如何在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';
是他們總是相同的技術,賦予相同的輸出?還是取決於我們使用的數據庫?同樣,{}和[]怎麼樣?
在這種情況下,它們是相同的輸出,因爲只有兩個表達式。圓括號用於爲布爾表達式和數學表達式分組。這與數學和其他編程語言的用法相同。
當您在布爾表達式混合AND
和OR
,那麼你應該使用圓括號 - 即使沒有必要,他們幫助可讀性。
使用{
,}
,[
和]
是特定於數據庫的。這些不是SQL的標準部分。他們不會將表情分組。例如,[
和]
用於轉義限定符(列和表名稱)。這包含在SQLite中以與SQL Server兼容。
所以使用()對於所有DB總是相同的,並且它們的使用僅用於將表達式分組在一起。是嗎?或者還有其他用法()。 – shanti
在這種情況下,他們會給出相同的輸出在你的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。
在這種情況下,第一個AND與BETWEEN綁定在一起,所以不需要括號,我想不出任何需要括號的AND查詢。使用OR時,括號非常重要。 –