Перейти до вмісту

SQL

Матеріал з K2 ERP Wiki
Версія від 17:41, 6 травня 2026, створена R (обговорення | внесок) (Первинна публікація)
(різн.) ← Попередня версія | Поточна версія (різн.) | Новіша версія → (різн.)

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 email
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_total

FROM 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_sales

FROM 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, той краще розуміє, як живе інформація всередині бізнес-систем.

Джерела