При составлении условия WHERE важно учитывать порядок выполнения условий. А выполняются они в следующем порядке:

  1. NOT
  2. AND
  3. OR

Рассмотрим пример. Необходимо получить информацию о продуктах магазинов с кодами 300 и 302, стоимость которых превышает 20000.

Для начала получим информацию о продуктах магазинов с кодами 300 и 302:

SELECT *
  FROM product_price
 WHERE store_id = 300
    OR store_id = 302
product_id store_id price
1 300 10500.00
8 302 38300.00
9 302 44500.00

А в результате мы хотим получить следующие данные:

product_id store_id price
8 302 38300.00
9 302 44500.00

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

SELECT *
  FROM product_price
 WHERE store_id = 300
    OR store_id = 302
   AND price > 20000

В результате выполнения запроса получим неверные данные:

product_id store_id price
1 300 10500.00
8 302 38300.00
9 302 44500.00

Данный результат получился следующим образом:

  1. AND более приоритетаная операция, поэтому сначало выполнилось условие store_id = 302 AND price > 20000;
  2. затем срабатывает условие OR

Для изменения порядка выполнения необходимо воспользоваться скобками:

SELECT *
  FROM product_price
 WHERE (store_id = 300
    OR store_id = 302)
   AND price > 20000
product_id store_id price
8 302 38300.00
9 302 44500.00

2.2 Логические операторы

2.4 Операции сравнения