🗄️ SQL-запити
Шпаргалка: SQL-запити
SELECT, JOIN-и, агрегатні функції, GROUP BY/HAVING, підзапити та модифікація даних — повна довідка для аналізу даних
Базовий SELECT
SELECT column1, column2 FROM table WHERE condition;
Усі стовпці
SELECT * FROM users;
Конкретні стовпці
SELECT name, email FROM users;
З умовою
SELECT * FROM users WHERE age >= 18;
Унікальні значення
SELECT DISTINCT city FROM users;
✦ WHERE фільтрує окремі рядки ДО будь-якого групування — це базовий фільтр вибірки.
Сортування та обмеження
SELECT * FROM table ORDER BY column ASC|DESC;
SELECT * FROM table ORDER BY column DESC LIMIT n;
| Ключове слово | Призначення |
| ORDER BY column ASC | Сортування за зростанням (за замовчуванням) |
| ORDER BY column DESC | Сортування за спаданням |
| LIMIT n | Обмежити результат n рядками |
| ORDER BY a, b DESC | Сортування за кількома стовпцями (a за зростанням, b за спаданням) |
✦ Приклад: SELECT name, salary FROM employees ORDER BY salary DESC LIMIT 5; — топ-5 працівників за зарплатою.
Агрегатні функції: GROUP BY та HAVING
Середнє значення
AVG(column)
Групування
GROUP BY column
SELECT department, COUNT(*), AVG(salary) FROM employees GROUP BY department;
SELECT department, AVG(salary) FROM employees GROUP BY department HAVING AVG(salary) > 50000;
✦ Ключова відмінність: WHERE фільтрує рядки ДО групування і не може містити агрегатні функції; HAVING фільтрує вже згруповані результати ПІСЛЯ обчислення агрегатів (COUNT, SUM, AVG тощо).
JOIN-и: об'єднання таблиць
| Тип JOIN | Що повертає |
| INNER JOIN | Лише рядки, для яких є відповідність в ОБОХ таблицях |
| LEFT JOIN | Усі рядки лівої таблиці + відповідні рядки правої (NULL, якщо відповідності немає) |
| RIGHT JOIN | Усі рядки правої таблиці + відповідні рядки лівої (NULL, якщо відповідності немає) |
| FULL OUTER JOIN | Усі рядки з обох таблиць; NULL там, де немає відповідності з іншого боку |
SELECT o.id, c.name FROM orders o INNER JOIN customers c ON o.customer_id = c.id;
SELECT c.name, o.id FROM customers c LEFT JOIN orders o ON c.id = o.customer_id;
✦ LEFT JOIN зручний, щоб знайти рядки без пари: додайте WHERE o.id IS NULL, щоб знайти клієнтів без замовлень.
Підзапити (subqueries)
SELECT name FROM employees WHERE department_id IN (SELECT id FROM departments WHERE location = 'Kyiv');
SELECT name FROM products WHERE price > (SELECT AVG(price) FROM products);
✦ Підзапит у WHERE...IN виконується першим і повертає список значень, які потім використовує зовнішній запит.
Модифікація даних: INSERT, UPDATE, DELETE
INSERT INTO table (column1, column2) VALUES (value1, value2);
UPDATE table SET column1 = value1 WHERE condition;
DELETE FROM table WHERE condition;
⚠ Якщо пропустити WHERE в UPDATE або DELETE, зміна або видалення застосується до ВСІХ рядків таблиці без винятку. Перед виконанням завжди перевіряйте умову окремим запитом SELECT * FROM table WHERE condition;
Оператори порівняння
| Оператор | Значення |
| = | Дорівнює |
| <> (або !=) | Не дорівнює |
| > | Більше |
| < | Менше |
| >= | Більше або дорівнює |
| <= | Менше або дорівнює |
| LIKE | Відповідність шаблону (%, _) |
| IN | Значення входить у список |
| BETWEEN a AND b | Значення в діапазоні [a, b] |
| IS NULL / IS NOT NULL | Перевірка на відсутність/наявність значення |
✦ NULL — це «невідоме значення»: вираз column = NULL завжди повертає NULL (не true), тому рядок не потрапить у вибірку. Для перевірки використовуйте лише IS NULL або IS NOT NULL.
Як користуватися шпаргалкою
Ця шпаргалка зосереджує найважливіші конструкції SQL — від базового SELECT до JOIN-ів, підзапитів та модифікації даних — у компактному форматі для швидкого пошуку під час написання запитів. Матеріал систематизований від простих вибірок до складніших операцій з кількома таблицями.
Ефективне використання
Використовуйте шпаргалку поряд із практикою написання запитів у реальній базі даних — не для копіювання, а як довідник синтаксису. Перед UPDATE або DELETE завжди спершу перевіряйте умову WHERE через SELECT з тими самими критеріями, щоб уникнути випадкових змін усієї таблиці.
Часті запитання (FAQ)
Для чого використовується мова SQL?
SQL (Structured Query Language) — мова для роботи з реляційними базами даних: вибірка даних (SELECT), додавання (INSERT), оновлення (UPDATE) та видалення (DELETE) записів, а також створення й зміна структури таблиць. Використовується в аналітиці даних, веб-розробці та адмініструванні баз даних.
У чому різниця між WHERE та HAVING?
WHERE фільтрує окремі рядки ДО групування (GROUP BY) і не може використовувати агрегатні функції. HAVING фільтрує вже згруповані результати ПІСЛЯ обчислення агрегатних функцій (COUNT, SUM, AVG тощо). Тобто WHERE відсіює рядки, а HAVING — цілі групи.
Чим відрізняється INNER JOIN від LEFT JOIN?
INNER JOIN повертає лише ті рядки, для яких є відповідність в обох таблицях. LEFT JOIN повертає всі рядки лівої таблиці, а для тих, де немає відповідності у правій таблиці, поля правої таблиці заповнюються NULL.
Чому для порівняння з NULL потрібні спеціальні оператори?
NULL означає 'невідоме значення', тому будь-яке порівняння з ним (наприклад, column = NULL) повертає NULL (не true і не false) і рядок не потрапляє у вибірку. Щоб перевірити наявність або відсутність значення, потрібно використовувати спеціальні оператори IS NULL або IS NOT NULL.
Чому важливо завжди використовувати WHERE з UPDATE та DELETE?
Якщо в запиті UPDATE або DELETE пропустити умову WHERE, операція застосується до ВСІХ рядків таблиці без винятку. Це найпоширеніша причина випадкового знищення або зіпсування даних, тому перед виконанням варто спершу перевірити умову WHERE через SELECT з тими самими критеріями.