Kolejność przetwarzania zapytań

Wprowadzenie do Oracle SQL

Hadrien Lacroix

Content Developer

Dlaczego kolejność przetwarzania ma znaczenie?

  • Optymalizacja zapytań
    • Brak niepożądanych wyników
    • Szybsze wykonanie
Wprowadzenie do Oracle SQL

Przykład

    SELECT BillingCountry, AVG(Total) > 100) AS Average
    FROM Invoice
    WHERE BillingCity <> 'Paris' 
    GROUP BY BillingCountry
    HAVING AVG(Total) > 100
    ORDER BY Average DESC
Wprowadzenie do Oracle SQL

Przykład

    SELECT BillingCountry, AVG(Total) > 100) AS Average
->  FROM Invoice
    WHERE BillingCity <> 'Paris' 
    GROUP BY BillingCountry
    HAVING AVG(Total) > 100
    ORDER BY Average DESC
Wprowadzenie do Oracle SQL

Przykład

    SELECT BillingCountry, AVG(Total) > 100) AS Average
    FROM Invoice
->  WHERE BillingCity <> 'Paris' 
    GROUP BY BillingCountry
    HAVING AVG(Total) > 100
    ORDER BY Average DESC
Wprowadzenie do Oracle SQL

Przykład

    SELECT BillingCountry, AVG(Total) > 100) AS Average
    FROM Invoice
    WHERE BillingCity <> 'Paris' 
->  GROUP BY BillingCountry
    HAVING AVG(Total) > 100
    ORDER BY Average DESC
Wprowadzenie do Oracle SQL

Przykład

    SELECT BillingCountry, AVG(Total) > 100) AS Average
    FROM Invoice
    WHERE BillingCity <> 'Paris' 
    GROUP BY BillingCountry
->  HAVING AVG(Total) > 100
    ORDER BY Average DESC
Wprowadzenie do Oracle SQL

Przykład

->  SELECT BillingCountry, AVG(Total) > 100) AS Average
    FROM Invoice
    WHERE BillingCity <> 'Paris' 
    GROUP BY BillingCountry
    HAVING AVG(Total) > 100
    ORDER BY Average DESC
Wprowadzenie do Oracle SQL

Przykład

    SELECT BillingCountry, AVG(Total) > 100) AS Average
    FROM Invoice
    WHERE BillingCity <> 'Paris' 
    GROUP BY BillingCountry
    HAVING AVG(Total) > 100
->  ORDER BY Average DESC
Wprowadzenie do Oracle SQL

Co może pójść nie tak?

SELECT BillingCountry, 
       AVG(Total) > 100) AS Average
FROM Invoice
WHERE BillingCity <> 'Paris' 
GROUP BY BillingCountry
HAVING AVG(Total) > 100
ORDER BY Average DESC
  • Aliasów nie można używać w WHERE, GROUP BY ani HAVING
  • Aliasy można używać w ORDER BY
Wprowadzenie do Oracle SQL

Co może pójść nie tak?

SELECT BillingCountry, 
       AVG(Total) > 100) AS Average
FROM Invoice
WHERE BillingCity <> 'Paris' 
GROUP BY BillingCountry
HAVING AVG(Total) > 100
ORDER BY Average DESC
  • Wartości zagregowanych nie można filtrować w klauzuli WHERE
  • Wartości zagregowane można filtrować w klauzuli HAVING
Wprowadzenie do Oracle SQL

Co może pójść nie tak?

SELECT BillingCountry, 
       AVG(Total) > 100) AS Average
FROM Invoice
WHERE BillingCity <> 'Paris' 
GROUP BY BillingCountry
HAVING AVG(Total) > 100)
ORDER BY Average DESC
  • Pojedynczych wierszy nie można filtrować w klauzuli HAVING
  • Pojedyncze wiersze można filtrować w klauzuli WHERE
Wprowadzenie do Oracle SQL

Kolejność wykonywania zapytania

  1. FROM i JOIN: określają, jakie dane są pobierane

  2. WHERE: filtruje pojedyncze wiersze

  3. GROUP BY: grupuje wiersze

  4. HAVING: filtruje grupy

  5. SELECT: wybiera kolumny i stosuje funkcje

  6. DISTINCT: usuwa duplikaty

  7. UNION, UNION ALL, INTERSECT, MINUS: stosuje operatory zbiorów

  8. ORDER BY: porządkuje wiersze

Wprowadzenie do Oracle SQL

Czas na ćwiczenia!

Wprowadzenie do Oracle SQL

Preparing Video For Download...