Модуль 5

Filtering Data with WHERE

Ось готовий урок, згенерований за твоїм майстер-промптом.


🎓 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 схожий на звичайне англійське речення. Порядок слів важливий:

  1. SELECT (Що ми хочемо бачити? Які стовпчики?)
  2. FROM (Звідки ми це беремо? З якої таблиці?)
  3. 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 (дата найму).

Завдання:

  1. 🔹 Розігрів: Напишіть запит, щоб знайти співробітника з іменем 'David'.

  2. 🔹 Гроші: Виведіть усіх співробітників, які отримують зарплату більше 5000.

  3. 🔹 Виправлення помилки: Студент написав запит, щоб знайти всіх працівників IT-відділу, але отримав помилку або порожній результат: SELECT * FROM employees WHERE department = IT; Що тут не так? (Підказка: типи даних).

  4. 🔹 Реальна задача: Бос хоче звільнити "дорогих" співробітників відділу Sales. Знайдіть усіх, хто працює в 'Sales' І отримує зарплату більше 10000.

  5. 🔹 Міні-кейс ("А що, якщо?"): Нам потрібні співробітники з відділу 'Marketing' АБО з відділу 'HR'. Як записати цю умову?

  6. 🔹 Челендж: Виведіть усіх, чия зарплата НЕ дорівнює 1000.


5. 💡 Мислення як у розробника

Як відрізнити новачка від профі, дивлячись на їхні WHERE?

  1. Лапки — це класика.

    • Новачок: Пише WHERE name = Alex. SQL думає, що Alex — це назва іншого стовпчика, і видає помилку.
    • Профі: Знає, що текст завжди в одинарних лапках: 'Alex'. Числа — без лапок.
  2. Пастка з NULL.

    • Новачок: Пише WHERE phone = NULL, щоб знайти тих, у кого немає телефону. Це ніколи не спрацює. NULL — це "ніщо", він не може дорівнювати нічому, навіть собі.
    • Профі: Використовує спеціальну фразу: WHERE phone IS NULL.
  3. Ефективність (Індекси). Пам'ятаєте аналогію з книгою? Якщо ви шукаєте в книзі слово "WHERE" без змісту, вам доведеться читати кожну сторінку (це називається Full Table Scan). Це повільно. Розробники створюють "Індекси" (як алфавітний покажчик у кінці книги), щоб WHERE працював миттєво. Але про це — в наступних уроках.


6. 🧩 Підсумок

Сьогодні ви навчилися говорити базі даних "НІ". Ви навчилися відсікати зайве і фокусуватися на важливому.

Що ви тепер вмієте: * ✅ Знаходити конкретні рядки за допомогою WHERE. * ✅ Працювати з числами (>, <) та текстом (= 'text'). * ✅ Комбінувати умови через AND та OR.

Тизер: Але що, якщо в базі даних є користувачі "Олександр", "Олексій" та "Олег", і ви хочете знайти їх усіх, бо забули повне ім'я? Ви не можете написати WHERE name = .... Тут на сцену вийде пошук за шаблоном і оператор LIKE.

До зустрічі на наступному уроці! Це був CS50. 🏛️