SQL-скобки используются в предложении OR
Интересно, знает ли кто-нибудь, почему мы используем круглые скобки в этом SQL:
Итак, формат выглядит следующим образом:
Название, местонахождение и отдел службы служащих, чье имя начинается с 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%'))
В принципе, когда последний AND имеет отношение к WHERE, я не мог бы просто обойтись без круглых скобок, чтобы SQL выбрал для меня сотрудников с их именем, начинающимся либо с A, либо с B? Какая разница делает позиционирование скобки таким образом? И ahy есть двойное использование круглых скобок? Или это приоритет OR в последнем предложении, поскольку И предшествует ему?
Ответы
Ответ 1
Взгляните на Приоритет оператора на SQL Server (вы не указали это, но я бы подумал, что это одно и то же для всех RDBMS). Это означает, что ANDs (без скобок) оцениваются до ORs.
Итак, в вашем конкретном случае, без круглых скобок, условия:
-
employe.service=service.code_serv AND employe.nom LIKE 'A%'
ИЛИ
Ответ 2
Вы используете его для указания группировки предложения, а не приоритета. SQL не позволяет указать приоритет, поскольку оптимизатор создаст для вас наилучший приоритет.
AND ()
Возьмем оба условия OR
в одном утверждении. Поэтому, если либо истинно, то AND
также истинно. Внутренние скобки необязательны, но помогают визуализировать разделение.
Без внешних круглых скобок она будет допускать что-либо с окончательным предложением как истинное.
Ответ 3
Есть дополнительные круглые скобки. Правило в математике состоит в том, чтобы добавить круглые скобки, чтобы прояснить логику. В этом случае, если вы удалите все скобки, вы получите неправильный ответ. У вас есть AND ((b) ИЛИ (c)). Удаление всех скобок приведет к тому, что это неверно. (A OR b) AND (a OR c) - (a AND b) ИЛИ c.
Ответ 4
Я предполагаю, что * s есть, чтобы подчеркнуть что-то, поэтому я игнорирую их пока. Не стесняйтесь меня исправить, если я ошибаюсь.
Я предлагаю сделать это вот так:
(...)
AND employe.nom REGEX '^[AB]'
... или что-то подобное.
Извиняюсь, но главный вопрос, который вы задаете в скобках, мне не очень понятен.