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

Вступ до 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...