Занятие 03. Практикум 1
⚡ Кратко: суть темы
Практическое занятие для закрепления 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;