Cosa sono le sottoquery?
Una sottoquery è una query di selezione contenuta in un'altra query. La query di selezione interna viene solitamente utilizzata per determinare i risultati della query di selezione esterna.
Diamo un'occhiata alla sintassi della sottoquery:
Un reclamo comune dei clienti presso la libreria video MyFlix è il basso numero di titoli di film. La direzione vuole acquistare film per una categoria che ha il minor numero di titoli.
Puoi usare una query come
SELECT category_name FROM categories WHERE category_id =( SELECT MIN(category_id) from movies);
Dà un risultato
Vediamo come funziona questa query
Quanto sopra è una forma di sottoquery di riga . In tali sottoquery, la query interna può dare solo UN risultato. Gli operatori consentiti quando si lavora con le sottoquery di riga sono [=,>, =, <=,,! =,]
Diamo un'occhiata a un altro esempio,
Supponi di volere nomi e numeri di telefono di membri di persone che hanno noleggiato un film e devono ancora restituirli. Una volta ottenuti i nomi e il numero di telefono, li chiami per dare un promemoria. Puoi usare una query come
SELECT full_names,contact_number FROM members WHERE membership_number IN (SELECT membership_number FROM movierentals WHERE return_date IS NULL );
Vediamo come funziona questa query
In questo caso, la query interna restituisce più di un risultato. Quanto sopra è un tipo di sottoquery in grado .
Finora abbiamo visto due query, vediamo ora un esempio di tripla query !!!
Supponiamo che la direzione voglia premiare il membro che paga di più.
Possiamo eseguire una query come
Select full_names From members WHERE membership_number = (SELECT membership_number FROM payments WHERE amount_paid = (SELECT MAX(amount_paid) FROM payments));
La query precedente fornisce il seguente risultato:
Sottoquery vs join!
Se confrontate con Joins, le sottoquery sono semplici da usare e di facile lettura. Non sono complicati come Joins
Quindi ci sono spesso usati dai principianti SQL.
Ma le sottoquery presentano problemi di prestazioni. L'utilizzo di un join invece di una sottoquery può a volte darti un aumento delle prestazioni fino a 500 volte.
Data una scelta, si consiglia di utilizzare un JOIN su una sottoquery.
Le sottoquery devono essere utilizzate solo come soluzione di fallback quando non è possibile utilizzare un'operazione JOIN per ottenere quanto sopra
Sommario
- Le sottoquery sono query incorporate all'interno di un'altra query. La query incorporata è nota come query interna e la query contenitore è nota come query esterna.
- Le sottoquery sono facili da usare, offrono una grande flessibilità e possono essere facilmente suddivise in singoli componenti logici che compongono la query, il che è molto utile durante il test e il debug delle query.
- MySQL supporta tre tipi di sottoquery, scalari, di riga e di tabella.
- Le query secondarie scalari restituiscono solo una singola riga e una singola colonna.
- Le query secondarie di riga restituiscono solo una singola riga ma possono avere più di una colonna.
- Le sottoquery di tabella possono restituire più righe e colonne.
- Le sottoquery possono essere utilizzate anche nelle query INSERT, UPDATE e DELETE.
- Per problemi di prestazioni, quando si tratta di ottenere dati da più tabelle, si consiglia vivamente di utilizzare JOIN invece di sottoquery. Le query secondarie devono essere utilizzate solo con una buona ragione.