Il 0% ha trovato utile questo documento (0 voti)
15 visualizzazioni6 pagine

Javaee 25062024

Dettagli su alcuni comandi SQL

Caricato da

Domenico Latanza
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Il 0% ha trovato utile questo documento (0 voti)
15 visualizzazioni6 pagine

Javaee 25062024

Dettagli su alcuni comandi SQL

Caricato da

Domenico Latanza
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Sei sulla pagina 1/ 6

Lezione del 25/06/2024 – Pomeriggio

• Precisazioni su alcuni comandi SQL


• Commento alle soluzioni di alcuni esercizi assegnati

PRECISAZIONI SU ALCUNI COMANDI SQL


a) ORDER BY con doppio (o multiplo) criterio (attributo)
La query ordinerà i risultati secondo il primo attributo. A parità di
valore su quell’attributo ordinerà i risultati rispetto al secondo.
ESEMPIO: ordina le persone della lista rispetto al cognome e,
a parità di cognome, per nome
SELECT nome, cognome
FROM persone
ORDER BY cognome, nome

b) GROUP BY con doppio criterio (attributo)


Il conteggio (o la somma, media o qualunque calcolo di operatore
aggregato) sarà eseguito rispetto al secondo attributo, che è una
“specificazione del primo”. Osserva l’esempio che segue:
FriendName City State Country
María Acapulco Guerrero México
Fernando Caracas Distrito Capital Venezuela
Gerson Medellín Antioquía Colombia
Mónica Bogotá Cundinamarca Colombia
Paul Bogotá Cundinamarca Colombia
Kevin Lexington Kentucky USA
Cecilia Godoy Cruz Mendoza Argentina
Pablo Atlántida Canelones Uruguay
Andrea Cdad. Mendoza Mendoza Argentina
Marlon Sao Paulo Sao Paulo Brasil
Joao Rio de Janeiro Rio de Janeiro Brasil
Andrés Bariloche Río Negro Argentina
Mariano Miami Florida USA

Con questa query:


SELECT Country, COUNT(*) AS HowMany
FROM WorldWideFriends
GROUP BY Country;
Otteniamo:

Country HowMany
Argentina 3
Venezuela 1
Colombia 3
Brasil 2
USA 2
México 1
Uruguay 1

Ma con la seguente:
SELECT Country, State, COUNT(*) AS HowMany
FROM WorldWideFriends
GROUP BY Country, State;

Otteniamo:
Country State HowMany
Argentina Mendoza 2
Argentina Río Negro 1
Venezuela Distrito Capital 1
Colombia Antioquía 1
Colombia Cundinamarca 2
Brasil Rio de Janeiro 1
Brasil Sao Paulo 1
USA Kentucky 1
USA Florida 1
México Guerrero 1
Uruguay Canelones 1

c) Differenza tra WHERE e HAVING e valutazione su cosa


utilizzare
Utilizzeremo la WHERE per impostare delle condizioni su dati
presenti già sulle tabelle iniziali; HAVING per impostare condizioni
su dati ricavati con un raggruppamento.
d) ORDINE DI ESECUZIONE COMANDI QUERY SQL

N.B. Un alias creato nella select si può usare nella HAVING anche se
indicato come STEP precedente!
ESERCIZI RISOLTI
1) Tipo di aereo e id_volo dell’aereo con più passeggeri
SELECT volo.idVolo, aereo.tipoAereo
FROM volo, aereo
WHERE volo.tipoAereo=aereo.tipoAereo
ORDER BY aereo.numPasseggeri DESC
LIMIT 0,1

N.B. nell’esempio troverà effettivamente l’aereo con max numero


passeggeri poiché l’unico aereo di tipo bus (250 passeggeri) sarà
l’unico massimo.
SELECT volo.idVolo, aereo.tipoAereo
FROM volo, aereo
WHERE volo.tipoAereo=aereo.tipoAereo
AND aereo.numPasseggeri=(
SELECT MAX(aereo.numPasseggeri)
FROM volo, aereo
WHERE volo.tipoAereo=aereo.tipoAereo
) AS massimoNumPasseggeri

2) Numero degli aeroporti che ha l’italia


SELECT COUNT(*)
FROM aeroporto
WHERE nazione=”Italia”

3) Aeroporti da cui non partono aerei


SELECT aeroporto.nome
FROM aeroporto LEFT JOIN volo ON aeroporto.citta=volo.cittaPart
WHERE volo.idVolo IS NULL

MODO ALTERNATIVO usando IN oppure NOT IN


SELECT aeroporto.nome
FROM aeroporto
WHERE aeroporto.citta NOT IN (SELECT volo.cittaPart FROM volo)

N.B. Nella condizione where assicurarsi che si sta confrontando un


attributo con il suo equivalente logico nell’altra tabella
4) Passeggeri (nome,cognome) che non partono di domenica.
Tradotto: voglio visualizzare l’elenco delle persone che partono in
giorni diversi dalla domenica.
SELECT passeggero.nome, passeggero.cognome
FROM passeggero, biglietto, volo
WHERE passeggero.id=biglietto.id_passeggero AND
biglietto.id_volo=volo.idVolo AND
volo.giornoSett!=”domenica”
QUESTA SOLUZIONE NON VA BENE perché restituisce i passeggeri che
hanno viaggiato anche in altri giorni, avendo escluso solo i
BIGLIETTI con giorno domenica!!!!!!!!!!!!!

N.B. Conviene realizzare una tabella dove estraggo tutti i passeggeri


che viaggiano la domenica (attenzione, non significa che viaggiano
solo la domenica). Successivamente visualizzo la lista dei
passeggeri che non sono compresi nella lista dei passeggeri
domenicali.
SELECT passeggero.nome, passeggero.cognome
FROM passeggero
WHERE passeggero.id NOT IN (
SELECT DISTINCT(passeggero.id)
FROM passeggero, biglietto, volo
WHERE passeggero.id=biglietto.id_passeggero AND
biglietto.id_volo=volo.idVolo AND
volo.giornoSett=”domenica”
)

5) Passeggeri (nome,cognome) che partono da Bruxelles


SELECT passeggero.nome, passeggero.cognome
FROM passeggero, biglietto, volo
WHERE passeggero.id=biglietto.id_passeggero AND
biglietto.id_volo=volo.idVolo AND
volo.cittaPart=”Bruxelles”

5bis) Passeggeri (nome,cognome) che partono SOLO da Bruxelles


SELECT passeggero.nome, passeggero.cognome
FROM passeggero
WHERE passeggero.id NOT IN (
SELECT DISTINCT(passeggero.id)
FROM passeggero, biglietto, volo
WHERE passeggero.id = biglietto.id_passeggero AND
biglietto.id_volo = volo.idvolo
AND volo.cittàpart != "Bruxelles");

N.B. con l’utilizzo di EXCEPT (a partire da mysql 8). Le 2 query


che usano EXCEPT devono avere stesse colonne!!!!
SELECT passeggero.id, passeggero.nome, passeggero.cognome
FROM passeggero
EXCEPT
SELECT DISTINCT(passeggero.id), passeggero.nome,
passeggero.cognome
FROM passeggero, biglietto, volo
WHERE passeggero.id = biglietto.id_passeggero AND
biglietto.id_volo = volo.idvolo
AND volo.cittàpart != "Bruxelles";

Spiegazione “insiemistica” della query 4)

PASSEGGERI

PASSEGGERI che
viaggiano la DOMENICA

Potrebbero piacerti anche