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

SQL

Матеріал з K2 ERP Wiki

WHERE email = 'anna@example.com';

SQL був стандартизований ANSI у 1986 році, а потім прийнятий ISO.;== Query plan == WHERE created_at BETWEEN '2026-01-01' AND '2026-01-31';

city VARCHAR(100),
id INTEGER PRIMARY KEY,

Мінімальний набір для практики SQL

!Статус

як ілюстрація, замість того щоб вручну пояснювати:

|-
|'''COUNT'''
|Рахує кількість рядків
|-
|'''SUM'''
|Обчислює суму
|-
|'''AVG'''
|Обчислює середнє значення
|-
|'''MIN'''
|Знаходить мінімум
|-
|'''MAX'''
|Знаходить максимум
|}
'''Індекс''' — це спеціальна структура, яка прискорює пошук у таблиці.; WHERE status = 'paid'

== Історичний розвиток ==
FROM customers

== ORM і SQL ==
!Приклади
ON customers(email);
 id INTEGER PRIMARY KEY,
WITH customer_sales AS (
WHERE id = 1;

WHERE city = 'Київ'

id INTEGER PRIMARY KEY,

додати гроші на рахунок B;

переважні аспекти SQL

  • чи застосовується індекс;
  • які таблиці читаються;
  • де повільне місце;
  • як оптимізувати запит.; відкрий таблицю;
Вид JOIN СУБД

Типи даних можуть відрізнятися між СУБД, але загальна логіка схожа.; UPDATE orders

Використання:

{| class="wikitable sortable" == Міграції бази даних == !Чому це проблема '''Query plan''' або план виконання — це пояснення, як база даних буде виконувати запит.;<pre> == Основні типи SQL-команд == якщо друга дія не вдалася — скасувати першу.; Сучасний міжнародний стандарт має назву '''ISO/IEC 9075'''.; реліз '''SQL:2023''' була опублікована у 2023 році.; Перед виконанням небезпечних запитів потрібно перевіряти умову.'''</blockquote> Вона потрібна для:

!SQL

  • Power BI;
  • Tableau;
  • Metabase;
  • Apache Superset;
  • Looker;
  • Redash.; Після цього зʼявилися мови для роботи з реляційними базами даних, серед яких найважливішою стала SQL.;== Backup і Restore ==

== Важливі акценти == FROM customers; Таблиця має: Але індекси мають і мінуси: SELECT customers.* INSERT INTO customers (name, city, email)

Унікальний індекс не надає можливість дублювати значення.;

DROP TABLE видаляє структуру таблиці разом із даними.;== NULL ==

  • займають місце;
  • сповільнюють INSERT, UPDATE, DELETE;
  • потребують правильного вибору колонок.;

SQL-запит має змогу бути основою dashboard.; * створювати таблиці; * додавати колонки; * змінювати індекси; * оновлювати схему; * синхронізувати базу між середовищами; * зберігати історію змін.; Це саме відсутність значення.'''</blockquote> == Window functions == == CTE == '''Віконні функції''' дозволяють робити аналітичні обчислення без згортання рядків.;<pre> !Літера ROW_NUMBER() OVER ( |- |'''Backend-розробникам''' |Майже кожен backend функціонує з базою даних |- |'''Frontend-розробникам''' |Корисно розуміти, звідки беруться інформаційні дані |- |'''Аналітикам''' |SQL — базовий інструмент роботи з даними |- |'''QA''' |Потрібно перевіряти інформаційні дані в базі |- |'''DevOps''' |Потрібно розуміти backup, restore, performance, migrations |- |'''ERP-консультантам''' |SQL потрібен для звітів, перевірок і аналізу даних |- |'''Product managers''' |SQL сприяє самостійно перевіряти метрики |} VALUES !Чи підходить SQL?;<pre>

CREATE TABLE customers (

Нормалізація

SQL Injection

FROM customers Приклад ідеї:
FROM customers
 created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FROM customers
SELECT id, name, email
!Компонент
 name VARCHAR(255) NOT NULL,
!Пояснення
== HAVING ==
== Висновок ==

EXPLAIN ANALYZE
);

 orders.total_amount
SELECT *
!Теза
 id AS order_id,
GROUP BY DATE_TRUNC('month', created_at)
!Значення
Якщо вставити інформаційні дані напряму, можна отримати вразливість.; Денормалізація — це свідоме дублювання даних для швидшого читання або простішої аналітики.;

== Джерела ==

== Денормалізація == FROM customers

Типові аналітичні задачі:

  • backend-розробки;
  • ERP і CRM;
  • аналітики;
  • звітності;
  • BI;
  • data engineering;
  • тестування;
  • адміністрування баз даних;
  • фінансових і облікових систем.;<blockquote>'''Якщо в системі є собою клієнти, товари, замовлення, оплати, документи або звіти — десь поруч майже завжди є собою SQL.'''</blockquote>

WHERE total_sales > 10000; DROP TABLE customers;

DROP TABLE

Основні типи даних SQL

NoSQL У PostgreSQL:
SELECT *
Приклад накопичувальної суми:

);

Змінити назву колонки:

'''Нормалізація''' — це підхід до проєктування бази, щоб зменшити дублювання даних і покращити цілісність.;<pre> SELECT * FOREIGN KEY (customer_id) REFERENCES customers(id) FROM products == DISTINCT ==

'''CTE''' або '''Common Table Expression''' — це тимчасовий іменований результат запиту.; HAVING SUM(total_amount) > 10000;

'''IN''' перевіряє, чи значення входить у список.; city VARCHAR(100) SET city = 'Одеса' WHERE id = 1; !Назва

customer_id, !Тип SUM(orders.total_amount) AS total_sales Тригери можуть бути корисні, але ними не варто зловживати, бо прихована логіка в базі ускладнює підтримку.; $$; == Рекомендований шлях навчання SQL == WHERE email IS NULL; !id (2, 1, 800.00),

SELECT == Індекси == UPDATE accounts CREATE TABLE orders (

Приклад звіту по продажах за місяць:

Недоліки SQL

SELECT *

Subquery або підзапит — це запит всередині іншого запиту.;

 ORDER BY created_at

* продажі та реалізація за період;
* середній чек;
* кількість клієнтів;
* повторні покупки;
* топ товарів;
* залишки;
* динаміка доходу;
* cohort analysis;
* funnel analysis;
* звіти для керівництва.; customers.name,
Перевірка NULL:<pre>
SELECT
ORDER BY created_at DESC
JOIN customers ON customers.id = orders.customer_id;
{| class="wikitable"

)

DELETE FROM customers

Приклади ORM: WHERE city = 'Київ';
  • пошуку;
  • JOIN;
  • фільтрації;
  • сортування;
  • унікальності.; LIMIT 10;
LIMIT обмежує кількість рядків.; |-
істотно SQL у різних базах відрізняється PostgreSQL, MySQL, SQL Server і Oracle мають різний синтаксис для частини можливостей.; поверни результат;

Коли SQL — хороший вибір

Сортування від більшого до меншого:

{| class="wikitable" CREATE INDEX idx_customers_email

Кілька умов:

як ілюстрація, сума продажів по кожному клієнту:<pre> як ілюстрація, замовлення належить клієнту:<pre> !Рекомендація id INTEGER PRIMARY KEY, '''JOIN''' застосовується для обʼєднання даних із кількох таблиць.;<pre> !Перевага |- |1 |Анна |Київ |anna@example.com |- |2 |Олег |Львів |oleh@example.com |- |3 |Марія |Київ |maria@example.com |}

INSERT INTO customers (name, city, email)

SQL розшифровується як Structured Query Language — структурована мова запитів.; Перед виконанням потрібно мати backup або чітке розуміння наслідків.

WHERE name LIKE 'Ан%';

(1, 'Анна', 'Київ'),
ORDER BY created_at
Пояснення

FROM orders;

ORDER BY

З аналізом виконання:

!Мова == Простими словами ==

CREATE TABLE products ( Безпечний принцип:<pre> '''LIKE''' застосовується для пошуку за шаблоном.;<pre> SELECT * |- |'''customers''' |Контрагентів |- |'''products''' |Товари й послуги |- |'''warehouses''' |Склади |- |'''stock_movements''' |Рухи товарів |- |'''invoices''' |Рахунки |- |'''payments''' |Оплати |- |'''documents''' |Документи |- |'''users''' |Користувачів |- |'''roles''' |Ролі доступу |}

DELETE без WHERE має змогу видалити всі рядки таблиці.; |-

Ключове SQL простий на старті Базові SELECT, INSERT, UPDATE, DELETE можна вивчити оперативно.; !Для чого

SUM(total_amount) AS sales

SELECT

LIKE

ALTER TABLE customers SUM(total_amount) OVER ( AND total_amount > 1000;

Backup Резервна копія даних
Restore Відновлення даних із резервної копії
Point-in-time recovery Відновлення на конкретний момент часу
Dump Експорт структури й даних у файл

Кому варто вивчати SQL

Помилка BETWEEN перевіряє діапазон.;SQL-приклад:

!customer_name

SELECT * Додати колонку:<pre> WHERE orders.id IS NULL; == UPDATE == SELECT * CREATE TABLE customers ( FROM customers GROUP BY customers.name '''ORM''' або '''Object-Relational Mapping''' — це інструмент, який надає можливість працювати з базою через обʼєкти коду.; * прямі SQL-запити;

  • ORM;
  • query builder;
  • stored procedures;
  • migrations.; SELECT *

VALUES == SQL у backend-розробці == total_amount DECIMAL(12, 2), !Як застосовується SQL

Транзакція — це набір операцій, які мають виконатися в цілому або не виконатися взагалі.;== ACID ==

CTE робить складні запити читабельнішими.; Це різні інструменти для різних задач.

SELECT

Що робить

FROM customer_sales ORDER BY name;

Приклад нумерації замовлень клієнта:
ACID — це набір властивостей транзакцій.; !Пояснення

== WHERE ==
SQL дуже важливий для аналітики.;<pre>
== Типові помилки новачків ==
!Функція
|-
|'''Стандартність'''
|SQL підтримується багатьма СУБД
|-
|'''Зрозумілість'''
|Базові запити читаються досить без ускладнень
|-
|'''Потужність'''
|JOIN, GROUP BY, CTE, віконні функції дають сильні функціональні можливості
|-
|'''Надійність'''
|Реляційні бази добре підходять для критичних даних
|-
|'''Транзакції'''
|ACID гарантує цілісність даних
|-
|'''аналітичні інструменти'''
|SQL дуже сильний для звітів і вибірок
|-
|'''Поширеність'''
|SQL потрібен у backend, BI, ERP, CRM, data engineering
|}

У різних СУБД синтаксис має змогу відрізнятися.; Створення індексу:

== Оптимізація SQL == CREATE VIEW active_customers AS == Коротко == Реляційна база даних зберігає інформаційні дані у вигляді таблиць.; WHERE total_amount > 10000 SELECT |- |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 |}

customer_id INTEGER NOT NULL,

'''Міграції''' — це контрольовані зміни структури бази даних.; Хто розуміє SQL, той краще розуміє, як живе відомості всередині бізнес-систем.'''</blockquote>

Цей запит знайде імена, які починаються на “Ан”.; FROM products

SELECT застосовується для отримання даних.; CREATE TABLE створює таблицю.; |-

1 Анна anna@example.com Ноутбук
2 Анна anna@example.com Миша
  • customers;
  • products;
  • orders;
  • order_items.; У backend SQL зазвичай застосовується через:

JOIN

INSERT додає інформаційні дані.; {| class="wikitable"

customer_id,
Приклад SQL у коді:

WHERE id = 1;

GROUP BY customer_id;

UPDATE без WHERE має змогу змінити всі рядки таблиці.;

ORDER BY price DESC;

SELECT * ADD COLUMN phone VARCHAR(50); !Що зберігає INNER JOIN orders ON orders.customer_id = customers.id; name VARCHAR(255) NOT NULL SUM(total_amount) AS total_sales, |- |'''INTEGER''' |Цілі числа |<code>10</code> |- |'''BIGINT''' |Великі цілі числа |<code>123456789</code> |- |'''DECIMAL / NUMERIC''' |Точні числа, фінансовий блок |<code>1234.56</code> |- |'''FLOAT / DOUBLE''' |Дробові числа з плаваючою точкою |<code>3.14</code> |- |'''VARCHAR''' |Рядок змінної довжини |<code>'Hello'</code> |- |'''TEXT''' |Довгий текст |характеристика, коментар |- |'''DATE''' |Дата |<code>2026-05-06</code> |- |'''TIMESTAMP''' |Дата й час |<code>2026-05-06 12:30:00</code> |- |'''BOOLEAN''' |Так/ні |<code>true</code>, <code>false</code> |- |'''JSON / JSONB''' |JSON-дані |<code>{"name": "Anna"}</code> |}

customer_id, == BETWEEN ==

Якщо сталася помилка:

SELECT

як ілюстрація, так можна знайти клієнтів без замовлень:

!product_name {| class="wikitable"

  • однозначно знайти рядок;
  • звʼязувати таблиці;
  • уникати дублювання;
  • будувати зовнішні ключі.;<pre>

BI-системи часто використовують SQL для підготовки даних.;<pre> DATE_TRUNC('month', created_at) AS month, Ідея реляційної моделі даних була запропонована Едгаром Коддом у 1970 році.; |- | style="background:#d4edda; color:#155724; font-weight:bold;" |Ключове |'''SQL дуже глибокий''' |JOIN, індекси, транзакції, віконні функції, оптимізація запитів і плани виконання потребують досвіду.;<pre>

SELECT * !Терміни == INSERT == BEGIN; SELECT *

COMMIT;

SELECT id, name, email

В ERP-системах SQL застосовується для: SELECT * CREATE PROCEDURE close_order(order_id INTEGER)
CREATE TABLE customers ( Міграції потрібні, щоб:
Задача

SELECT

name VARCHAR(255) NOT NULL,

SQL описує результат, а база даних сама вирішує, як найкраще його отримати.

SELECT *

total_amount,

LEFT JOIN корисний, коли потрібно показати всі записи з основної таблиці, навіть якщо повʼязаних записів немає.; як ілюстрація, у Microsoft SQL Server часто застосовується TOP або OFFSET FETCH.; |-

INNER JOIN Повертає тільки рядки, які мають відповідність в обох таблицях
LEFT JOIN Повертає всі рядки з лівої таблиці й відповідні з правої, якщо вони є собою
RIGHT JOIN Повертає всі рядки з правої таблиці й відповідні з лівої
FULL JOIN Повертає всі рядки з обох таблиць, навіть якщо відповідності немає
CROSS JOIN Створює всі можливі комбінації рядків

JOIN orders ON orders.customer_id = customers.id

ORM спрощує розробку, але знання SQL все одно потрібне.;
 COUNT(*) AS orders_count,
 customers.name,
!email
{| class="wikitable"
SELECT

 SUM(total_amount) AS total_sales
== Foreign Key ==
'''ORDER BY''' сортує результат.;

SELECT

DELETE видаляє інформаційні дані.; |-

Ключове SQL є собою стандартом для реляційних баз Різні СУБД мають власні діалекти, але базові принципи SQL спільні.;у SQL пишуть:
customer_id,

перебери всі рядки; !Принцип

Ніколи не треба склеювати SQL-запит із сирими даними користувача.

Stored procedure — це збережена процедура в базі даних.; {| class="wikitable"

Назва SQL
Повна назва Structured Query Language
Тип Декларативна мова запитів до баз даних
Основна сфера Реляційні бази даних, аналітичні інструменти, backend, ERP, CRM, BI, формування звітів
Перші розробки 1970-ті роки
Перший стандарт ANSI 1986 рік
Сучасний міжнародний стандарт ISO/IEC 9075:2023
Популярні СУБД PostgreSQL, MySQL, MariaDB, Microsoft SQL Server, Oracle Database, SQLite
Складність для новачків Низька для базових запитів, середня для складної аналітики й оптимізації
Основне призначення Отримувати, змінювати, структурувати й аналізувати інформаційні дані

View

SQL у порівнянні з іншими технологіями

SUM(total_amount) AS total_sales Primary Key або первинний ключ — це унікальний ідентифікатор рядка в таблиці.;== CREATE TABLE == як ілюстрація, є собою таблиці: UPDATE змінює інформаційні дані.; |}
SELECT *

!name

!Що вивчати
VALUES
 orders.id,
 ) AS running_total
знайди клієнтів із Києва;
|-
|'''Backend'''
|Отримання й збереження даних застосунку
|Користувачі, замовлення, товари, документи
|-
|'''ERP'''
|обліковий облік, складський облік, фінансовий блок, документи, звіти
|Накладні, рахунки, залишки, проводки
|-
|'''CRM'''
|Клієнти, угоди, контакти, історичний розвиток взаємодії
|Картка клієнта, pipeline, задачі
|-
|'''аналітичні інструменти'''
|Вибірки, групування, підрахунки, звіти
|продажі та реалізація за місяць, топ товарів, LTV
|-
|'''BI'''
|інформаційні дані для dashboards і звітності
|Power BI, Metabase, Superset, Tableau
|-
|'''Data Engineering'''
|Перетворення й підготовка даних
|ETL, ELT, data warehouse
|-
|'''Тестування'''
|Перевірка даних у базі
|QA-запити, тестові вибірки
|-
|'''Адміністрування'''
|Керування структурами, правами, індексами
|CREATE TABLE, GRANT, INDEX
|}

LEFT JOIN orders ON orders.customer_id = customers.id;
CREATE UNIQUE INDEX idx_customers_email_unique

 name VARCHAR(255) NOT NULL,

== Унікальний індекс ==

* рядки;
* колонки;
* типи даних;
* первинні ключі;
* зовнішні ключі;
* обмеження;
* індекси.;
Індекси корисні для:

INSERT INTO orders (id, customer_id, total_amount)

SQL простий для першого запиту, але дуже глибокий для професійної роботи.; це мова структурованих запитів, яка застосовується; додатково реалізовано додавання даних, пошуку, фільтрації, сортування, актуалізація, видалення, обʼєднання таблиць, створення звітів, аналітики й керування доступом виступає ключовою рисою роботи з реляційними базами даних: створення таблиць забезпечується через SQL.; |-

Увага Поганий SQL має змогу сильно сповільнити систему Без індексів, правильних JOIN і оптимізації база має змогу працювати дуже повільно.; (2, 'Олег', 'Львів'),

FROM users як ілюстрація:

Різні діалекти PostgreSQL, MySQL, SQL Server і Oracle мають відмінності
Складна оптимізація Швидкі запити потребують знання індексів і планів виконання
Не завжди комфортно для дуже гнучких даних Для сильно змінної структури інколи краще NoSQL
JOIN можуть бути складними Великі схеми потребують уважного проєктування
Можливі небезпечні помилки UPDATE або DELETE без WHERE можуть пошкодити інформаційні дані
Потрібна дисципліна схеми Погана модель даних створює проблеми на роки

Популярні реляційні СУБД

Приклад таблиці клієнтів: ORDER BY month;

SELECT * всюди Зайві інформаційні дані, гірша продуктивність, залежність від структури таблиці
UPDATE без WHERE має змогу змінити всі записи
DELETE без WHERE має змогу видалити всі записи
Ігнорування індексів Запити стають повільними
Неправильні JOIN інформаційні дані дублюються або губляться
Плутанина з NULL NULL не дорівнює нулю або порожньому рядку
Склеювання SQL із введенням користувача Ризик SQL Injection
customers.name,
Що робить

Для баз даних критично важливі резервні копії.; |-

A Atomicity Транзакція виконується в цілому або не виконується взагалі
C Consistency База переходить з одного правильного стану в інший
I Isolation Паралельні транзакції не мають ламати одна одну
D Durability Після COMMIT інформаційні дані мають зберегтися навіть після збою

Для чого

Основні види JOIN

Subquery

price DECIMAL(12, 2) NOT NULL

LIMIT

CREATE TABLE orders (

FOREIGN KEY (customer_id) REFERENCES customers(id)

GROUP BY

FROM orders;

LEFT JOIN

('Олег', 'Львів', 'oleh@example.com'),

FROM orders

WHERE email IS NOT NULL;

Етап Пояснення

FROM orders

Таблиця

Головна ідея SQL

FROM orders

LEFT JOIN orders ON orders.customer_id = customers.id SELECT *

FROM customers

SELECT
  • перед INSERT;
  • після UPDATE;
  • перед DELETE;
  • після зміни статусу.;Вибір конкретних колонок:
FROM customers; |- |'''СУБД для старту''' |PostgreSQL або SQLite |- |'''GUI-клієнт''' |DBeaver, DataGrip, pgAdmin |- |'''Практичні таблиці''' |customers, products, orders, order_items |- |'''Обовʼязкові теми''' |SELECT, JOIN, GROUP BY, індекси, транзакції |- |'''Для backend''' |SQL + ORM + migrations |- |'''Для аналітики''' |SQL + BI + window functions |} !Порівняння з SQL !Параметр == ALTER TABLE == UPDATE accounts FROM customers <blockquote>'''База без backup — це не база, а ризикована тимчасова таблиця.'''</blockquote> План виконання сприяє зрозуміти:

);

orders.total_amount
Недолік

FROM orders;

Щоб отримати замовлення разом із іменем клієнта:

SET balance = balance - 100
 SELECT customer_id
 SET status = 'closed'
Перевірка не NULL:

!order_id !Тип INSERT INTO customers (id, name, city) {| class="wikitable"

{| class="wikitable sortable" Синтаксис сильно залежить від конкретної СУБД.;<pre> Але її треба використовувати обережно.; FROM customers

id INTEGER PRIMARY KEY,

);

total_amount DECIMAL(12, 2) NOT NULL,

'''DROP TABLE''' видаляє таблицю.;== INNER JOIN ==

(1, 1, 1200.00),

FROM customers; UPDATE customers

== SQL і NoSQL == !Пояснення

Первинний ключ потрібен, щоб:

WHERE id IN ( FROM orders


SELECT * ORDER BY total_sales DESC;

Назва
Приклад

ALTER TABLE customers

SQL — одна з найважливіших мов в IT.;

SQL — це фундаментальна мова роботи з даними.; FROM customers

Stored procedures

Агрегатні функції

('Марія', 'Київ', 'maria@example.com'); ROLLBACK;

Використовувати параметризовані запити, prepared statements або ORM.;

ORM має змогу сховати SQL, але не має змогу скасувати потребу розуміти базу даних.

DISTINCT прибирає дублікати.; Foreign Key або зовнішній ключ — це звʼязок між таблицями.; NULL означає відсутність значення.; FROM orders

orders.total_amount
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

FROM orders

SELECT

Типові таблиці ERP:

SQL у BI

PARTITION BY customer_id
SUM(total_amount) AS total_sales

Додавання кількох рядків:

<blockquote>'''SQL і NoSQL — це не “краще” і “гірше”.; Він описує, '''що саме''' потрібно отримати.; SQL-команди часто ділять на кілька груп.;<pre>

SQL найчастіше застосовують, коли потрібно в '''реляційних базах даних'''.;
AVG(total_amount) AS average_order

SELECT * SELECT DISTINCT city

Напрям Де застосовується

SELECT *

(3, 2, 3000.00);
email VARCHAR(255) UNIQUE,

AS $$ FROM active_customers;

Кому
Ключове SQL потрібен майже всім розробникам Backend, аналітичні інструменти, ERP, CRM, BI, DevOps і тестування часто працюють із базами даних.; Основні принципи оптимізації:

FROM customers

total_amount, FROM customers

Для чого застосовується SQL

WHERE id = order_id;

SQL Injection — це атака, коли зловмисний текст потрапляє в SQL-запит і змінює його логіку.; (3, 'Марія', 'Київ');

Приклад поганої структури: WHERE email = '$email';

Primary Key

FROM orders

GROUP BY customer_id
Технологія
customers.name,
) AS order_number

SQL не описує покроково, як саме базі даних знайти інформаційні дані.; );

