← К оглавлению занятия

🐛 Типичные ошибки

⚡ Кратко: ошибки

  • Путаница в границах BETWEEN — он включительный.
  • Вложенные IF легко запутать — предпочитайте CASE.
  • LIMIT 5 OFFSET 1 означает «начиная со второй строки», а не «пропустить одну страницу».
1

Ошибка: неправильные границы в CASE

При проверке диапазонов важен порядок условий. Если поставить > 70 перед BETWEEN 30 AND 70, диапазон никогда не сработает.

-- Неправильно: условие BETWEEN никогда не выполнится
CASE
    WHEN quantity > 70 THEN 'large'
    WHEN quantity < 30 THEN 'small'
    WHEN quantity BETWEEN 30 AND 70 THEN 'medium'  -- мёртвый код
END

Как исправить: либо используйте BETWEEN первым, либо проверяйте границы в правильном порядке.

CASE
    WHEN quantity < 30 THEN 'small'
    WHEN quantity BETWEEN 30 AND 70 THEN 'medium'
    ELSE 'large'
END
2

Ошибка: путаница с OFFSET

«Начиная со второй» означает пропустить одну строку: OFFSET 1, а не OFFSET 2.

-- Неправильно: пропустит 2 строки, начнёт с третьей
SELECT *
FROM customers
WHERE job_title = 'Owner'
ORDER BY state_province
LIMIT 5 OFFSET 2;

Как исправить:

SELECT *
FROM customers
WHERE job_title = 'Owner'
ORDER BY state_province
LIMIT 5 OFFSET 1;
3

Ошибка: забыли ORDER BY с LIMIT

Без сортировки «7 строк» могут быть разными при каждом запуске.

-- Непредсказуемо
SELECT DISTINCT product_id
FROM order_details
WHERE quantity * unit_price > 200
LIMIT 7;

Как исправить:

SELECT DISTINCT product_id
FROM order_details
WHERE quantity * unit_price > 200
ORDER BY product_id ASC
LIMIT 7;
4

Ошибка: неправильная позиция в SUBSTRING

В строке (123) 456-7890 позиции символов: 1='(', 2='1', 3='2', 4='3', 5=')', 6=' ', 7='4'. Если нужны цифры после кода, позиция зависит от наличия пробела.

-- Неправильно: может захватить скобку или пробел
SELECT SUBSTRING(business_phone, 5, 3) FROM employees;

Как исправить: уточните формат данных в таблице. Для формата (XXX) XXX-XXXX правильная позиция — 6.

SELECT SUBSTRING(business_phone, 6, 3) FROM employees;