Модуль 02 · урок 8

Дужки і пріоритет умов

Завдання: «електроніка або одяг, але лише дешевша за $100». Без дужок запит несподівано повертає дорогі «Galaxy» й «ProBook». Чому?

Пріоритет: AND сильніший за OR

Коли в умові є і AND, і OR, СКБД спершу обчислює AND, а вже потім OR (AND має вищий пріоритет). Це часто не те, що ми маємо на увазі:

-- НЕ те, що очікуєш:
WHERE category = 'Home' OR category = 'Books' AND price < 50

читається як Home OR (Books AND price < 50) — тобто весь Home проходить незалежно від ціни (навіть Espresso за $129).

Дужки задають порядок

Дужки роблять намір явним:

WHERE (category = 'Home' OR category = 'Books') AND price < 50

Тепер умова ціни діє на обидві категорії.

Правило: змішуєш AND і OR — став дужки, навіть якщо здається, що й так зрозуміло.

Без дужок → СКБД читає так:Without parentheses → the DBMS reads it as: Sin paréntesis → el SGBD lo lee así: category='Home' OR (category='Books' AND price<50) AND сильніший — групується сам; увесь Home проходить (навіть за $129).AND binds tighter — it groups alone; all Home rows pass (even at $129). AND liga más fuerte: agrupa solo; pasan todas las de Home (incluso a $129). З дужками → як ти хотів:With parentheses → what you intended: Con paréntesis → lo que querías: (category='Home' OR category='Books') AND price<50 умова ціни діє на обидві категорії — саме те, що треба.the price condition applies to both categories — exactly right. la condición de precio se aplica a las dos categorías: justo lo correcto.

Твоя черга

Потрібні товари з «Electronics» або «Clothing», і при цьому дешевші за $100. Виведи name, category, price. Не забудь дужки!

Підсумок

  • AND обчислюється раніше за OR.
  • Дужки роблять намір явним і захищають від помилок.