Група

ALTER TABLE змінює структуру таблиці.; зняти гроші з рахунку A;

інформаційні дані:
  • документів;
  • проводок;
  • складу;
  • залишків;
  • партій товарів;
  • контрагентів;
  • договорів;
  • оплат;
  • актів;
  • звітів;
  • прав доступу;
  • аналітики.; Саме з цієї причини його варто вивчати не тільки програмістам, а й аналітикам, тестувальникам, ERP-консультантам, DevOps-інженерам і менеджерам продуктів.;<pre>

EXPLAIN Класичний приклад — переказ грошей:<pre> WHERE city IN ('Київ', 'Львів', 'Одеса'); GROUP BY customer_id SELECT *

created_at,
Звіт:

<pre> Небезпечний приклад:<pre> FROM customers SQL часто порівнюють із NoSQL.;<pre> WHERE email = ?; '''View''' або представлення — це збережений запит, який можна використовувати як таблицю.;== SQL у Data Analytics == Популярні BI-інструменти: {| class="wikitable" ); WHERE email = 'anna@example.com'; |- |'''Створювати правильні індекси''' |Індекси прискорюють пошук, JOIN і сортування |- |'''Не вибирати зайве''' |Замість <code>SELECT *</code> краще вибирати потрібні колонки |- |'''Аналізувати EXPLAIN''' |План виконання показує реальну роботу запиту |- |'''Уникати N+1 queries''' |Часто виникає через ORM |- |'''Фільтрувати раніше''' |Чим менше рядків обробляється, тим краще |- |'''Правильно проєктувати схему''' |Погана структура таблиць створює складні й повільні запити |}

