Подтвердить что ты не робот

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 в последнем предложении, поскольку И предшествует ему?

4b9b3361

Ответ 1

Взгляните на Приоритет оператора на SQL Server (вы не указали это, но я бы подумал, что это одно и то же для всех RDBMS). Это означает, что ANDs (без скобок) оцениваются до ORs.

Итак, в вашем конкретном случае, без круглых скобок, условия:

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

ИЛИ

  • employe.nom LIKE 'B%'

Ответ 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]'

... или что-то подобное.

Извиняюсь, но главный вопрос, который вы задаете в скобках, мне не очень понятен.