Ось готовий урок, згенерований за твоїм майстер-промптом.
🎓 CS50-Style: Фільтрація даних за допомогою WHERE
Привіт, друзі! Мене звати [Твоє Ім'я], і це — введення в одну з найпотужніших концепцій роботи з даними.
Сьогодні ми говоримо про вибір. Про те, як знайти саме те, що вам потрібно, у величезному океані інформації. Сьогодні ми розбираємо WHERE.
1. 🔥 Вступ: Голка в копиці даних
Уявіть, що ви працюєте в Amazon або Rozetka. У вашій базі даних — мільйони замовлень.
І тут дзвонить клієнт: "Ало, де мій новий iPhone? Номер замовлення 777".
Що ви робите? 1. Ви роздруковуєте весь список із мільйона замовлень? 2. Ви починаєте читати кожен рядок, починаючи з першого, сподіваючись натрапити на номер 777?
Звісно, ні! Це було б божевіллям. Ви б витратили тижні на те, що має займати мілісекунди. Ви хочете бачити тільки один конкретний рядок, а решту 999 999 — проігнорувати.
Ось у чому проблема: Команда SELECT * FROM orders повертає все. Це як висипати вміст усієї бібліотеки на підлогу, коли ви шукаєте лише "Гаррі Поттера".
Рішення: Нам потрібен фільтр. Нам потрібен "фейс-контроль", який скаже: "Ти — замовлення 777? Проходь. Всі інші — до побачення".
Саме це робить оператор WHERE. Без нього SQL був би просто безглуздим списком усього підряд.
2. 🧠 Теоретична база (Що там під капотом?)
Давайте заглянемо під капот. Як це працює?
Уявіть WHERE як охоронця на вході до нічного клубу. У нього є чітка інструкція (умова). Він бере кожен рядок вашої таблиці, дивиться на нього і ставить одне просте запитання: True чи False? (Правда чи Брехня?).
- Якщо умова виконується (True) -> рядок потрапляє у фінальний результат.
- Якщо умова не виконується (False) -> рядок відкидається і ви його ніколи не побачите.
📌 Що треба запам'ятати залізно:
Синтаксис SQL схожий на звичайне англійське речення. Порядок слів важливий:
SELECT(Що ми хочемо бачити? Які стовпчики?)FROM(Звідки ми це беремо? З якої таблиці?)WHERE(За якої умови? Які рядки лишаємо?)
Аналогія:
"Принеси мені (SELECT) червоні яблука (WHERE) з холодильника (FROM)."
Логічні оператори (Інструменти охоронця):
Щоб написати умову, ми використовуємо оператори:
* = (рівно)
* != або <> (не рівно)
* > (більше), < (менше)
* AND (і те, і інше має бути правдою)
* OR (хоча б одне має бути правдою)
3. 🧪 Приклади (Від простого до реального)
Припустимо, у нас є таблиця users (користувачі) з такими даними:
| id | name | age | country | status |
|---|---|---|---|---|
| 1 | Остап | 25 | Ukraine | active |
| 2 | Мері | 17 | USA | active |
| 3 | Іван | 40 | Ukraine | banned |
| 4 | Сара | 30 | UK | active |
Приклад 1: Точне влучання
Ми хочемо знайти інформацію лише про Остапа.
SELECT *
FROM users
WHERE name = 'Остап';
Питання до вас: Скільки рядків поверне цей запит? ... Результат: Тільки один рядок (id 1). База даних перевірила кожного: "Ти Остап? Ні. Ти Остап? Ні...".
Приклад 2: Числова умова
Шукаємо всіх повнолітніх користувачів (старше або дорівнює 18).
SELECT name, age
FROM users
WHERE age >= 18;
Очікування: Мері (17 років) має зникнути. Результат: Остап, Іван, Сара. Мері не пройшла "фейс-контроль".
Приклад 3: Реальний кейс (Комбінація умов)
Маркетолог просить вас: "Дай мені список активних користувачів з України".
Тут дві умови: 1. Країна — Україна. 2. Статус — активний.
SELECT name, country, status
FROM users
WHERE country = 'Ukraine'
AND status = 'active';
Аналіз: * Остап: Ukraine? Так. Active? Так. -> Проходить. * Іван: Ukraine? Так. Active? Ні (він banned). -> Не проходить.
Результат: Тільки Остап.
4. 🛠 Практична частина
Час розім’яти пальці! Уявіть, що ви працюєте з таблицею employees (співробітники):
id, first_name, department (відділ), salary (зарплата), hire_date (дата найму).
Завдання:
-
🔹 Розігрів: Напишіть запит, щоб знайти співробітника з іменем
'David'. -
🔹 Гроші: Виведіть усіх співробітників, які отримують зарплату більше
5000. -
🔹 Виправлення помилки: Студент написав запит, щоб знайти всіх працівників IT-відділу, але отримав помилку або порожній результат:
SELECT * FROM employees WHERE department = IT;Що тут не так? (Підказка: типи даних). -
🔹 Реальна задача: Бос хоче звільнити "дорогих" співробітників відділу Sales. Знайдіть усіх, хто працює в
'Sales'І отримує зарплату більше10000. -
🔹 Міні-кейс ("А що, якщо?"): Нам потрібні співробітники з відділу
'Marketing'АБО з відділу'HR'. Як записати цю умову? -
🔹 Челендж: Виведіть усіх, чия зарплата НЕ дорівнює
1000.
5. 💡 Мислення як у розробника
Як відрізнити новачка від профі, дивлячись на їхні WHERE?
-
Лапки — це класика.
- Новачок: Пише
WHERE name = Alex. SQL думає, що Alex — це назва іншого стовпчика, і видає помилку. - Профі: Знає, що текст завжди в одинарних лапках:
'Alex'. Числа — без лапок.
- Новачок: Пише
-
Пастка з NULL.
- Новачок: Пише
WHERE phone = NULL, щоб знайти тих, у кого немає телефону. Це ніколи не спрацює.NULL— це "ніщо", він не може дорівнювати нічому, навіть собі. - Профі: Використовує спеціальну фразу:
WHERE phone IS NULL.
- Новачок: Пише
-
Ефективність (Індекси). Пам'ятаєте аналогію з книгою? Якщо ви шукаєте в книзі слово "WHERE" без змісту, вам доведеться читати кожну сторінку (це називається Full Table Scan). Це повільно. Розробники створюють "Індекси" (як алфавітний покажчик у кінці книги), щоб
WHEREпрацював миттєво. Але про це — в наступних уроках.
6. 🧩 Підсумок
Сьогодні ви навчилися говорити базі даних "НІ". Ви навчилися відсікати зайве і фокусуватися на важливому.
Що ви тепер вмієте:
* ✅ Знаходити конкретні рядки за допомогою WHERE.
* ✅ Працювати з числами (>, <) та текстом (= 'text').
* ✅ Комбінувати умови через AND та OR.
Тизер:
Але що, якщо в базі даних є користувачі "Олександр", "Олексій" та "Олег", і ви хочете знайти їх усіх, бо забули повне ім'я? Ви не можете написати WHERE name = ....
Тут на сцену вийде пошук за шаблоном і оператор LIKE.
До зустрічі на наступному уроці! Це був CS50. 🏛️