'''GROUP BY''' групує рядки.; SET balance = balance + 100 |- |ERP | style="background:#d4edda; color:#155724; font-weight:bold;" |Дуже добре |- |CRM | style="background:#d4edda; color:#155724; font-weight:bold;" |Дуже добре |- |Фінансовий обліковий облік | style="background:#d4edda; color:#155724; font-weight:bold;" |Дуже добре |- |Інтернет-магазин | style="background:#d4edda; color:#155724; font-weight:bold;" |Добре |- |Backend API | style="background:#d4edda; color:#155724; font-weight:bold;" |Добре |- |BI-звіти | style="background:#d4edda; color:#155724; font-weight:bold;" |Дуже добре |- |Транзакційні системи | style="background:#d4edda; color:#155724; font-weight:bold;" |Дуже добре |- |Гнучкі документи без сталої структури | style="background:#fff3cd; color:#856404; font-weight:bold;" |Можливо, але варто розглянути NoSQL |- |Графові задачі | style="background:#fff3cd; color:#856404; font-weight:bold;" |Можливо, але інколи краще graph database |- |Великі неструктуровані файли | style="background:#f8d7da; color:#721c24; font-weight:bold;" |Не ключовий вибір |}

== DELETE == LANGUAGE SQL == Приклад навчальної бази == {| class="wikitable" |- |'''NoSQL''' |Гнучкіші моделі даних, але не завжди така ж сила транзакцій і JOIN |- |'''MongoDB''' |Добре для документів; SQL краще для класичних звʼязаних бізнес-даних |- |'''Redis''' |Дуже швидкий key-value/cache; SQL краще для постійних структурованих даних |- |'''Elasticsearch''' |Сильний для пошуку; SQL сильний для обліку й транзакцій |- |'''Graph databases''' |Сильні для графових звʼязків; SQL сильний для таблиць і звітів |}

