Основи баз даних
VTFK • 2025
Лекція 13: Дати та час
Фокус: упорядкування результатів
Упорядкування рядків за значенням колонок у зростаючому або спадаючому порядку.
Аналогія: Як сортування книг по назві, числа від меншого до більшого
Де сортує БД
SELECT column1, column2
FROM table
WHERE condition
ORDER BY column1 ASC, column2 DESC;
Різні варіанти сортування
-- Сортування по імені від А до Я
SELECT * FROM users
ORDER BY name ASC;
-- Новіші замовлення першими
SELECT * FROM orders
ORDER BY created_at DESC;
-- По ціні від дорожчих
SELECT * FROM products
ORDER BY price DESC;
-- По кількох колонках
SELECT * FROM users
ORDER BY country ASC, name ASC;
Пріоритет важливий
-- Сортуємо країну спочатку, потім імя
SELECT country, name, email
FROM users
ORDER BY country ASC, name ASC;
-- Результат: Франція А...Я, Німеччина А...Я
-- Дерівні умови по статусу, потім давніші відповіді
SELECT * FROM orders
ORDER BY status DESC, created_at DESC;
| БД | ASC | DESC |
|---|---|---|
| MySQL | NULL спочатку | NULL в кінці |
| PostgreSQL | NULL в кінці | NULL спочатку |
| SQLite | NULL спочатку | NULL в кінці |
| SQL Server | NULL спочатку | NULL в кінці |
Контроль роботи з NULL
-- Поставити NULL в кінець (MySQL)
SELECT * FROM users
ORDER BY phone IS NULL, phone ASC;
-- Поставити NULL на початок (PostgreSQL)
SELECT * FROM users
ORDER BY phone DESC NULLS FIRST;
-- Стандартне сортування
SELECT * FROM products
WHERE stock IS NOT NULL -- виключити NULL
ORDER BY stock DESC;
DESC = спадаючий = найбільші першими, LIMIT 10 = перші 10
Функції на колонці можуть уповільнити запит
SELECT * FROM users
ORDER BY LENGTH(name) DESC; -- повільно
БД має обчислити LENGTH для кожного рядка, потім сортувати
SELECT * FROM users
ORDER BY name DESC; -- швидко
Прямо по колонці краще, використовуйте індекси
Отримувати Top-N результатів
-- TOP 5 найдорожчих товарів
SELECT name, price
FROM products
ORDER BY price DESC
LIMIT 5;
-- Останні 3 замовлення
SELECT *
FROM orders
ORDER BY created_at DESC
LIMIT 3;
-- Сторінка 2 (10 елементів на сторінку)
SELECT *
FROM posts
ORDER BY created_at DESC
LIMIT 10 OFFSET 10; -- пропустити перші 10
Як БД сортує
Базовий алгоритм
Для великих наборів
Сортування по індексу
Гібридні алгоритми
З множествоми сортування
SELECT
product_name,
category,
sales_count,
revenue
FROM sales_summary
WHERE category IN ('Electronics', 'Books')
AND sales_count > 50
ORDER BY
category ASC, -- групи по категоріям
revenue DESC, -- дорожчі товари першими
product_name ASC -- виконати назву
LIMIT 20;
Далі — JOIN для об'єднання таблиць
Лекція 15: JOIN Logic
Дякую за увагу! 💾