_FIORENTINO MICHELE_ Appunti BD Maratea_organized.pdf

Full Transcript

LEZIONE 26 – SQL: ORDER BY, OP. INSIEMISTICI, QUERY INNESTATE ed ESEMPI ORDER BY è una clausola indipendente che effettua l’ordinamento sugli attributi presenti nella SELECT. SELECT attributi (e lista funzioni) FROM tabelle WHERE condizioni GROU...

LEZIONE 26 – SQL: ORDER BY, OP. INSIEMISTICI, QUERY INNESTATE ed ESEMPI ORDER BY è una clausola indipendente che effettua l’ordinamento sugli attributi presenti nella SELECT. SELECT attributi (e lista funzioni) FROM tabelle WHERE condizioni GROUP BY attributi (di raggruppamento) HAVING attributi (di select o group by) ORDER BY attributi + opzione L’opzione è opzionale (es. DESC per decrescente). Possiamo inserire anche più attributi (es. ORDER BY attr1, attr2) così che a parità di ordinamento, venga utilizzato il secondo attributo. OPERATORI INSIEMISTICI per combinare le query Gli operatori insiemistici possono essere usate per combinare più query fra di loro, dove le query devono essere compatibili fra di loro (devono avere lo stesso schema). In algebra relazionale si utilizza la logica dei SET, e quando utilizziamo gli operatori UNION, INTERSECT e MINUS i duplicati vengono eliminati. SQL utilizza la logica dei BAG, e ci da la possibilità di conservare i duplicati con gli operatori: UNION ALL, INTERSECT ALL e MINUS ALL. Gli operatori che fanno uso della logica dei BAG non sono sempre supportati o sono parzialmente supportati. Nel caso di ORACLE è supportata solo la UNION ALL. QUERY INNESTATE Le query innestate rappresentano un metodo per poter combinare più query fra di loro. Non c’è un limite al numero di innestazioni. Una query si può innestare in più punti di innesto: - FROM - WHERE - HAVING Nella WHERE e nella HAVING inserisco come valore il valore che mi restituisce la query. SELECT e GROUP BY sono liste di proiezione, e quindi non possono essere usati come punti di innesto. Appunti a cura di Fiorentino Michele – Università degli studi di Napoli “Parthenope” | 55 ESEMPI DI QUERY INNESTATE Q1) Trovare voto massimo degli studenti di Informatica all’esame di BD SELECT MAX(v) FROM Studente JOIN E_sup ON mat = cand WHERE CDL =’INF’ AND NE=’BD’ o con query innestate… SELECT MAX(v) FROM ( SELECT * FROM Studente WHRE CDL=’INF’) WHERE NE=’BD’ Le due query sono equivalenti, tuttavia per l’AR la seconda è più efficiente in quando abbiamo ridotto la dimensione del problema intermedio. È anche possibile dare un ALIAS alle tabelle definite da query. Q2) Trovare gli studenti che hanno la stessa DN di Mario Rossi (matr 123) SELECT * FROM Studente WHERE DN = (“DN di Mario Rossi”) → … WHERE DN = (SELECT DN FROM Studente WHERE mat=’123); La DN di Mario Rossi non la conoscevamo a priori, e l’abbiamo individuata con un’altra query. Essendo la query innestata nella WHERE, significa che stiamo usando la query per trovare il valore di riferimento. Q3) Trovare i corsi di Laurea che hanno più iscritti del corso del CDL di Informatica SELECT cod, MAX(NC), MAX(sede) //I MAX servono per fare il “trucchetto” FROM CDL JOIN Studente ON CDL = cod GROUP BY cod HAVING COUNT(*) > ( SELECT COUNT(*) FROM Studente WHERE CDL = ‘INF’ ) Appunti a cura di Fiorentino Michele – Università degli studi di Napoli “Parthenope” | 56 Q4) Trovare gli studenti iscritti allo stesso CDL dello studente più giovane SELECT * FROM Studente WHERE CDL = ( SELECT CDL FROM Studente WHERE mat = ( SELECT mat FROM Studente WHERE DN = ( SELECT MAX(DN) FROM Studente))); Q5) Trovare gli Studenti che hanno preso ad almeno un esame almeno un voto uguale ad un voto di Mario Rossi SELECT mat,n,c FROM Studente JOIN E_sup ON matr=cand WHERE voto IN ( SELECT voto FROM E_Sup WHERE cand=’123’) Da notar bene che usiamo IN e non “=” perché il “voto di Mario Rossi” restituisce un insieme di valori (e un valore singolo). Stiamo verificando che il voto dello studente sia compreso nell’insieme dei voti di Mario Rossi. Q6) Trovare gli Studenti che hanno preso ad almeno un esame almeno un voto MAGGIORE di un voto di Mario Rossi SELECT mat,n,c FROM Studente JOIN E_sup ON matr=cand WHERE voto >ANY ( SELECT voto FROM E_Sup WHERE cand=’123’) OPERATORI ANY e ALL ANY significa “di uno qualsiasi”. Viene preceduto dagli operatori >,ANY o minimoo ALL o massimo o

Use Quizgecko on...
Browser
Browser