ЛЕКЦІЯ 14

ORDER BY та сортування

Основи баз даних

VTFK • 2025

Що вже вивчили

Лекція 13: Дати та час

  • DATE, TIME, TIMESTAMP типи
  • Функції DATE_ADD, DATEDIFF
  • Вибір по датам

План лекції

  • ORDER BY ASC/DESC
  • Сортування по кількох колонках
  • Вплив NULL на сортування
  • Продуктивність

Фокус: упорядкування результатів

Навіщо ORDER BY

ORDER BY

Sorting

Упорядкування рядків за значенням колонок у зростаючому або спадаючому порядку.

Аналогія: Як сортування книг по назві, числа від меншого до більшого

Хід виконання запиту з ORDER BY

Де сортує БД

%%{init: {"theme": "neutral", "mermaid": {"version": "11.12.2"}}}%% flowchart TD All[(Таблиця)] All -->|FROM| Read[Прочитай] Read -->|WHERE| Filter[Фільтруй] Filter -->|SELECT| Project[Проектуй] Project -->|ORDER BY| Sort[Сортуй] Sort -->|LIMIT| Limit[Обмежи] Limit --> Result[Результат]

Базовий ORDER BY

SELECT column1, column2 FROM table WHERE condition ORDER BY column1 ASC, column2 DESC;
ASC — зростаючий порядок (за замовчуванням)
DESC — спадаючий порядок
кілька колонок — сортування по пріоритету
ASC — зростаючий порядок (за замовчуванням)
DESC — спадаючий порядок
кілька колонок — сортування по пріоритету
ASC — зростаючий порядок (за замовчуванням)
DESC — спадаючий порядок
кілька колонок — сортування по пріоритету

ASC vs DESC

Приклади ORDER BY

Різні варіанти сортування

-- Сортування по імені від А до Я
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;

Поведінка NULL при сортуванні

БД ASC DESC
MySQL NULL спочатку NULL в кінці
PostgreSQL NULL в кінці NULL спочатку
SQLite NULL спочатку NULL в кінці
SQL Server NULL спочатку NULL в кінці

ORDER BY з 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;

Міні-вікторина

Як отримати TOP 10 продажів (найбільші першими)?

  • ORDER BY amount ASC LIMIT 10
  • ORDER BY amount DESC LIMIT 10
  • TOP 10 SELECT amount
✅ Правильна відповідь: ORDER BY amount DESC LIMIT 10
💡 Пояснення:

DESC = спадаючий = найбільші першими, LIMIT 10 = перші 10

Помилка: сортування по функції

⚠️ ЗАСТЕРЕЖЕННЯ

Функції на колонці можуть уповільнити запит

❌ Неправильно

SELECT * FROM users
ORDER BY LENGTH(name) DESC;  -- повільно

БД має обчислити LENGTH для кожного рядка, потім сортувати

✓ Правильно

SELECT * FROM users
ORDER BY name DESC;  -- швидко

Прямо по колонці краще, використовуйте індекси

LIMIT для TOP N запитів

ORDER BY + LIMIT

Отримувати 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

Алгоритми сортування

Як БД сортує

1970s

Quicksort

Базовий алгоритм

1980s

Mergesort

Для великих наборів

2000s

Index-based

Сортування по індексу

2025

Adaptive

Гібридні алгоритми

Best practices ORDER BY

Міні ТЗ: рейтинг продажів

Комплексний запит

З множествоми сортування

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;

Підсумки

  • ORDER BY упорядковує результати
  • ASC = зростаючий, DESC = спадаючий
  • LIMIT N отримує Top-N результатів

Далі — JOIN для об'єднання таблиць

Домашнє завдання

Наступна лекція:

Лекція 15: JOIN Logic

📚 Корисні ресурси:

📚 Корисні ресурси:

Дякую за увагу! 💾

← Повернутися до списку лекцій