Отсечение строк и сортировка

Порядок условий

При составлении условия 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_idstore_idprice
130010500.00
830238300.00
930244500.00

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

product_idstore_idprice
830238300.00
930244500.00

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

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

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

product_idstore_idprice
130010500.00
830238300.00
930244500.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_idstore_idprice
830238300.00
930244500.00
    ПредыдущаяСледующая