Torna all'elenco degli articoli Articoli
Tempo di lettura: 6 minuti

Cos'è una query in linea SQL?

Avete mai sentito il termine "query in linea"? In che cosa si differenziano dalle subquery e dalle tabelle derivate? Avete cercato in molti posti e non avete ancora trovato la risposta? Intraprendiamo un viaggio e scopriamolo insieme!

La prima volta che ho sentito il termine "query in linea" sono rimasto un po' sorpreso. Non sembra una delle sfumature di SQL e pensavo di conoscere tutti i concetti di base. Sfortunatamente, cercare su Google il termine non è stato di grande aiuto: c'erano solo pochi risultati e tutte le risposte erano vaghe. Mi ci è voluto un po' di tempo per fare una ricerca adeguata e imparare a conoscere le query in linea in SQL. Ecco perché ho deciso di scrivere questo articolo e di raccogliere tutto ciò che ho imparato in un unico posto.

Subquery e viste in linea

Avete mai sentito parlare di una subquery? Si tratta di una query all'interno di una query, almeno secondo la terminologia che mi è stata insegnata. Poi c'è l'espressione " vista in linea". Una vista in linea è una query contenuta nella clausola FROM di un'altra query. Per come l'ho imparata io, questo la rende uguale a una sottoquery. In Oracle, tuttavia, le viste inline sono inserite solo nella clausola FROM, mentre le subquery sono nelle clausole SELECT o WHERE. (Vedere subquery nelle FAQ di Oracle e vista in linea nelle FAQ di Oracle). In altre parole, Oracle li tratta come due concetti distinti.

Pertanto, se avete imparato a conoscere le subquery al di fuori di Oracle, sarete in grado di comprendere le viste in linea. Tuttavia, è bene ricordare che gli utenti Oracle potrebbero fraintendere se si utilizzano i termini subquery e viste in linea in modo intercambiabile.

Non ci soffermeremo più di tanto sulle subquery. Se non si ha familiarità con esse, si consiglia di leggere l'articolo Subquery SQL sul blog LearnSQL.it per una panoramica di base sull'argomento.

Cos'è una query in linea?

Una query in linea è una query nella clausola FROM. Si selezionano i dati da essa come si farebbe con una tabella.

Vediamo un esempio di query in linea. Lavoreremo con alcuni dati relativi a film provenienti da un sito in cui le persone valutano i film che hanno visto:

movie - Contiene informazioni sui film:

  • id - Un ID univoco per ogni film.
  • title - Il titolo del film.
  • year - La data di uscita del film.
  • director_id - L'ID del regista del film.

rating - Memorizza le valutazioni degli utenti sui film:

  • id - Un ID univoco per ogni valutazione.
  • rating - Un numero da 1 (che significa "è così brutto che la proiezione di questo film dovrebbe essere illegale") a 10 (che significa "potrei guardare questo film per il resto della mia vita, 24 ore su 24, 7 giorni su 7").
  • movie_id - l'ID del film valutato.
  • user_id - l'ID dell'utente che ha valutato il film.

movie

idtitleyeardirector_id
1The Lord of the Rings: The Return of the King200314
2Mad Max: Fury Road201569
3Avengers: Endgame201971

rating

idratingmovie_iduser_id
171332
261469
3101767
4101111
58184
622417
772441
8102118
95274
1022630
1110399
1243189
1373887
1483521
1543144

La query mostrerà la valutazione media più alta del film. Date un'occhiata:

SELECT
  MAX(avg_rating) AS max_avg_rating
FROM (
  SELECT
    AVG(rating) AS avg_rating
  FROM rating
  GROUP BY movie_id
) AS avg_movie_ratings;
max_avg_rating
8.2

Nella clausola FROM, abbiamo usato la vista inline (chiamata avg_movie_ratings e mostrata in grassetto) per calcolare la valutazione media di ogni film. Poi, dalle medie, abbiamo selezionato il valore più alto. La vista in linea utilizzata funziona come una tabella temporanea.

Viste in linea al di fuori di Oracle

Come ho già detto, la vista in linea è un termine di Oracle. Mi sono imbattuto in questo termine anche leggendo di MySQL; tuttavia, alcuni si riferiscono ad esso come a una vista in linea e altri come a una subquery. In altri motori di database, le viste in linea hanno nomi diversi. Ad esempio, in MS SQL Server, una sottoquery in una clausola FROM è chiamata tabella derivata.

Probabilmente avrete notato che qui si usa il termine subquery. Questo perché subquery (o talvolta subselect) è il nome usato in PostgreSQL, il motore di database che uso di più. Questo nome è usato anche dalla maggior parte degli utenti di MySQL.

Qualunque sia il nome delle viste in linea, ricordate che è solo il nome di un concetto. Non ha molta importanza il nome che gli date. L'importante è sapere come utilizzare correttamente il concetto nelle query.

Viste in linea e subquery

Torniamo per un attimo alla terminologia di Oracle. Qual è la differenza tra le viste in linea e le sotto-selezioni (vedi subquery nelle FAQ di Oracle) se in alcuni motori hanno lo stesso nome?

Anche se sembrano simili, funzionano in modo diverso. Ci concentreremo sulle due differenze principali.

La prima differenza è che le viste inline possono contenere più colonne, mentre le subquery (nell'accezione Oracle) devono restituirne solo una. Il motivo è semplice: una vista in linea funziona come una tabella e le tabelle possono contenere più di una colonna. Le subquery, invece, funzionano generalmente come un singolo valore.

Il secondo è la correlazione. Nelle viste non in linea, è possibile utilizzare un valore per la query esterna (principale). In questo modo, la subquery può restituire un valore diverso per righe diverse. Questo concetto è molto potente e può far risparmiare tempo quando si scrivono query complicate. Per saperne di più, leggete Correlated Subquery in SQL: A Beginner's Guide sul blog LearnSQL.it .

Se ritenete di aver bisogno di maggiori informazioni sull'argomento e sui diversi tipi di sotto-selezioni (comprese le visualizzazioni in linea), consultate l'articolo Quali sono i diversi tipi di subquery SQL?.

Quanto contano i nomi? Non molto!

Come ho già detto, non importa che il concetto sia chiamato vista in linea, tabella derivata, subquery o subselect. Tutto dipende dalla conoscenza e dall'utilizzo di questa potente tecnica SQL. Naturalmente, quando si comunica con gli altri, bisogna fare del proprio meglio per evitare errori di comunicazione. Ecco perché vale la pena di conoscere tutti i diversi nomi che questo concetto assume. Tuttavia, se il vostro team è d'accordo, la vista in linea potrebbe essere chiamata from-part thingamajig, purché tutti sappiano di cosa si sta parlando!

Se non si è mai sentito parlare di questo concetto, si consiglia di consultare il corso SQL Basics al seguente indirizzo LearnSQL.it. Se avete già imparato a conoscerlo, ma non vi sentite molto sicuri delle vostre capacità, potreste risolvere alcuni esercizi del corso . SQL Practice Set. Speriamo solo che non vi dispiaccia se chiamiamo il concetto subquery.