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

Занятие 03. Практикум 1

📁 Блок: SQL / MySQL ⏱️ Время изучения: ~90 мин 🎯 Сложность: Практикум
#and #or #like #in #between #null

⚡ Кратко: суть темы

Практическое занятие для закрепления SELECT и WHERE. Решаем 13 задач на фильтрацию строк: диапазоны, пропуски, маски, комбинации AND/OR.

  • Используйте BETWEEN для числовых диапазонов.
  • Используйте LIKE для строковых масок.
  • Проверяйте NULL только через IS NULL.

Что запомнить: перед запуском сложного запроса убедитесь, что выбрана нужная база данных.

Частая ошибка: путать AND и OR при комбинировании условий.

✅ Решения

-- 1
SELECT *
FROM products
WHERE standard_cost BETWEEN 10 AND 20;

-- 2
SELECT *
FROM orders
WHERE payment_type IS NULL
  AND ship_state_province = 'CA';

-- 3
SELECT *
FROM employees
WHERE last_name LIKE 'C%';

-- 4
SELECT *
FROM customers
WHERE city IN ('Minneapolis', 'Denver', 'Boston')
   OR job_title = 'Purchasing Manager';

-- 5
SELECT *
FROM customers
WHERE (city IN ('Minneapolis', 'Denver', 'Boston')
    OR job_title = 'Purchasing Manager')
  AND state_province = 'CO';
-- 6
SELECT *
FROM products
WHERE minimum_reorder_quantity BETWEEN 10 AND 25
  AND quantity_per_unit LIKE '%boxes%'
  AND standard_cost < 10;

-- 7: замена AND на OR
SELECT *
FROM products
WHERE minimum_reorder_quantity BETWEEN 10 AND 25
   OR quantity_per_unit LIKE '%boxes%'
   OR standard_cost < 10;
-- Теперь выводятся строки, удовлетворяющие хотя бы одному условию.
-- 8: результаты разные, потому что AND выполняется раньше OR.
-- Первый запрос эквивалентен (a AND b) OR c.
-- Второй запрос эквивалентен a AND (b OR c).

-- 9
SELECT *
FROM products
WHERE quantity_per_unit IS NULL
  AND reorder_level = 100;

-- 10
SELECT product_name
FROM products
WHERE list_price - standard_cost > 5;

-- 11
SELECT *
FROM products
WHERE reorder_level * 2 = target_level;

-- 12
SELECT *
FROM products
WHERE (product_code LIKE '%NWTSO%' AND standard_cost = 1)
   OR (list_price < 5 AND target_level = 40);

-- 13: два способа
SELECT *
FROM products
WHERE (product_code LIKE '%NWTSO%' OR standard_cost = 1)
  AND target_level = 40;

SELECT *
FROM products
WHERE product_code LIKE '%NWTSO%'
  AND target_level = 40
   OR standard_cost = 1
  AND target_level = 40;