francesco.chianese
pubblicato più di 2 anni fa

Query annidate in MySQL

Un introduzione a come scrivere query annidate in SQL in un ambiente MySQL

Le query annidate, come suggerisce la parola stessa, sono delle query che vengono eseguite all’interno di altre query. Sono molto utili quando il reperimento di un dato non risulta possibile con l’esecuzione di una singola query, ma sono necessarie più query.

Ad esempio supponiamo di avere la tabella esami così valorizzata

Matricola Nome Anno Crediti Voto
1 Calcolatori Elettronici 2 10 30
1 Informatica 2 10 30
1 Matematica 1 10 23
2 Informatica 2 10 30
2 Ingegneria del Software 3 10 30

e di voler rintracciare il nome dell’esame che ha il voto più basso. Nel nostro caso sono necessarie due query, una per calcolare il voto più basso ed un’altra per calcolare il nome dell’esame con tale voto. Le query sono le seguenti

1Select MIN(Voto)
2From esami;

La query restituirà il seguente risultato

MIN (Voto) = 23

A questo punto si ricorre alla seconda query

1Select Nome
2From esami
3Where Voto = 23;

E’ possible annidare le due query precedenti utilizzandone solo una nella seguente maniera

1Select Nome
2From esami
3Where Voto < (SELECT AVG(voto)
4              FROM esami);

Il risultato sarà ovviamente Matematica.

E’ importante sottolineare che in questo caso è stato possibile ricorrere alla clausola where, in quanto la subquery restituiva un solo risultato, altrimenti si doveva ricorrere alla clausola IN, ovvero

1Select nome, voto
2From esami
3Where nome IN (SELECT nome FROM esami
4               WHERE voto < 5);

MySQL consente di utilizzare anche le tabelle derivate, che sono una sorta di viste senza nome:

 1SELECT nome_cliente
 2    FROM (
 3            SELECT c.nome_cliente AS nome_cliente, o.quantita AS quantita
 4                FROM cliente c INNER JOIN ordine o
 5                ON c.id = o.cliente
 6        )
 7    WHERE quantita > 100
 8    ORDER BY quantita DESC
 9    LIMIT 20

Condividi su:

Esprimi un voto:

  • Current rating: 0.0/5
  • 1
  • 2
  • 3
  • 4
  • 5

Argomenti chiave:

Ultimi commenti Ultimi commenti

Esegui il Login oppure registrati per scrivere un commento.
Cerca nel sito...
Ultime recipes

Un utilissimo tool di shell che effettua un dettagliato e comodo report su MySQL MySQL Report un tool di shell per tenere tutto sotto controllo

Un utilissimo tool di shell che effettua un dettagliato e comodo report su MySQL


Vai alla recipe

Un utilissimo tool per sniffare il traffico Client/Server TCP/IP di MySQL MySQLSniffer sniffare il traffico TCP di MySQL

Un utilissimo tool per sniffare il traffico Client/Server TCP/IP di MySQL


Vai alla recipe

Verificare l'integrità, riparare gestire chiavi e memoria di tabelle MyISAM attraverso myisamchk riparare file MyISAM

Verificare l'integrità, riparare gestire chiavi e memoria di tabelle MyISAM attraverso il file myisamchk


Vai alla recipe

Un tool per comprimere le tabelle MyISAM fino a oltre il 50% myisampack comprimere file MyISAM

Un tool per comprimere le tabelle MyISAM fino a oltre il 50%


Vai alla recipe

mysqlshow le info di base sui database, tabelle e colonne senza utilizzare alcun mysqlshow visualizzare le informazioni sul database MySQL

mysqlshow le info di base sui database, tabelle e colonne senza utilizzare alcun client


Vai alla recipe

Utilizzando UNION / UNION ALL su campi int unsigned zerofill,
ho notato che MysqlUNION / UNION ALL su campi int unsigned zerofill. di DebUsr
Vai al tip

Utilizzo di funzioni come alias di campo tramite l'impiego di prepared statementReport con alias di campo dinamici di john_revelator
Vai al tip

Può capitare che sia necessario eseguire un dump di database in formato Comma SeparatedEsecuzione dump in formato CSV (tabelle in engine MyIsam esportate in formato CSV) di ghigomatto
Vai al tip

E' possibile eseguire le query SQL contenute in un file di testo. Questo è utileEseguire le query da un file di testo di Sante Caserio
Vai al tip

Se vogliamo fare il backup di tutti i database con mysqldump, e ne abbiamo parecchiFare il backup di tutti i database di Sante Caserio
Vai al tip

Salve,vorrei chiedervi un aiutino per una query che mi infastidisce un pò.
Ho 4 aiuto per una query! di fighterdorico Vai al topic

Salve,vorrei chiedervi un aiutino per una query che mi infastidisce un pò.
Ho 4 aiuto per una query! di fighterdorico Vai al topic

Salve,vorrei chiedervi un aiutino per una query che mi infastidisce un pò.
Ho 4 aiuto per una query! di fighterdorico Vai al topic

Salve a tutti.

Ho una tabella con lettere accentate.
Le lettere vengono visualizzate ordinamento tabelle di ditch Vai al topic

Salve a tutti.

Ho una tabella con lettere accentate.
Le lettere vengono visualizzate ordinamento tabelle di ditch Vai al topic