Модуль 4

Basic SELECT Queries

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


🎓 CS50: Basic SELECT Queries (Основи вибірки даних)

Всім привіт! Це CS50. Мене звуть [Твоє Ім'я], і сьогодні ми навчимося розмовляти з даними однією мовою.


1. 🔥 Вступ: Голка в копиці сіна

Уявіть ситуацію. Ви працюєте у великому інтернет-магазині, скажімо, Rozetka або Amazon. У вас є база даних, де зберігається інформація про 10 мільйонів замовлень.

Ваш бос прибігає і каже: "Мені терміново потрібен список усіх клієнтів, які купили iPhone 15 вчора!"

Якщо у вас є лише Excel-файл з 10 мільйонами рядків, що ви будете робити? Гортати мишкою? Використовувати Ctrl+F і копіювати по одному? Ви витратите на це все життя.

А що, якби ви могли просто "попросити" комп'ютер:

"Гей, дай мені імена та емейли людей, що купили цей телефон".

І отримати результат за 0.05 секунди.

Саме це і робить SQL (Structured Query Language). А команда, з якої все починається, називається SELECT.

Без SELECT база даних — це просто чорна діра: дані туди потрапляють, але ви ніколи не зможете їх звідти дістати. Сьогодні ми навчимося вмикати світло в цій кімнаті.


2. 🧠 Теоретична база: Як мислить база даних

Давайте заглянемо "під капот".

Уявіть базу даних як велетенську картотеку або набір Excel-таблиць. * Таблиця (Table): Це як окремий аркуш в Excel (наприклад, users — користувачі, products — товари). * Стовпець (Column): Це атрибут (Ім'я, Ціна, Колір). * Рядок (Row): Це конкретний запис (конкретний користувач Вася).

Коли ми пишемо запит SELECT, ми не програмуємо алгоритм ("піди туди, візьми це, перевір те"). Ні! Ми використовуємо декларативний стиль. Ми просто кажемо базі, ЩО ми хочемо отримати, а база сама вирішує, ЯК це знайти найшвидше.

🔑 Анатомія запиту (це треба запам'ятати):

Найпростіший запит складається з двох слів:

SELECT [що_ми_хочемо_бачити]
FROM [звідки_ми_це_беремо];
  • SELECT: Вказує на стовпці (вертикаль). Які саме дані показати? (Тільки імена? Чи все підряд?)
  • FROM: Вказує на таблицю. У якій папці шукати?

Це як замовлення в ресторані: * SELECT борщ * FROM меню "Перші страви"

Просто, правда?


3. 🧪 Приклади: Від простого до реального

Давайте попрацюємо з таблицею students. У ній є стовпці: id, name, house (факультет), gpa (середній бал).

Приклад 1: "Дай мені все!"

Найперше, що роблять новачки. Ми хочемо побачити всю таблицю цілком.

SELECT *
FROM students;

Що тут відбувається? Зірочка * — це скорочення від "all columns" (всі стовпці).

Результат: Ви отримаєте величезний список з усіма даними про кожного студента. ⚠️ Питання до вас: Як думаєте, чи варто писати SELECT * на реальній роботі, якщо в таблиці мільярд записів? (Спойлер: ваш сервер може "впасти", а адмін буде дуже злий).


Приклад 2: "Тільки суть"

Зазвичай нам не потрібні всі дані (навіщо нам технічні ID, якщо ми просто хочемо розіслати емейли?). Давайте виберемо конкретні стовпці.

SELECT name, house
FROM students;

Очікування: Що ми побачимо? Реальність: Ми отримаємо табличку лише з двох стовпчиків: ім'я та факультет. ID та оцінки будуть проігноровані. Це економить пам'ять і робить результат читабельним.


Приклад 3: "Без дублікатів" (DISTINCT)

Уявіть, що ми хочемо отримати список усіх факультетів (house).

SELECT house
FROM students;

Якщо у нас 100 студентів, ми отримаємо список зі 100 рядків: "Gryffindor", "Slytherin", "Gryffindor", "Gryffindor"... Нам це потрібно? Ні. Нам потрібен перелік унікальних факультетів.

Додаємо магічне слово DISTINCT:

SELECT DISTINCT house
FROM students;

Результат: 1. Gryffindor 2. Slytherin 3. Ravenclaw 4. Hufflepuff

Усе. Чітко і ясно.


4. 🛠 Практична частина

Час "забруднити руки" кодом. У нас є таблиця movies (фільми) зі стовпцями: title (назва), year (рік), director (режисер), rating (рейтинг).

Завдання:

  1. 🔹 Розігрів: Напишіть запит, щоб побачити всі дані з таблиці movies.
  2. 🔹 Фільтрація зайвого: Нам потрібен простий список фільмів та років їх випуску. Виведіть тільки title та year.
  3. 🔹 Виправ помилку: Студент написав код, але він не працює. Що не так? sql SELECT year title FROM movies (Підказка: ми перелічуємо речі через кому, чи не так?)
  4. 🔹 Реальна задача: Маркетологи хочуть дізнатися, з якими режисерами ми співпрацюємо. Але вони не хочуть бачити одне й те саме прізвище 10 разів. Напишіть запит, щоб отримати список унікальних режисерів.
  5. 🔹 Міні-кейс: Виведіть назву фільму (title) та його рейтинг (rating), але уявіть, що ви презентуєте це на слайді, тому виведіть лише перші 5 записів (використайте ключове слово LIMIT 5 в кінці запиту).

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

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

  1. Профі рідко використовує SELECT * у продакшені. Новачок тягне всю базу даних мережею, забиваючи канал. Профі бере лише ті поля, які потрібні тут і зараз (name, email). Це називається "економія ресурсів".

  2. Стиль коду (Code Style). SQL нечутливий до регістру. select і SELECT — це те саме. АЛЕ! Досвідчені розробники пишуть команди (SELECT, FROM) ВЕЛИКИМИ ЛІТЕРАМИ, а назви таблиць (users) — маленькими.

    • Погано: select name from users
    • Добре: SELECT name FROM users Чому? Тому що око одразу чіпляється за структуру запиту. Читати такий код у 10 разів швидше.
  3. Порядок думок. Коли ви пишете запит, спочатку подумайте: "З якої таблиці я беру дані?" (FROM), а вже потім "Які поля мені треба?" (SELECT). Хоча пишемо ми навпаки, логіка будується саме так.


6. 🧩 Підсумок

Отже, що ми сьогодні зробили? Ми навчилися робити найголовніше — задавати питання даним.

  • Ми знаємо, що SELECT обирає стовпці.
  • Ми знаємо, що FROM обирає таблицю.
  • Ми знаємо, як прибрати дублікати через DISTINCT.

Ви тепер вмієте "витягувати" інформацію. Але... поки що ми витягуємо всі рядки (або обмежуємо їх кількістю).

А що, якщо я хочу знайти фільми тільки Крістофера Нолана? Або товари, які коштують менше 100 гривень?

Тут нам знадобиться фільтрація. І про це ми поговоримо на наступному уроці, коли розберемо могутню команду WHERE.

Це був CS50. Побачимось!