Выбор ответа Junior SELECT и фильтрация обновлено

Приоритет AND и OR

Вопрос

Какому условию эквивалентно WHERE city = 'Москва' OR city = 'Казань' AND age > 30?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: city = 'Москва' OR (city = 'Казань' AND age 30). AND связывает сильнее, чем OR, как умножение сильнее сложения.

Варианты ответа

  1. (city = 'Москва' OR city = 'Казань') AND age > 30
  2. Условие неоднозначно, PostgreSQL выдаст ошибку
  3. city = 'Москва' OR (city = 'Казань' AND age > 30)правильный ответ
  4. Зависит от порядка колонок в таблице

Разбор

AND связывает сильнее, чем OR, как умножение сильнее сложения. Поэтому москвичи попадут в результат любого возраста, а из Казани только старше 30. Если нужны обе столицы старше 30, нужны скобки. Ошибки нет: приоритет определён однозначно и от таблицы не зависит.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.