Вступ до рекурсії

Ієрархічні та рекурсивні запити в SQL Server

Jasmin Ludolf

Content Developer

Що таке рекурсія?

Рекурсія — це використання процедури, підпрограми, функції або алгоритму, що викликає сам(у) себе один чи кілька разів, доки не буде виконано задану умову

Зображення властивості рекурсії: багаторазовий самовиклик.

Ієрархічні та рекурсивні запити в SQL Server

Приклад з реального життя для рекурсії

Родове дерево — знайдіть усіх батьків за останні 5 поколінь

  • Зменште задачу до меншої тієї ж форми
    1. Вся задача: знайти всі п'ять поколінь
    2. Менша задача: знайти батька, знайти батька батька, ...
  • Обмежте кількість кроків

Рекурсивна властивість на прикладі родового дерева.

Ієрархічні та рекурсивні запити в SQL Server

Факти про рекурсію

Переваги:

  • Розв'язує задачі рекурсивно
  • Легко читати й відстежувати
  • Рекурсію можна обмежити умовою зупинки

Недоліки:

  • Повільніше виконання
Ієрархічні та рекурсивні запити в SQL Server

Приклад рекурсії — сума чисел

Математичне означення

Сума послідовних чисел визначається рекурсивно так:

number = 1 
    for iteration = 1
number = number + (iteration - 1) 
    for iteration > 1

Сума чисел до 5 дорівнює:

1+2+3+4+5 = 15
Ієрархічні та рекурсивні запити в SQL Server

Приклад рекурсії — сума чисел

  • Рекурсія в SQL: Common Table Expression — CTE
WITH calculate_SumOfNumber AS
     ( -- Initial Query
    SELECT 1 AS iteration, 1 AS SumOfNumber

UNION ALL -- Recursive Part SELECT iteration + 1, SumOfNumber + (iteration + 1) FROM calculate_SumOfNumber
WHERE iteration < 6 )
SELECT SumOfNumber FROM calculate_SumOfNumber
Ієрархічні та рекурсивні запити в SQL Server

Давайте потренуємось!

Ієрархічні та рекурсивні запити в SQL Server

Preparing Video For Download...