FROM products '''HAVING''' фільтрує результат після групування.; );

customer_id INTEGER NOT NULL,

IN

  • customers;
  • orders.;

WHERE is_active = true;

id INTEGER PRIMARY KEY,

SQL — це мова питань до бази даних.; !Приклади WHERE id = 2;

Транзакції

  • звітів;
  • data warehouse;
  • BI;
  • кешованих таблиць;
  • високонавантажених систем.; RENAME COLUMN phone TO phone_number;
Trigger або тригер — це дія, яка автономно виконується при певній події в таблиці.;

SQL — це мова, якою програма, аналітик або адміністратор “розмовляє” з базою даних.

SQL і реляційні бази даних

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-системи

Тригери

Денормалізація має змогу бути корисною для: SELECT

created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
Реляційна модель даних Документна, key-value, graph, column-family та інші моделі
Таблиці, рядки, колонки Документи, ключі, графи, колонки
Сильна структура Гнучкіша структура
JOIN і транзакції Залежить від конкретної NoSQL-бази
Добре для обліку, ERP, CRM, фінансів Добре для гнучких, великих або спеціалізованих даних
У реальному коді істотно використовувати параметризовані запити, щоб уникати SQL Injection.;== SQL у ERP ==
customer_email

Краще розділити: ON customers(email);

ORDER BY price ASC; відсортуй їх за іменем;

FROM customers

city Приклад:
!Пояснення
|-
|'''PHP'''
|Eloquent, Doctrine
|-
|'''Python'''
|SQLAlchemy, Django ORM
|-
|'''JavaScript / TypeScript'''
|Prisma, TypeORM, Sequelize, Drizzle
|-
|'''Java'''
|Hibernate
|-
|'''C#'''
|Entity Framework
|}
FROM orders

Типова міграція:<pre>
'''WHERE''' фільтрує рядки.; Це одна з найнебезпечніших помилок у SQL.'''</blockquote>

!ORM / інструмент
!Чому

NULL — це не нуль і не порожній рядок.; VALUES ('Анна', 'Київ', 'anna@example.com');

FROM users