Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
vuoi
o PayPal
tutte le volte che vuoi
SQL: Interrogazioni
La clausola SELECT specifica quali attributi faranno parte della tabella risultato.
SELECT DISTINCT Impiegato
FROM Impiegati, Reparti
WHERE Impiegato = 'Neri'
Il risultato di un'interrogazione SQL è un multi-insieme. Se si desidera che la tabella calcolata non contenga duplicati, si deve includere la parola chiave DISTINCT.
Impiegato Codice
Rossi A
Bruni B
Neri B
Bianchi B
Confronto con Algebra
Relazionale: Proiezione e Select Il risultato di un'interrogazione in Algebra Relazionale è una relazione, quindi i duplicati saranno automaticamente scartati nel risultato. Viceversa, il risultato di un'interrogazione SQL è un multi-insieme. Affinché la tabella calcolata non contenga duplicati, si deve includere la parola chiave DISTINCT. Estrarre cognome e dipartimento di tutti gli impiegati. Scrivere l'interrogazione sia in Algebra Relazione che in SQL. Algebra Relazione: π Cognome, Dipart (Impiegato) SQL: SELECT Cognome, Dipart FROM Impiegati Risultato: Cognome | Dipart ------------------ Rossi | Amministrazione Bianchi | Produzione Rossi | Amministrazione Neri | DistribuzioneDistribuzione Neri Distribuzione10 4 - SQL : Interrogazioni*)Select con asterisco (ImpiegatoNome Cognome Dipart StipAnnMario Rossi Amministrazione 45 Come argomento della clausolaCarlo Bianchi Produzione 36 SELECT può anche comparire ilcarattere speciale * (asterisco),Giuseppe Verdi Amministrazione 40 che rappresenta la selezione diFranco Neri Distribuzione 45 tutti gli attributi delle tabelleelencate nella clausola FROM.Carlo Rossi Direzione 80Lorenzo Gialli Direzione 73Paola Rosati Amministrazione 40Marco Franco Produzione 46Estrarre tutte le informazioni degli impiegati di cognome “Rossi”ESERCIZIO : Nome Cognome Dipart StipAnnSELECT * Mario Rossi Amministrazione 45FROM Impiegato Carlo Rossi Direzione 80Cognome=‘Rossi’WHERE11 4 - SQL : InterrogazioniOgni attributo del risultato puòRidenominazione essere rinominato con un Alias.Impiegato DipartimentoNome Cognome Dipart StipAnn Nome CittàMario Rossi Amministrazione 45 AmministrazioneMilanoCarlo Bianchi Produzione 36 Produzione TorinoGiuseppe Verdi Amministrazione 40 Distribuzione RomaFranco Neri Distribuzione 45 Direzione MilanoCarlo Rossi Direzione 80 Ricerca MilanoLorenzo Gialli Direzione 73Paola Rosati Amministrazione 40Marco Franco Produzione 46 come “Salario”) degli impiegati diEstrarre lo Stipendio (e ri-nominarloESERCIZIO :cognome “Rossi” NOTA BENE: Se non viSalario fossero impiegati di cognomeSELECT StipAnn AS Salario “Rossi”, l’interrogazione45FROM Impiegato restituirebbe un insieme vuoto.80Cognome=‘Rossi’WHERE AS : operatore di ridenominazione. Consente di12 4 - SQL : Interrogazionirinominare gli attributi del risultato.RidenominazioneImpiegato DipartimentoNome Cognome Dipart StipAnn Nome CittàMario Rossi Amministrazione 45 Amministrazione MilanoCarlo Bianchi Produzione 36 Produzione TorinoGiuseppe Verdi Amministrazione 40 Distribuzione RomaFranco Neri Distribuzione 45 Direzione MilanoCarlo
Rossi Direzione 80 Ricerca Milano
Lorenzo Gialli Direzione 73 Nella clausola SELECT possono
Paola Rosati Amministrazione 40 comparire generiche espressioni
Marco Franco Produzione 46 sul valore degli attributi di
ciascuna riga selezionata.
Estrarre lo stipendio mensile dell'impiegato di cognome "Bianchi"
ESERCIZIO :
SELECT StipAnn/12 AS StipendioMensile StipendioMensile
FROM Impiegato 3
Cognome='Bianchi'
WHERE 13 4 - SQL : Interrogazioni
Convenzioni sui nomi
Per evitare ambiguità, ogni nome di attributo è composto da
NomeTabella.NomeAttributo
Quando l'ambiguità non sussiste, si può omettere la parte
NomeTabella
SELECT persone.nome, persone.reddito
FROM persone
WHERE persone.età<30
si può scrivere come:
SELECT nome, reddito
FROM persone
WHERE età<30
14 4 - SQL : Interrogazioni
Per evitare ambiguità tra attributi aventi
lo stesso nome in tabelle diverse, si
Variabili di range possono definire variabili di
Dipartimento as D WHERE I.Dipart = D.Nome;Dipartimento as D FROM Impiegato I, Dipartimento D WHERE Dipart=D.Nome WHERE Dipart=D.Nome equivale a possono essere anche utilizzate per disporre di un "duplicato" Le variabili di range di una tabella, utile ai fini di un'interrogazione. Estrarre il cognome degli Impiegati con lo stesso Nome che lavorano in ESERCIZIO: reparti differenti. I1 Nome Cognome Reparto Mario Rossi A Mario Bianchi B Cognome SELECT I1.Cognome, Gianni Verdi A FROM Impiegato I1, Impiegato I2 Rossi WHERE I1.Nome=I2.Nome AND Bianchi Nome Cognome Reparto I1.Reparto <> I2.Reparto Mario Rossi A Mario Bianchi B Gianni Verdi A 16 4 - SQL: Interrogazioni I2 La clausola WHERE consente di costruire un'espressione booleana combinando predicati semplici con gli NOT, AND, OR operatori AND, OR e NOT. Impiegato Dipartimento Nome Cognome Dipart StipAnn Nome Città Mario Rossi Amministrazione 45 Amministrazione Milano Carlo Bianchi Produzione 36 Produzione Torino Giuseppe Verdi Amministrazione 40 DistribuzioneRomaFranco Neri Distribuzione 45 Direzione MilanoCarlo Rossi Direzione 80 Ricerca MilanoLorenzo Gialli Direzione 73Paola Rosati Amministrazione 40Marco Franco Produzione 46Estrarre il nome ed il cognome degli Impiegati che lavorano nelESERCIZIO :dipartimento Amministrazione ed hanno stipendio maggiore di 70SELECT Nome,Cognome Nome CognomeFROM Impiegato 'Amministrazione'WHERE Dipart =AND StipAnn > 7017 4 - SQL : Interrogazioniin SQL l'AND l'ORATTENZIONE : ehanno la stessa priorità (mentre il NOTNOT, AND, OR ha priorità maggiore). Convieneesplicitare l'ordine di valutazione deglioperatori mediante parentesi .ImpiegatoNome Cognome Dipart StipAnnMario Rossi Amministrazione 45 DipartimentoCarlo Bianchi Produzione 36 Nome CittàGiuseppe Verdi Amministrazione 40 Amministrazione MilanoFranco Neri Distribuzione 45Carlo Rossi Direzione 80 Produzione TorinoLorenzo Gialli Direzione 73 Distribuzione RomaPaola Rosati Amministrazione 40 Direzione
MilanoMarco Franco Produzione 46 Ricerca Milano
Estrarre i nomi degli Impiegati di cognome "Rossi" che lavorano nei dipartimenti Amministrazione o Produzione
SELECT Nome FROM Impiegato WHERE Cognome='Rossi' AND (Dipart='Amministrazione' OR Dipart='Produzione')
Calcolare la tabella ottenuta dalla tabella Personeselezionando solo quelle persone con reddito tra 20 e 30, e aggiungendo al risultato un attributo che ha, in ogni tupla, lo stesso valore dell'attributo Reddito. Mostrare il risultato dell'interrogazione.
Soluzione Esercizio
SELECT nome, età, reddito, reddito AS ancoraReddito FROM Persone WHERE Reddito >= 20 AND Reddito <= 30
SQL mette a disposizione un operatore LIKE per il confronto fra stringe.
Impiegato Dipartimento Nome
Cognome | Dipart | StipAnn | Nome | Città |
---|---|---|---|---|
Rossi | Amministrazione | 45 | Mario | Milano |
Bianchi | Produzione | 36 | Carlo | Torino |
Verdi | Amministrazione | 40 | Distribuzione | Roma |
Neri | Distribuzione | 45 | Franco | |
Rossi | Direzione | 80 | Carlo | Milano |
Gialli | Direzione | 73 | Lorenzo | |
Rosati | Amministrazione | 40 | Paola | |
Franco | Produzione | 46 | Marco |
una "m" e che ha la
Estrarre gli Impiegati con un nome che comincia
ESERCIZIO :coppia di caratteri "rc" in penultima posizione
Il carattere _ rappresenta un confronto con un
SELECT * carattere arbitrario, mentre % rappresenta un
FROM Impiegato confronto con una stringa di lunghezza
'm%rc_'
WHERE Nome LIKE arbitraria (eventualmente nulla).
21 4 - SQL : Interrogazioni
Gestione dei valori nulli
Impiegato Per selezionare o meno i termini con i
Nome Cognome Dipart
EtàStipAnn valori NULL, SQL fornisce il predicato Mario Rossi Amministrazione 45 IS [NOT] NULL.
Carlo Bianchi Pr