Скобки SQL используются в предложении OR - PullRequest
15 голосов
/ 11 мая 2011

Интересно, знает ли кто-нибудь, почему мы используем скобки в этом SQL: Итак, формат выглядит следующим образом:

Имя, местонахождение и отдел службы сотрудников, чье имя начинается с A илиБ. (Грубый перевод с французского).

Я ответил следующим образом:

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%'))

В принципе, где последнее И касается ГДЕ, я не могу просто обойтись безскобки для того, чтобы SQL выбрал для меня сотрудников с их именами, начинающимися с A или B?Какое значение имеет расположение скобок таким образом?И ах, есть ли двойное использование скобок?Или это в приоритете ИЛИ в последнем предложении, так как перед ним стоит И?

Ответы [ 3 ]

21 голосов
/ 11 мая 2011

Посмотрите на Приоритет оператора в SQL Server (вы не указали это, но я думаю, что он одинаков для всех СУБД).Это означает, что AND (без круглых скобок) оцениваются до того, как 1 связываются более тесно, чем OR.

Так что в вашем конкретном случае, без скобок, условияявляются:

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

ИЛИ

  • employe.nom LIKE 'B%'

1 Порядок оценки преднамеренно не указан в SQL, что позволяет использовать гораздо больше возможных переупорядочений, чем языки, которые гарантируют упорядоченную оценку слева направо или приоритет.

13 голосов
/ 11 мая 2011

Используется для указания группировки предложения, а не приоритета. SQL не позволяет указывать приоритет, так как оптимизатор создаст для вас наилучший приоритет.

AND ()

Примет оба условия OR в одном операторе. Так что, если любой из них истинен, то AND тоже верно. Внутренние скобки не обязательны, но помогают визуализировать разделение.

Без внешних скобок было бы разрешено что-либо с последним предложением как истина.

1 голос
/ 11 мая 2011

Есть лишние скобки.Правило в математике состоит в том, чтобы добавить скобки, чтобы прояснить логику.В этом случае, если вы удалите все скобки, вы получите неправильный ответ.То, что у вас есть, это И ((b) ИЛИ (c)).Удаление всех скобок приведет к тому, что (ИЛИ b) И (a ИЛИ c) в (А И b) ИЛИ c, что неверно.

...