SQL
SQL — це мова структурованих запитів, яка використовується для роботи з реляційними базами даних: створення таблиць, додавання даних, пошуку, фільтрації, сортування, оновлення, видалення, обʼєднання таблиць, створення звітів, аналітики й керування доступом.
SQL розшифровується як Structured Query Language — структурована мова запитів.
SQL — це мова, якою програма, аналітик або адміністратор “розмовляє” з базою даних.
Коротко
| Параметр | Значення |
|---|---|
| Назва | SQL |
| Повна назва | Structured Query Language |
| Тип | Декларативна мова запитів до баз даних |
| Основна сфера | Реляційні бази даних, аналітика, backend, ERP, CRM, BI, звітність |
| Перші розробки | 1970-ті роки |
| Перший стандарт ANSI | 1986 рік |
| Сучасний міжнародний стандарт | ISO/IEC 9075:2023 |
| Популярні СУБД | PostgreSQL, MySQL, MariaDB, Microsoft SQL Server, Oracle Database, SQLite |
| Складність для новачків | Низька для базових запитів, середня для складної аналітики й оптимізації |
| Основне призначення | Отримувати, змінювати, структурувати й аналізувати дані |
Головна ідея SQL
SQL не описує покроково, як саме базі даних знайти дані. Він описує, що саме потрібно отримати.
Наприклад, замість того щоб вручну пояснювати:
відкрий таблицю; перебери всі рядки; знайди клієнтів із Києва; відсортуй їх за іменем; поверни результат;
у SQL пишуть:
SELECT * FROM customers WHERE city = 'Київ' ORDER BY name;
SQL описує результат, а база даних сама вирішує, як найкраще його отримати.
Важливі акценти
| Статус | Теза | Пояснення |
|---|---|---|
| Ключове | SQL потрібен майже всім розробникам | Backend, аналітика, ERP, CRM, BI, DevOps і тестування часто працюють із базами даних. |
| Ключове | SQL простий на старті | Базові SELECT, INSERT, UPDATE, DELETE можна вивчити швидко. |
| Ключове | SQL дуже глибокий | JOIN, індекси, транзакції, віконні функції, оптимізація запитів і плани виконання потребують досвіду. |
| Ключове | SQL є стандартом для реляційних баз | Різні СУБД мають власні діалекти, але базові принципи SQL спільні. |
| Важливо | SQL у різних базах відрізняється | PostgreSQL, MySQL, SQL Server і Oracle мають різний синтаксис для частини можливостей. |
| Увага | Поганий SQL може сильно сповільнити систему | Без індексів, правильних JOIN і оптимізації база може працювати дуже повільно. |
Історія
Ідея реляційної моделі даних була запропонована Едгаром Коддом у 1970 році. Після цього зʼявилися мови для роботи з реляційними базами даних, серед яких найважливішою стала SQL.
SQL був стандартизований ANSI у 1986 році, а потім прийнятий ISO. Сучасний міжнародний стандарт має назву ISO/IEC 9075. Версія SQL:2023 була опублікована у 2023 році.
Для чого використовується SQL
| Напрям | Як використовується SQL | Приклади |
|---|---|---|
| Backend | Отримання й збереження даних застосунку | Користувачі, замовлення, товари, документи |
| ERP | Облік, склад, фінанси, документи, звіти | Накладні, рахунки, залишки, проводки |
| CRM | Клієнти, угоди, контакти, історія взаємодії | Картка клієнта, pipeline, задачі |
| Аналітика | Вибірки, групування, підрахунки, звіти | Продажі за місяць, топ товарів, LTV |
| BI | Дані для dashboards і звітності | Power BI, Metabase, Superset, Tableau |
| Data Engineering | Перетворення й підготовка даних | ETL, ELT, data warehouse |
| Тестування | Перевірка даних у базі | QA-запити, тестові вибірки |
| Адміністрування | Керування структурами, правами, індексами | CREATE TABLE, GRANT, INDEX |
SQL і реляційні бази даних
SQL найчастіше використовується в реляційних базах даних.
Реляційна база даних зберігає дані у вигляді таблиць.
Таблиця має:
- рядки;
- колонки;
- типи даних;
- первинні ключі;
- зовнішні ключі;
- обмеження;
- індекси.
Приклад таблиці клієнтів:
| id | name | city | |
|---|---|---|---|
| 1 | Анна | Київ | anna@example.com |
| 2 | Олег | Львів | oleh@example.com |
| 3 | Марія | Київ | maria@example.com |
Популярні реляційні СУБД
| СУБД | Тип | Де використовується |
|---|---|---|
| PostgreSQL | Open Source | Backend, ERP, CRM, аналітика, складні бізнес-системи |
| MySQL | Open Source / commercial ecosystem | Web, CMS, інтернет-магазини, hosting |
| MariaDB | Open Source | Web, hosting, заміна MySQL |
| Microsoft SQL Server | Commercial / enterprise | Корпоративні системи, Windows-інфраструктура, .NET |
| Oracle Database | Commercial / enterprise | Банки, великі корпорації, критичні системи |
| SQLite | Embedded / file database | Мобільні застосунки, desktop, локальні бази, тести |
| IBM Db2 | Enterprise | Великі корпоративні й legacy-системи |
SQL і NoSQL
SQL часто порівнюють із NoSQL.
| SQL | NoSQL |
|---|---|
| Реляційна модель даних | Документна, key-value, graph, column-family та інші моделі |
| Таблиці, рядки, колонки | Документи, ключі, графи, колонки |
| Сильна структура | Гнучкіша структура |
| JOIN і транзакції | Залежить від конкретної NoSQL-бази |
| Добре для обліку, ERP, CRM, фінансів | Добре для гнучких, великих або спеціалізованих даних |
SQL і NoSQL — це не “краще” і “гірше”. Це різні інструменти для різних задач.
Основні типи SQL-команд
SQL-команди часто ділять на кілька груп.
| Група | Назва | Для чого | Приклади |
|---|---|---|---|
| DDL | Data Definition Language | Опис структури бази | CREATE, ALTER, DROP |
| DML | Data Manipulation Language | Робота з даними | SELECT, INSERT, UPDATE, DELETE |
| DCL | Data Control Language | Права доступу | GRANT, REVOKE |
| TCL | Transaction Control Language | Транзакції | COMMIT, ROLLBACK, SAVEPOINT |
SELECT
SELECT використовується для отримання даних.
SELECT * FROM customers;
Вибір конкретних колонок:
SELECT id, name, email FROM customers;
WHERE
WHERE фільтрує рядки.
SELECT * FROM customers WHERE city = 'Київ';
Кілька умов:
SELECT * FROM orders WHERE status = 'paid'
AND total_amount > 1000;
ORDER BY
ORDER BY сортує результат.
SELECT * FROM products ORDER BY price ASC;
Сортування від більшого до меншого:
SELECT * FROM products ORDER BY price DESC;
LIMIT
LIMIT обмежує кількість рядків.
SELECT * FROM products ORDER BY created_at DESC LIMIT 10;
У різних СУБД синтаксис може відрізнятися. Наприклад, у Microsoft SQL Server часто використовується TOP або OFFSET FETCH.
INSERT
INSERT додає дані.
INSERT INTO customers (name, city, email)
VALUES ('Анна', 'Київ', 'anna@example.com');
Додавання кількох рядків:
INSERT INTO customers (name, city, email) VALUES
('Олег', 'Львів', 'oleh@example.com'), ('Марія', 'Київ', 'maria@example.com');
UPDATE
UPDATE змінює дані.
UPDATE customers SET city = 'Одеса' WHERE id = 1;
UPDATE без WHERE може змінити всі рядки таблиці. Це одна з найнебезпечніших помилок у SQL.
DELETE
DELETE видаляє дані.
DELETE FROM customers WHERE id = 1;
DELETE без WHERE може видалити всі рядки таблиці. Перед виконанням небезпечних запитів потрібно перевіряти умову.
CREATE TABLE
CREATE TABLE створює таблицю.
CREATE TABLE customers (
id INTEGER PRIMARY KEY,
name VARCHAR(255) NOT NULL,
city VARCHAR(100),
email VARCHAR(255) UNIQUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
ALTER TABLE
ALTER TABLE змінює структуру таблиці.
Додати колонку:
ALTER TABLE customers ADD COLUMN phone VARCHAR(50);
Змінити назву колонки:
ALTER TABLE customers RENAME COLUMN phone TO phone_number;
DROP TABLE
DROP TABLE видаляє таблицю.
DROP TABLE customers;
DROP TABLE видаляє структуру таблиці разом із даними. Перед виконанням потрібно мати backup або чітке розуміння наслідків.
Основні типи даних SQL
Типи даних можуть відрізнятися між СУБД, але загальна логіка схожа.
| Тип | Для чого | Приклад |
|---|---|---|
| INTEGER | Цілі числа | 10
|
| BIGINT | Великі цілі числа | 123456789
|
| DECIMAL / NUMERIC | Точні числа, фінанси | 1234.56
|
| FLOAT / DOUBLE | Дробові числа з плаваючою точкою | 3.14
|
| VARCHAR | Рядок змінної довжини | 'Hello'
|
| TEXT | Довгий текст | Опис, коментар |
| DATE | Дата | 2026-05-06
|
| TIMESTAMP | Дата й час | 2026-05-06 12:30:00
|
| BOOLEAN | Так/ні | true, false
|
| JSON / JSONB | JSON-дані | {"name": "Anna"}
|
Primary Key
Primary Key або первинний ключ — це унікальний ідентифікатор рядка в таблиці.
CREATE TABLE customers (
id INTEGER PRIMARY KEY,
name VARCHAR(255) NOT NULL
);
Первинний ключ потрібен, щоб:
- однозначно знайти рядок;
- звʼязувати таблиці;
- уникати дублювання;
- будувати зовнішні ключі.
Foreign Key
Foreign Key або зовнішній ключ — це звʼязок між таблицями.
Наприклад, замовлення належить клієнту:
CREATE TABLE orders (
id INTEGER PRIMARY KEY,
customer_id INTEGER NOT NULL,
total_amount DECIMAL(12, 2),
FOREIGN KEY (customer_id) REFERENCES customers(id)
);
JOIN
JOIN використовується для обʼєднання даних із кількох таблиць.
Наприклад, є таблиці:
- customers;
- orders.
Щоб отримати замовлення разом із іменем клієнта:
SELECT
orders.id,
customers.name,
orders.total_amount
FROM orders
JOIN customers ON customers.id = orders.customer_id;
Основні види JOIN
| Вид JOIN | Що робить |
|---|---|
| INNER JOIN | Повертає тільки рядки, які мають відповідність в обох таблицях |
| LEFT JOIN | Повертає всі рядки з лівої таблиці й відповідні з правої, якщо вони є |
| RIGHT JOIN | Повертає всі рядки з правої таблиці й відповідні з лівої |
| FULL JOIN | Повертає всі рядки з обох таблиць, навіть якщо відповідності немає |
| CROSS JOIN | Створює всі можливі комбінації рядків |
INNER JOIN
SELECT
customers.name,
orders.total_amount
FROM customers
INNER JOIN orders ON orders.customer_id = customers.id;
LEFT JOIN
LEFT JOIN корисний, коли потрібно показати всі записи з основної таблиці, навіть якщо повʼязаних записів немає.
SELECT
customers.name,
orders.total_amount
FROM customers
LEFT JOIN orders ON orders.customer_id = customers.id;
Наприклад, так можна знайти клієнтів без замовлень:
SELECT customers.* FROM customers LEFT JOIN orders ON orders.customer_id = customers.id WHERE orders.id IS NULL;
GROUP BY
GROUP BY групує рядки.
Наприклад, сума продажів по кожному клієнту:
SELECT
customer_id,
SUM(total_amount) AS total_sales
FROM orders
GROUP BY customer_id;
HAVING
HAVING фільтрує результат після групування.
SELECT
customer_id,
SUM(total_amount) AS total_sales
FROM orders
GROUP BY customer_id
HAVING SUM(total_amount) > 10000;
Агрегатні функції
| Функція | Що робить |
|---|---|
| COUNT | Рахує кількість рядків |
| SUM | Обчислює суму |
| AVG | Обчислює середнє значення |
| MIN | Знаходить мінімум |
| MAX | Знаходить максимум |
Приклад:
SELECT
COUNT(*) AS orders_count,
SUM(total_amount) AS total_sales,
AVG(total_amount) AS average_order
FROM orders;
DISTINCT
DISTINCT прибирає дублікати.
SELECT DISTINCT city FROM customers;
LIKE
LIKE використовується для пошуку за шаблоном.
SELECT * FROM customers WHERE name LIKE 'Ан%';
Цей запит знайде імена, які починаються на “Ан”.
IN
IN перевіряє, чи значення входить у список.
SELECT *
FROM customers
WHERE city IN ('Київ', 'Львів', 'Одеса');
BETWEEN
BETWEEN перевіряє діапазон.
SELECT * FROM orders WHERE created_at BETWEEN '2026-01-01' AND '2026-01-31';
NULL
NULL означає відсутність значення.
Перевірка NULL:
SELECT * FROM customers WHERE email IS NULL;
Перевірка не NULL:
SELECT * FROM customers WHERE email IS NOT NULL;
NULL — це не нуль і не порожній рядок. Це саме відсутність значення.
Subquery
Subquery або підзапит — це запит всередині іншого запиту.
SELECT *
FROM customers
WHERE id IN (
SELECT customer_id
FROM orders
WHERE total_amount > 10000
);
CTE
CTE або Common Table Expression — це тимчасовий іменований результат запиту.
WITH customer_sales AS (
SELECT
customer_id,
SUM(total_amount) AS total_sales
FROM orders
GROUP BY customer_id
)
SELECT *
FROM customer_sales
WHERE total_sales > 10000;
CTE робить складні запити читабельнішими.
Window functions
Віконні функції дозволяють робити аналітичні обчислення без згортання рядків.
Приклад нумерації замовлень клієнта:
SELECT
customer_id,
id AS order_id,
total_amount,
ROW_NUMBER() OVER (
PARTITION BY customer_id
ORDER BY created_at
) AS order_number
FROM orders;
Приклад накопичувальної суми:
SELECT
created_at, total_amount, SUM(total_amount) OVER ( ORDER BY created_at ) AS running_totalFROM orders;
Індекси
Індекс — це спеціальна структура, яка прискорює пошук у таблиці.
Створення індексу:
CREATE INDEX idx_customers_email ON customers(email);
Індекси корисні для:
- пошуку;
- JOIN;
- фільтрації;
- сортування;
- унікальності.
Але індекси мають і мінуси:
- займають місце;
- сповільнюють INSERT, UPDATE, DELETE;
- потребують правильного вибору колонок.
Унікальний індекс
CREATE UNIQUE INDEX idx_customers_email_unique ON customers(email);
Унікальний індекс не дозволяє дублювати значення.
Транзакції
Транзакція — це набір операцій, які мають виконатися повністю або не виконатися взагалі.
Класичний приклад — переказ грошей:
зняти гроші з рахунку A; додати гроші на рахунок B; якщо друга дія не вдалася — скасувати першу.
SQL-приклад:
BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;
Якщо сталася помилка:
ROLLBACK;
ACID
ACID — це набір властивостей транзакцій.
| Літера | Назва | Пояснення |
|---|---|---|
| A | Atomicity | Транзакція виконується повністю або не виконується взагалі |
| C | Consistency | База переходить з одного правильного стану в інший |
| I | Isolation | Паралельні транзакції не мають ламати одна одну |
| D | Durability | Після COMMIT дані мають зберегтися навіть після збою |
View
View або представлення — це збережений запит, який можна використовувати як таблицю.
CREATE VIEW active_customers AS SELECT * FROM customers WHERE is_active = true;
Використання:
SELECT * FROM active_customers;
Stored procedures
Stored procedure — це збережена процедура в базі даних.
Синтаксис сильно залежить від конкретної СУБД.
Приклад ідеї:
CREATE PROCEDURE close_order(order_id INTEGER)
LANGUAGE SQL
AS $$
UPDATE orders
SET status = 'closed'
WHERE id = order_id;
$$;
Тригери
Trigger або тригер — це дія, яка автоматично виконується при певній події в таблиці.
Наприклад:
- перед INSERT;
- після UPDATE;
- перед DELETE;
- після зміни статусу.
Тригери можуть бути корисні, але ними не варто зловживати, бо прихована логіка в базі ускладнює підтримку.
SQL у backend-розробці
У backend SQL зазвичай використовується через:
- прямі SQL-запити;
- ORM;
- query builder;
- stored procedures;
- migrations.
Приклад SQL у коді:
SELECT id, name, email FROM users WHERE email = ?;
У реальному коді важливо використовувати параметризовані запити, щоб уникати SQL Injection.
SQL Injection
SQL Injection — це атака, коли зловмисний текст потрапляє в SQL-запит і змінює його логіку.
Небезпечний приклад:
SELECT * FROM users WHERE email = '$email';
Якщо вставити дані напряму, можна отримати вразливість. Безпечний принцип:
Використовувати параметризовані запити, prepared statements або ORM.
Ніколи не треба склеювати SQL-запит із сирими даними користувача.
ORM і SQL
ORM або Object-Relational Mapping — це інструмент, який дозволяє працювати з базою через обʼєкти коду.
Приклади ORM:
| Мова | ORM / інструмент |
|---|---|
| PHP | Eloquent, Doctrine |
| Python | SQLAlchemy, Django ORM |
| JavaScript / TypeScript | Prisma, TypeORM, Sequelize, Drizzle |
| Java | Hibernate |
| C# | Entity Framework |
ORM спрощує розробку, але знання SQL все одно потрібне.
ORM може сховати SQL, але не може скасувати потребу розуміти базу даних.
SQL у Data Analytics
SQL дуже важливий для аналітики.
Типові аналітичні задачі:
- продажі за період;
- середній чек;
- кількість клієнтів;
- повторні покупки;
- топ товарів;
- залишки;
- динаміка доходу;
- cohort analysis;
- funnel analysis;
- звіти для керівництва.
Приклад звіту по продажах за місяць:
SELECT
DATE_TRUNC('month', created_at) AS month,
SUM(total_amount) AS sales
FROM orders
GROUP BY DATE_TRUNC('month', created_at)
ORDER BY month;
SQL у ERP
В ERP-системах SQL використовується для:
- документів;
- проводок;
- складу;
- залишків;
- партій товарів;
- контрагентів;
- договорів;
- оплат;
- актів;
- звітів;
- прав доступу;
- аналітики.
Типові таблиці ERP:
| Таблиця | Що зберігає |
|---|---|
| customers | Контрагентів |
| products | Товари й послуги |
| warehouses | Склади |
| stock_movements | Рухи товарів |
| invoices | Рахунки |
| payments | Оплати |
| documents | Документи |
| users | Користувачів |
| roles | Ролі доступу |
SQL у BI
BI-системи часто використовують SQL для підготовки даних.
Популярні BI-інструменти:
- Power BI;
- Tableau;
- Metabase;
- Apache Superset;
- Looker;
- Redash.
SQL-запит може бути основою dashboard.
Query plan
Query plan або план виконання — це пояснення, як база даних буде виконувати запит.
У PostgreSQL:
EXPLAIN SELECT * FROM customers WHERE email = 'anna@example.com';
З аналізом виконання:
EXPLAIN ANALYZE SELECT * FROM customers WHERE email = 'anna@example.com';
План виконання допомагає зрозуміти:
- чи використовується індекс;
- які таблиці читаються;
- де повільне місце;
- як оптимізувати запит.
Оптимізація SQL
Основні принципи оптимізації:
| Принцип | Пояснення |
|---|---|
| Створювати правильні індекси | Індекси прискорюють пошук, JOIN і сортування |
| Не вибирати зайве | Замість SELECT * краще вибирати потрібні колонки
|
| Аналізувати EXPLAIN | План виконання показує реальну роботу запиту |
| Уникати N+1 queries | Часто виникає через ORM |
| Фільтрувати раніше | Чим менше рядків обробляється, тим краще |
| Правильно проєктувати схему | Погана структура таблиць створює складні й повільні запити |
Нормалізація
Нормалізація — це підхід до проєктування бази, щоб зменшити дублювання даних і покращити цілісність.
Приклад поганої структури:
| order_id | customer_name | customer_email | product_name |
|---|---|---|---|
| 1 | Анна | anna@example.com | Ноутбук |
| 2 | Анна | anna@example.com | Миша |
Краще розділити:
- customers;
- products;
- orders;
- order_items.
Денормалізація
Денормалізація — це свідоме дублювання даних для швидшого читання або простішої аналітики.
Денормалізація може бути корисною для:
- звітів;
- data warehouse;
- BI;
- кешованих таблиць;
- високонавантажених систем.
Але її треба використовувати обережно.
Міграції бази даних
Міграції — це контрольовані зміни структури бази даних.
Міграції потрібні, щоб:
- створювати таблиці;
- додавати колонки;
- змінювати індекси;
- оновлювати схему;
- синхронізувати базу між середовищами;
- зберігати історію змін.
Типова міграція:
CREATE TABLE products (
id INTEGER PRIMARY KEY,
name VARCHAR(255) NOT NULL,
price DECIMAL(12, 2) NOT NULL
);
Backup і Restore
Для баз даних критично важливі резервні копії.
| Терміни | Пояснення |
|---|---|
| Backup | Резервна копія даних |
| Restore | Відновлення даних із резервної копії |
| Point-in-time recovery | Відновлення на конкретний момент часу |
| Dump | Експорт структури й даних у файл |
База без backup — це не база, а ризикована тимчасова таблиця.
Переваги SQL
| Перевага | Пояснення |
|---|---|
| Стандартність | SQL підтримується багатьма СУБД |
| Зрозумілість | Базові запити читаються досить просто |
| Потужність | JOIN, GROUP BY, CTE, віконні функції дають сильні можливості |
| Надійність | Реляційні бази добре підходять для критичних даних |
| Транзакції | ACID забезпечує цілісність даних |
| Аналітика | SQL дуже сильний для звітів і вибірок |
| Поширеність | SQL потрібен у backend, BI, ERP, CRM, data engineering |
Недоліки SQL
| Недолік | Пояснення |
|---|---|
| Різні діалекти | PostgreSQL, MySQL, SQL Server і Oracle мають відмінності |
| Складна оптимізація | Швидкі запити потребують знання індексів і планів виконання |
| Не завжди зручно для дуже гнучких даних | Для сильно змінної структури інколи краще NoSQL |
| JOIN можуть бути складними | Великі схеми потребують уважного проєктування |
| Можливі небезпечні помилки | UPDATE або DELETE без WHERE можуть пошкодити дані |
| Потрібна дисципліна схеми | Погана модель даних створює проблеми на роки |
Типові помилки новачків
| Помилка | Чому це проблема |
|---|---|
| SELECT * всюди | Зайві дані, гірша продуктивність, залежність від структури таблиці |
| UPDATE без WHERE | Може змінити всі записи |
| DELETE без WHERE | Може видалити всі записи |
| Ігнорування індексів | Запити стають повільними |
| Неправильні JOIN | Дані дублюються або губляться |
| Плутанина з NULL | NULL не дорівнює нулю або порожньому рядку |
| Склеювання SQL із введенням користувача | Ризик SQL Injection |
Коли SQL — хороший вибір
| Задача | Чи підходить SQL? |
|---|---|
| ERP | Дуже добре |
| CRM | Дуже добре |
| Фінансовий облік | Дуже добре |
| Інтернет-магазин | Добре |
| Backend API | Добре |
| BI-звіти | Дуже добре |
| Транзакційні системи | Дуже добре |
| Гнучкі документи без сталої структури | Можливо, але варто розглянути NoSQL |
| Графові задачі | Можливо, але інколи краще graph database |
| Великі неструктуровані файли | Не основний вибір |
SQL у порівнянні з іншими технологіями
| Технологія | Порівняння з SQL |
|---|---|
| NoSQL | Гнучкіші моделі даних, але не завжди така ж сила транзакцій і JOIN |
| MongoDB | Добре для документів; SQL краще для класичних звʼязаних бізнес-даних |
| Redis | Дуже швидкий key-value/cache; SQL краще для постійних структурованих даних |
| Elasticsearch | Сильний для пошуку; SQL сильний для обліку й транзакцій |
| Graph databases | Сильні для графових звʼязків; SQL сильний для таблиць і звітів |
Кому варто вивчати SQL
| Кому | Чому |
|---|---|
| Backend-розробникам | Майже кожен backend працює з базою даних |
| Frontend-розробникам | Корисно розуміти, звідки беруться дані |
| Аналітикам | SQL — базовий інструмент роботи з даними |
| QA | Потрібно перевіряти дані в базі |
| DevOps | Потрібно розуміти backup, restore, performance, migrations |
| ERP-консультантам | SQL потрібен для звітів, перевірок і аналізу даних |
| Product managers | SQL допомагає самостійно перевіряти метрики |
Рекомендований шлях навчання SQL
| Етап | Що вивчати |
|---|---|
| 1 | Таблиці, рядки, колонки |
| 2 | SELECT, WHERE, ORDER BY, LIMIT |
| 3 | INSERT, UPDATE, DELETE |
| 4 | Типи даних |
| 5 | Primary Key і Foreign Key |
| 6 | JOIN |
| 7 | GROUP BY, HAVING, агрегатні функції |
| 8 | Subquery і CTE |
| 9 | Індекси |
| 10 | Транзакції |
| 11 | Window functions |
| 12 | EXPLAIN і оптимізація |
| 13 | Міграції, backup, restore |
Мінімальний набір для практики SQL
| Компонент | Рекомендація |
|---|---|
| СУБД для старту | PostgreSQL або SQLite |
| GUI-клієнт | DBeaver, DataGrip, pgAdmin |
| Практичні таблиці | customers, products, orders, order_items |
| Обовʼязкові теми | SELECT, JOIN, GROUP BY, індекси, транзакції |
| Для backend | SQL + ORM + migrations |
| Для аналітики | SQL + BI + window functions |
Приклад навчальної бази
CREATE TABLE customers (
id INTEGER PRIMARY KEY,
name VARCHAR(255) NOT NULL,
city VARCHAR(100)
);
CREATE TABLE orders (
id INTEGER PRIMARY KEY,
customer_id INTEGER NOT NULL,
total_amount DECIMAL(12, 2) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (customer_id) REFERENCES customers(id)
);
Дані:
INSERT INTO customers (id, name, city) VALUES
(1, 'Анна', 'Київ'), (2, 'Олег', 'Львів'), (3, 'Марія', 'Київ');INSERT INTO orders (id, customer_id, total_amount) VALUES
(1, 1, 1200.00), (2, 1, 800.00), (3, 2, 3000.00);
Звіт:
SELECT
customers.name, SUM(orders.total_amount) AS total_salesFROM customers JOIN orders ON orders.customer_id = customers.id GROUP BY customers.name ORDER BY total_sales DESC;
Простими словами
SQL — це мова питань до бази даних.
Якщо в системі є клієнти, товари, замовлення, оплати, документи або звіти — десь поруч майже завжди є SQL.
Висновок
SQL — одна з найважливіших мов в IT.
Вона потрібна для:
- backend-розробки;
- ERP і CRM;
- аналітики;
- звітності;
- BI;
- data engineering;
- тестування;
- адміністрування баз даних;
- фінансових і облікових систем.
SQL простий для першого запиту, але дуже глибокий для професійної роботи. Саме тому його варто вивчати не тільки програмістам, а й аналітикам, тестувальникам, ERP-консультантам, DevOps-інженерам і менеджерам продуктів.
SQL — це фундаментальна мова роботи з даними. Хто розуміє SQL, той краще розуміє, як живе інформація всередині бізнес-систем.
Джерела
- ISO/IEC 9075-1:2023 — SQL Framework: https://www.iso.org/standard/76583.html
- SQL Standard ISO/IEC 9075:2023: https://blog.ansi.org/ansi/sql-standard-iso-iec-9075-2023-ansi-x3-135/
- PostgreSQL Documentation: https://www.postgresql.org/docs/
- MySQL Documentation: https://dev.mysql.com/doc/
- Microsoft SQL Server Documentation: https://learn.microsoft.com/en-us/sql/
- SQLite Documentation: https://www.sqlite.org/docs.html
- DB-Engines Ranking: https://db-engines.com/en/ranking
- Stack Overflow Developer Survey: https://survey.stackoverflow.co/