2011-05-11 34 views
12

想知道是否有人會知道爲什麼我們在這個SQL使用括號: 所以,格式去如下:員工的服務SQL括號or子句中使用

名稱,位置和部門名字以A或B開頭。(法語粗略翻譯)。

我回答方式如下:

SELECT service.nom_serv, localite.ville, localite.departemen 
FROM service, localite, employe 
WHERE service.code_loc=localite.code_loc 
AND employe.service=service.code_serv 
AND ((employe.nom LIKE 'A%') OR (employe.nom LIKE 'B%')) 

基本上,其中最後一個,並關切的WHERE,不能我只是做沒有括號,以具有SQL選擇我的員工與他們的名字從A還是B開始?以這種方式定位括號有什麼區別?而且,是否有括號的雙重用法?或者是在上一節中優先考慮OR,因爲AND在它之前?

+0

只是請忘記關於圓括號的星號..這是我在這裏發佈的一個錯誤,當我發佈這個問題。 – angela 2011-05-11 16:58:31

+1

我刪除了它們。 – 2011-05-11 17:00:01

+0

感謝您的答案!幫助了很多 – angela 2011-05-11 17:12:45

回答

19

看一下SQL Server中的Operator Precedence(你沒有詳細說明,但我想可能對所有的RDBMS都是一樣的)。這意味着在ORs之前評估ANDs(沒有括號)。

在特定情況下

所以,如果沒有括號,條件是:

  • employe.service=service.code_serv AND employe.nom LIKE 'A%'

OR

  • employe.nom LIKE 'B%'
10

您使用它來指定子句的分組,而不是優先級。 SQL不允許指定優先級,因爲優化器將爲您創建最佳優先級。

AND() 

將在一個語句中同時使用OR條件。所以如果兩者都是對的,那麼AND也是如此。內部括號不是必需的,但有助於分離的可視化。

沒有外括號,它會允許任何與final子句一樣的情況。

0

我認爲*有強調的東西,所以我現在忽略它們。如果我錯了,請隨時糾正我。

我建議做這樣的:

(...) 
AND employe.nom REGEX '^[AB]' 

...或者類似的東西。

我很抱歉,但你問括號的主要問題對我來說並不是很清楚。

1

有額外parenthes是。數學中的規則是添加括號來闡明邏輯。在這種情況下,如果刪除所有括號,您將得到錯誤的答案。你有什麼是AND((b)或(c))。刪除所有括號將從(a或b)和(a或c)到(a和b)或c不正確。