SQL Vista In Linea (Inline View)





SQL > SQL Avanzato > Vista In Linea

Una vista in linea (inline view) è un'istruzione SELECT nella clausola FROM. Una vista è una tabella virtuale che ha le caratteristiche di una tabella ma non contiene dati effettivi. In una costruzione di vista in linea, invece di specificare il nome o i nomi delle tabelle dopo la parola chiave FROM, la fonte dei dati proviene effettivamente dalla vista in linea.

Una vista in linea è talvolta chiamata tabella derivata. Questi due termini sono usati in modo interscambiabile.

Sintassi

La sintassi per una vista in linea è la seguente:

SELECT "Nome_di_Colonna" FROM (Vista_in_Linea);

Esempio

Supponiamo di avere due tabelle: la prima tabella è User_Address, che associa ogni utente a un codice ZIP; la seconda tabella è User_Score, che registra tutti i punteggi di ciascun utente. La domanda è: come scrivere una query SQL per trovare il numero di utenti che hanno ottenuto un punteggio superiore a 200 per ogni codice ZIP?

Senza utilizzare una vista in linea, possiamo farlo in due passaggi:

Query 1

CREATE TABLE User_Higher_Than_200
SELECT User_ID, SUM(Score) FROM User_Score
GROUP BY User_ID
HAVING SUM(Score) > 200;

Query 2

SELECT a2.ZIP_CODE, COUNT(a1.User_ID)
FROM User_Higher_Than_200 a1, User_Address a2
WHERE a1.User_ID = a2.User_ID
GROUP BY a2.ZIP_CODE;

Nel codice sopra, abbiamo introdotto una tabella temporanea, User_Higher_Than_200, per memorizzare l'elenco degli utenti che hanno ottenuto un punteggio superiore a 200. User_Higher_Than_200 viene quindi utilizzata per unirsi alla tabella User_Address e ottenere il risultato finale.

Possiamo semplificare il precedente SQL utilizzando la costruzione di vista in linea nel seguente modo:

Query 3

SELECT a2.ZIP_CODE, COUNT(a1.User_ID)
FROM
(SELECT User_ID, SUM(Score) FROM User_Score GROUP BY User_ID HAVING SUM(Score) > 200) a1,
User_Address a2
WHERE a1.User_ID = a2.User_ID
GROUP BY a2.ZIP_CODE;

Il codice in rosso rappresenta una vista in linea. Ci sono due vantaggi nell'utilizzare una vista in linea qui:

1. Non è necessario creare la tabella temporanea. Ciò impedisce al database di avere troppi oggetti, il che è positivo poiché ogni oggetto aggiuntivo nel database comporta costi di gestione delle risorse.

2. Possiamo utilizzare una singola query SQL per ottenere ciò che vogliamo.

Nota che trattiamo la vista in linea esattamente come trattiamo una tabella. Confrontando la Query 2 e la Query 3, vediamo che l'unica differenza è che sostituiamo il nome della tabella temporanea nella Query 2 con l'istruzione della vista in linea nella Query 3. Tutto il resto rimane uguale.

SQL INTERSECT >>

Questa pagina è stata aggiornata l'ultima volta il 27/12/2023



Copyright © 2024   1keydata.com   Tutti i diritti riservati