Ordine di elaborazione delle query

Introduzione a Oracle SQL

Hadrien Lacroix

Content Developer

Perché conta l'ordine di elaborazione?

  • Ottimizza le tue query
    • Niente risultati indesiderati
    • Esecuzione più rapida
Introduzione a Oracle SQL

Esempio

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

Esempio

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

Esempio

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

Esempio

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

Esempio

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

Esempio

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

Esempio

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

Cosa può andare storto?

SELECT BillingCountry, 
       AVG(Total) > 100) AS Average
FROM Invoice
WHERE BillingCity <> 'Paris' 
GROUP BY BillingCountry
HAVING AVG(Total) > 100
ORDER BY Average DESC
  • Gli alias non si possono usare in WHERE, GROUP BY e HAVING
  • Gli alias si possono usare in ORDER BY
Introduzione a Oracle SQL

Cosa può andare storto?

SELECT BillingCountry, 
       AVG(Total) > 100) AS Average
FROM Invoice
WHERE BillingCity <> 'Paris' 
GROUP BY BillingCountry
HAVING AVG(Total) > 100
ORDER BY Average DESC
  • I valori aggregati non si possono filtrare nella clausola WHERE
  • I valori aggregati si possono filtrare nella clausola HAVING
Introduzione a Oracle SQL

Cosa può andare storto?

SELECT BillingCountry, 
       AVG(Total) > 100) AS Average
FROM Invoice
WHERE BillingCity <> 'Paris' 
GROUP BY BillingCountry
HAVING AVG(Total) > 100)
ORDER BY Average DESC
  • Le singole righe non si possono filtrare nella clausola HAVING
  • Le singole righe si possono filtrare nella clausola WHERE
Introduzione a Oracle SQL

Ordine di esecuzione della query

  1. FROM e JOIN: determinano quali dati interrogare

  2. WHERE: filtra le singole righe

  3. GROUP BY: raggruppa le righe

  4. HAVING: filtra i gruppi

  5. SELECT: seleziona colonne e applica funzioni sulle colonne

  6. DISTINCT: rimuove i duplicati

  7. UNION, UNION ALL, INTERSECT, MINUS: applica operatori insiemistici

  8. ORDER BY: ordina le righe

Introduzione a Oracle SQL

Esercitiamoci!

Introduzione a Oracle SQL

Preparing Video For Download...