Порядок обработки запроса

Введение в Oracle SQL

Hadrien Lacroix

Content Developer

Зачем важен порядок обработки?

  • Оптимизируйте запросы
    • Никаких нежелательных результатов
    • Более быстрое выполнение
Введение в Oracle SQL

Пример

    SELECT BillingCountry, AVG(Total) > 100) AS Average
    FROM Invoice
    WHERE BillingCity <> 'Paris' 
    GROUP BY BillingCountry
    HAVING AVG(Total) > 100
    ORDER BY Average DESC
Введение в Oracle SQL

Пример

    SELECT BillingCountry, AVG(Total) > 100) AS Average
->  FROM Invoice
    WHERE BillingCity <> 'Paris' 
    GROUP BY BillingCountry
    HAVING AVG(Total) > 100
    ORDER BY Average DESC
Введение в Oracle SQL

Пример

    SELECT BillingCountry, AVG(Total) > 100) AS Average
    FROM Invoice
->  WHERE BillingCity <> 'Paris' 
    GROUP BY BillingCountry
    HAVING AVG(Total) > 100
    ORDER BY Average DESC
Введение в Oracle SQL

Пример

    SELECT BillingCountry, AVG(Total) > 100) AS Average
    FROM Invoice
    WHERE BillingCity <> 'Paris' 
->  GROUP BY BillingCountry
    HAVING AVG(Total) > 100
    ORDER BY Average DESC
Введение в Oracle SQL

Пример

    SELECT BillingCountry, AVG(Total) > 100) AS Average
    FROM Invoice
    WHERE BillingCity <> 'Paris' 
    GROUP BY BillingCountry
->  HAVING AVG(Total) > 100
    ORDER BY Average DESC
Введение в Oracle SQL

Пример

->  SELECT BillingCountry, AVG(Total) > 100) AS Average
    FROM Invoice
    WHERE BillingCity <> 'Paris' 
    GROUP BY BillingCountry
    HAVING AVG(Total) > 100
    ORDER BY Average DESC
Введение в Oracle SQL

Пример

    SELECT BillingCountry, AVG(Total) > 100) AS Average
    FROM Invoice
    WHERE BillingCity <> 'Paris' 
    GROUP BY BillingCountry
    HAVING AVG(Total) > 100
->  ORDER BY Average DESC
Введение в Oracle SQL

Что может пойти не так?

SELECT BillingCountry, 
       AVG(Total) > 100) AS Average
FROM Invoice
WHERE BillingCity <> 'Paris' 
GROUP BY BillingCountry
HAVING AVG(Total) > 100
ORDER BY Average DESC
  • Псевдонимы нельзя использовать в WHERE, GROUP BY и HAVING
  • Псевдонимы можно использовать в ORDER BY
Введение в Oracle SQL

Что может пойти не так?

SELECT BillingCountry, 
       AVG(Total) > 100) AS Average
FROM Invoice
WHERE BillingCity <> 'Paris' 
GROUP BY BillingCountry
HAVING AVG(Total) > 100
ORDER BY Average DESC
  • Агрегированные значения нельзя фильтровать в WHERE
  • Агрегированные значения можно фильтровать в HAVING
Введение в Oracle SQL

Что может пойти не так?

SELECT BillingCountry, 
       AVG(Total) > 100) AS Average
FROM Invoice
WHERE BillingCity <> 'Paris' 
GROUP BY BillingCountry
HAVING AVG(Total) > 100)
ORDER BY Average DESC
  • Отдельные строки нельзя фильтровать в HAVING
  • Отдельные строки можно фильтровать в WHERE
Введение в Oracle SQL

Порядок выполнения запроса

  1. FROM и JOIN: определяют, какие данные запрашиваются

  2. WHERE: фильтрация отдельных строк

  3. GROUP BY: группировка строк

  4. HAVING: фильтрация групп

  5. SELECT: выбор столбцов и применение функций

  6. DISTINCT: удаление дубликатов

  7. UNION, UNION ALL, INTERSECT, MINUS: операторы множеств

  8. ORDER BY: сортировка строк

Введение в Oracle SQL

Давайте потренируемся!

Введение в Oracle SQL

Preparing Video For Download...