24
SQl SQl SQl SQl come DML come DML come DML come DML Angelo Angelo Angelo Angelo Chianese Chianese Chianese Chianese, Vincenzo Moscato, Antonio , Vincenzo Moscato, Antonio , Vincenzo Moscato, Antonio , Vincenzo Moscato, Antonio Picariello Picariello Picariello Picariello, Lucio Sansone , Lucio Sansone , Lucio Sansone , Lucio Sansone Basi di dati per la gestione dell'informazione Basi di dati per la gestione dell'informazione Basi di dati per la gestione dell'informazione Basi di dati per la gestione dell'informazione 2/ed 2/ed 2/ed 2/ed McGraw McGraw McGraw McGraw-Hill Hill Hill Hill Capitolo 5 Capitolo 5 Capitolo 5 Capitolo 5 Appunti dalle lezioni Appunti dalle lezioni Appunti dalle lezioni Appunti dalle lezioni 2 AA 2010-2011, Basi di Dati, Prof. Antonio d’Acierno, [email protected] SQL come DML Sistemi informativi e basi di dati Il modello relazionale SQL come DDL SQL come DML SQL come DCL La Progettazione Concettuale Strumenti CASE Utilizzo di un DBMS Reale Programmazione Forme normali Transazioni e tecnologie di supporto Basi di dati direzionali Basi di dati distribuite La Progettazione Logica La Progettazione Fisica

08 SQL AS DML

  • Upload
    others

  • View
    15

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 08 SQL AS DML

SQlSQlSQlSQl come DMLcome DMLcome DMLcome DML

Angelo Angelo Angelo Angelo ChianeseChianeseChianeseChianese, Vincenzo Moscato, Antonio , Vincenzo Moscato, Antonio , Vincenzo Moscato, Antonio , Vincenzo Moscato, Antonio PicarielloPicarielloPicarielloPicariello, Lucio Sansone , Lucio Sansone , Lucio Sansone , Lucio Sansone

Basi di dati per la gestione dell'informazione Basi di dati per la gestione dell'informazione Basi di dati per la gestione dell'informazione Basi di dati per la gestione dell'informazione 2/ed2/ed2/ed2/edMcGrawMcGrawMcGrawMcGraw----HillHillHillHillCapitolo 5 Capitolo 5 Capitolo 5 Capitolo 5 Appunti dalle lezioniAppunti dalle lezioniAppunti dalle lezioniAppunti dalle lezioni

2 AA 2010-2011, Basi di Dati, Prof. Antonio d’Acierno, [email protected] SQL come DML

Sistemi informativi e basi di dati

Il modello relazionale

SQL come DDL

SQL come DML

SQL come DCL

La Progettazione Concettuale

Strumenti CASE

Utilizzo di un DBMS Reale

Programmazione

Forme normali

Transazioni e tecnologie di supporto

Basi di dati direzionali

Basi di dati distribuite

La Progettazione Logica

La Progettazione Fisica

Page 2: 08 SQL AS DML

3 AA 2010-2011, Basi di Dati, Prof. Antonio d’Acierno, [email protected] SQL come DML

SQLSQLSQLSQL

� Data Manipulation Data Manipulation Data Manipulation Data Manipulation LanguageLanguageLanguageLanguage (DML) (DML) (DML) (DML) – Inserire datiInserire datiInserire datiInserire dati– Modificare datiModificare datiModificare datiModificare dati– Cancellare datiCancellare datiCancellare datiCancellare dati– Estrarre datiEstrarre datiEstrarre datiEstrarre dati

� I sistemi commerciali spesso offrono una serie di I sistemi commerciali spesso offrono una serie di I sistemi commerciali spesso offrono una serie di I sistemi commerciali spesso offrono una serie di strumenti che estendono le funzionalitstrumenti che estendono le funzionalitstrumenti che estendono le funzionalitstrumenti che estendono le funzionalitàààà definite a definite a definite a definite a livello di standard.livello di standard.livello di standard.livello di standard.

4 AA 2010-2011, Basi di Dati, Prof. Antonio d’Acierno, [email protected] SQL come DML

Inserimento di RigheInserimento di RigheInserimento di RigheInserimento di Righe

� Prima forma:Prima forma:Prima forma:Prima forma:– insertinsertinsertinsert intointointointo NomeTabNomeTabNomeTabNomeTab [(Lista)] [(Lista)] [(Lista)] [(Lista)] valuesvaluesvaluesvalues (Valori)(Valori)(Valori)(Valori)

� Dipartimento(Dipartimento(Dipartimento(Dipartimento(Codice:Codice:Codice:Codice:charcharcharchar(4),Nome:(4),Nome:(4),Nome:(4),Nome:varcharvarcharvarcharvarchar(20))(20))(20))(20))� InsertInsertInsertInsert intointointointo Dipartimento Dipartimento Dipartimento Dipartimento valuesvaluesvaluesvalues((((‘‘‘‘aaaaaaaaaaaa’’’’,,,,’’’’AmministrazioneAmministrazioneAmministrazioneAmministrazione’’’’))))� InsertInsertInsertInsert intointointointo Dipartimento(Codice,Nome)Dipartimento(Codice,Nome)Dipartimento(Codice,Nome)Dipartimento(Codice,Nome)

valuesvaluesvaluesvalues((((‘‘‘‘aaaaaaaaaaaa’’’’,,,,’’’’AmministrazioneAmministrazioneAmministrazioneAmministrazione’’’’))))� InsertInsertInsertInsert intointointointo DiparttimentoDiparttimentoDiparttimentoDiparttimento(Codice) (Codice) (Codice) (Codice) valuesvaluesvaluesvalues ((((‘‘‘‘cccccccccccccccc’’’’))))� InsertInsertInsertInsert intointointointo DiparttimentoDiparttimentoDiparttimentoDiparttimento(Codice,Nome) (Codice,Nome) (Codice,Nome) (Codice,Nome) valuesvaluesvaluesvalues

((((‘‘‘‘dddddddddddddddd’’’’,NULL),NULL),NULL),NULL)

Page 3: 08 SQL AS DML

5 AA 2010-2011, Basi di Dati, Prof. Antonio d’Acierno, [email protected] SQL come DML

Modifica di RigheModifica di RigheModifica di RigheModifica di Righe

� update update update update NomeTabellaNomeTabellaNomeTabellaNomeTabellaset set set set AttrAttrAttrAttr=<=<=<=<EsprEsprEsprEspr | null | default>| null | default>| null | default>| null | default>{,{,{,{,AttrAttrAttrAttr=<=<=<=<EsprEsprEsprEspr | null | default>}| null | default>}| null | default>}| null | default>}[where [where [where [where CondizioneCondizioneCondizioneCondizione] ] ] ]

� Dipartimento(Codice:Dipartimento(Codice:Dipartimento(Codice:Dipartimento(Codice:charcharcharchar(4),Nome:(4),Nome:(4),Nome:(4),Nome:varcharvarcharvarcharvarchar(20))(20))(20))(20))– Update Update Update Update DipartimentoDipartimentoDipartimentoDipartimento

Set Nome = Set Nome = Set Nome = Set Nome = ‘‘‘‘AmministrazioneAmministrazioneAmministrazioneAmministrazione’’’’– Update Update Update Update DipartimentoDipartimentoDipartimentoDipartimento

Set Nome = Set Nome = Set Nome = Set Nome = ‘‘‘‘AmministrazioneAmministrazioneAmministrazioneAmministrazione’’’’where where where where CodiceCodiceCodiceCodice = = = = ‘‘‘‘aaaaaaaaaaaaaaaa’’’’

– Update Update Update Update DipartimentoDipartimentoDipartimentoDipartimentoSet Nome = Set Nome = Set Nome = Set Nome = ‘‘‘‘SconosciutoSconosciutoSconosciutoSconosciuto’’’’where Nome is Nullwhere Nome is Nullwhere Nome is Nullwhere Nome is Null

� UPDATE UPDATE UPDATE UPDATE prodottoprodottoprodottoprodotto SET SET SET SET prezzoprezzoprezzoprezzo = = = = prezzoprezzoprezzoprezzo * 1.10* 1.10* 1.10* 1.10

6 AA 2010-2011, Basi di Dati, Prof. Antonio d’Acierno, [email protected] SQL come DML

Cancellazione RigheCancellazione RigheCancellazione RigheCancellazione Righe

� deletedeletedeletedelete from from from from NomeTabNomeTabNomeTabNomeTab [[[[wherewherewherewhere CondizioneCondizioneCondizioneCondizione]]]]� Dipartimento(Codice:Dipartimento(Codice:Dipartimento(Codice:Dipartimento(Codice:charcharcharchar(4),Nome:(4),Nome:(4),Nome:(4),Nome:varcharvarcharvarcharvarchar(20))(20))(20))(20))

– Delete from Delete from Delete from Delete from DipartimentoDipartimentoDipartimentoDipartimento where Nome is Nullwhere Nome is Nullwhere Nome is Nullwhere Nome is Null

� Se la condizione where manca allora la tabella viene Se la condizione where manca allora la tabella viene Se la condizione where manca allora la tabella viene Se la condizione where manca allora la tabella viene svuotata.svuotata.svuotata.svuotata.– deletedeletedeletedelete from Dipartimentofrom Dipartimentofrom Dipartimentofrom Dipartimento

� Invece:Invece:Invece:Invece:– dropdropdropdrop table Dipartimento table Dipartimento table Dipartimento table Dipartimento elimina la tabellaelimina la tabellaelimina la tabellaelimina la tabella

Page 4: 08 SQL AS DML

7 AA 2010-2011, Basi di Dati, Prof. Antonio d’Acierno, [email protected] SQL come DML

Interrogazioni (Interrogazioni (Interrogazioni (Interrogazioni (QueryQueryQueryQuery))))

� SQL esprime le interrogazioni in modo dichiarativo SQL esprime le interrogazioni in modo dichiarativo SQL esprime le interrogazioni in modo dichiarativo SQL esprime le interrogazioni in modo dichiarativo attraverso il comando select. attraverso il comando select. attraverso il comando select. attraverso il comando select.

� LLLL’’’’ interrogazione interrogazione interrogazione interrogazione èèèè poi automaticamente tradotta in poi automaticamente tradotta in poi automaticamente tradotta in poi automaticamente tradotta in termini procedurali e poi eseguita.termini procedurali e poi eseguita.termini procedurali e poi eseguita.termini procedurali e poi eseguita.

� Esistono vari modi per formulare una stessa query.Esistono vari modi per formulare una stessa query.Esistono vari modi per formulare una stessa query.Esistono vari modi per formulare una stessa query.� LLLL’’’’ utente, tipicamente, non ha bisogno di utente, tipicamente, non ha bisogno di utente, tipicamente, non ha bisogno di utente, tipicamente, non ha bisogno di preoccuparsi dellpreoccuparsi dellpreoccuparsi dellpreoccuparsi dell’’’’ efficienza della query formulata efficienza della query formulata efficienza della query formulata efficienza della query formulata quanto della sua leggibilitquanto della sua leggibilitquanto della sua leggibilitquanto della sua leggibilitàààà e modificabilite modificabilite modificabilite modificabilitàààà....

8 AA 2010-2011, Basi di Dati, Prof. Antonio d’Acierno, [email protected] SQL come DML

QueryQueryQueryQuery

� Sintassi (quasi) generaleSintassi (quasi) generaleSintassi (quasi) generaleSintassi (quasi) generale– SelectSelectSelectSelect <elenco attributi><elenco attributi><elenco attributi><elenco attributi>FromFromFromFrom <elenco tabella><elenco tabella><elenco tabella><elenco tabella>[[[[WhereWhereWhereWhere <condizione>]<condizione>]<condizione>]<condizione>][Group [Group [Group [Group bybybyby <attributi di raggruppamento>]<attributi di raggruppamento>]<attributi di raggruppamento>]<attributi di raggruppamento>][[[[HavingHavingHavingHaving <condizione di raggruppamento>]<condizione di raggruppamento>]<condizione di raggruppamento>]<condizione di raggruppamento>][[[[OrderOrderOrderOrder bybybyby <elenco attributi>]<elenco attributi>]<elenco attributi>]<elenco attributi>]

From Where Group By Having Select Order By

Page 5: 08 SQL AS DML

9 AA 2010-2011, Basi di Dati, Prof. Antonio d’Acierno, [email protected] SQL come DML

QueryQueryQueryQuery

� Esempio:Esempio:Esempio:Esempio:– studente (studente (studente (studente (MatricolaMatricolaMatricolaMatricola,Nome, Cognome) ,Nome, Cognome) ,Nome, Cognome) ,Nome, Cognome)

� CREATE TABLE CREATE TABLE CREATE TABLE CREATE TABLE studentestudentestudentestudente ((((matricolamatricolamatricolamatricola character(4) NOT NULL,character(4) NOT NULL,character(4) NOT NULL,character(4) NOT NULL,cognomecognomecognomecognome character varying(20),character varying(20),character varying(20),character varying(20),nomenomenomenome character varying(20),character varying(20),character varying(20),character varying(20),CONSTRAINT CONSTRAINT CONSTRAINT CONSTRAINT pk_studentepk_studentepk_studentepk_studente PRIMARY KEY (PRIMARY KEY (PRIMARY KEY (PRIMARY KEY (matricolamatricolamatricolamatricola))))))))

� INSERT INTO studente(matricola, cognome, nome) INSERT INTO studente(matricola, cognome, nome) INSERT INTO studente(matricola, cognome, nome) INSERT INTO studente(matricola, cognome, nome) VALUES ('VALUES ('VALUES ('VALUES ('aaaaaaaaaaaaaaaa', 'Paolino', 'Paperino')', 'Paolino', 'Paperino')', 'Paolino', 'Paperino')', 'Paolino', 'Paperino')

…………........INSERT INTO studente(matricola, cognome, nome) INSERT INTO studente(matricola, cognome, nome) INSERT INTO studente(matricola, cognome, nome) INSERT INTO studente(matricola, cognome, nome)

VALUES (VALUES (VALUES (VALUES (‘‘‘‘bbbbbbbbbbbbbbbb', ', ', ', ‘‘‘‘Rossi, Rossi, Rossi, Rossi, ‘‘‘‘Mario')Mario')Mario')Mario')

10 AA 2010-2011, Basi di Dati, Prof. Antonio d’Acierno, [email protected] SQL come DML

� selectselectselectselect CognomeCognomeCognomeCognomefromfromfromfrom StudenteStudenteStudenteStudente

Matricola Cognome Nomeaaaa Paolino Paperinobbbb Rossi Mariocccc Bianchi Mariodddd Bianchi Giuseppeeeee Rossi Vincenzoffff Esposito Gennaro

CognomePaolinoRossiBianchiBianchiRossiEsposito

From Where Group By Having Select Order By

Page 6: 08 SQL AS DML

11 AA 2010-2011, Basi di Dati, Prof. Antonio d’Acierno, [email protected] SQL come DML

� selectselectselectselect Cognome Cognome Cognome Cognome asasasas SurnameSurnameSurnameSurnamefromfromfromfrom StudenteStudenteStudenteStudente

Matricola Cognome Nomeaaaa Paolino Paperinobbbb Rossi Mariocccc Bianchi Mariodddd Bianchi Giuseppeeeee Rossi Vincenzoffff Esposito Gennaro

SurnamePaolinoRossiBianchiBianchiRossiEsposito

From Where Group By Having Select Order By

12 AA 2010-2011, Basi di Dati, Prof. Antonio d’Acierno, [email protected] SQL come DML

� selectselectselectselect Cognome Cognome Cognome Cognome asasasas SurnameSurnameSurnameSurname, Nome, Nome, Nome, Nomefromfromfromfrom StudenteStudenteStudenteStudente

Matricola Cognome Nomeaaaa Paolino Paperinobbbb Rossi Mariocccc Bianchi Mariodddd Bianchi Giuseppeeeee Rossi Vincenzoffff Esposito Gennaro

Surname NomePaolino PaperinoRossi MarioBianchi MarioBianchi GiuseppeRossi VincenzoEsposito Gennaro

From Where Group By Having Select Order By

Page 7: 08 SQL AS DML

13 AA 2010-2011, Basi di Dati, Prof. Antonio d’Acierno, [email protected] SQL come DML

� selectselectselectselect * * * * fromfromfromfrom ImpiegatoImpiegatoImpiegatoImpiegato

Matricola Cognome Nomeaaaa Paolino Paperinobbbb Rossi Mariocccc Bianchi Mariodddd Bianchi Giuseppeeeee Rossi Vincenzoffff Esposito Gennaro

Matricola Cognome Nomeaaaa Paolino Paperinobbbb Rossi Mariocccc Bianchi Mariodddd Bianchi Giuseppeeeee Rossi Vincenzoffff Esposito Gennaro

From Where Group By Having Select Order By

14 AA 2010-2011, Basi di Dati, Prof. Antonio d’Acierno, [email protected] SQL come DML

� selectselectselectselect * * * * fromfromfromfrom ImpiegatoImpiegatoImpiegatoImpiegatowherewherewherewhere Cognome=Cognome=Cognome=Cognome=‘‘‘‘BianchiBianchiBianchiBianchi’’’’

Matricola Cognome Nomeaaaa Paolino Paperinobbbb Rossi Mariocccc Bianchi Mariodddd Bianchi Giuseppeeeee Rossi Vincenzoffff Esposito Gennaro

Matricola Cognome Nomecccc Bianchi Mariodddd Bianchi Giuseppe

� selectselectselectselect Stipendio/12 Stipendio/12 Stipendio/12 Stipendio/12 asasasas StipMensStipMensStipMensStipMensfromfromfromfrom Impiegato Impiegato Impiegato Impiegato wherewherewherewhere cognome=cognome=cognome=cognome=‘‘‘‘RossiRossiRossiRossi’’’’

From Where Group By Having Select Order By

Page 8: 08 SQL AS DML

15 AA 2010-2011, Basi di Dati, Prof. Antonio d’Acierno, [email protected] SQL come DML

� EEEE’’’’ possibile usare connettivi logici (and, or, possibile usare connettivi logici (and, or, possibile usare connettivi logici (and, or, possibile usare connettivi logici (and, or, notnotnotnot) ed ) ed ) ed ) ed espressioni di confronto.espressioni di confronto.espressioni di confronto.espressioni di confronto.

� selectselectselectselect nome, cognome nome, cognome nome, cognome nome, cognome fromfromfromfrom Impiegato Impiegato Impiegato Impiegato wherewherewherewhere ufficio=20 and dipartimento=ufficio=20 and dipartimento=ufficio=20 and dipartimento=ufficio=20 and dipartimento=‘‘‘‘DISDISDISDIS’’’’

� selectselectselectselect nome, cognome nome, cognome nome, cognome nome, cognome fromfromfromfrom Impiegato Impiegato Impiegato Impiegato wherewherewherewhere ufficio=20 or dipartimento=ufficio=20 or dipartimento=ufficio=20 or dipartimento=ufficio=20 or dipartimento=‘‘‘‘DISDISDISDIS’’’’

� selectselectselectselect nome nome nome nome fromfromfromfrom Impiegato Impiegato Impiegato Impiegato wherewherewherewhere cognome = cognome = cognome = cognome = ‘‘‘‘RossiRossiRossiRossi’’’’ and (ufficio=20 or and (ufficio=20 or and (ufficio=20 or and (ufficio=20 or dipartimento=dipartimento=dipartimento=dipartimento=‘‘‘‘DISDISDISDIS’’’’))))

From Where Group By Having Select Order By

16 AA 2010-2011, Basi di Dati, Prof. Antonio d’Acierno, [email protected] SQL come DML

� Operatore LIKEOperatore LIKEOperatore LIKEOperatore LIKE– EEEE’’’’ usato nel confronto di stringhe e si appoggia su due usato nel confronto di stringhe e si appoggia su due usato nel confronto di stringhe e si appoggia su due usato nel confronto di stringhe e si appoggia su due caratteri speciali:caratteri speciali:caratteri speciali:caratteri speciali:� _ (indica un qualsiasi carattere)_ (indica un qualsiasi carattere)_ (indica un qualsiasi carattere)_ (indica un qualsiasi carattere)� % (indica una stringa, anche vuota)% (indica una stringa, anche vuota)% (indica una stringa, anche vuota)% (indica una stringa, anche vuota)

� selectselectselectselect nome nome nome nome fromfromfromfrom Impiegato Impiegato Impiegato Impiegato wherewherewherewhere cognome cognome cognome cognome likelikelikelike ‘‘‘‘_o%i_o%i_o%i_o%i’’’’

� RitornerRitornerRitornerRitorneràààà tutti nomi di Impiegato il cui cognome ha tutti nomi di Impiegato il cui cognome ha tutti nomi di Impiegato il cui cognome ha tutti nomi di Impiegato il cui cognome ha una una una una ““““oooo”””” in seconda posizione e termina per in seconda posizione e termina per in seconda posizione e termina per in seconda posizione e termina per ““““iiii””””(Rossi, (Rossi, (Rossi, (Rossi, DoncelliDoncelliDoncelliDoncelli, , , , LoiLoiLoiLoi).).).).

From Where Group By Having Select Order By

Page 9: 08 SQL AS DML

17 AA 2010-2011, Basi di Dati, Prof. Antonio d’Acierno, [email protected] SQL come DML

� Valori Valori Valori Valori NullNullNullNullWhereWhereWhereWhere Stipendio > 40Stipendio > 40Stipendio > 40Stipendio > 40èèèè soddisfatta dalle righe in cui Stipendio esoddisfatta dalle righe in cui Stipendio esoddisfatta dalle righe in cui Stipendio esoddisfatta dalle righe in cui Stipendio e’’’’ noto e maggiore noto e maggiore noto e maggiore noto e maggiore di 40.di 40.di 40.di 40.

� Per i valori nulli si usa Stipendio Per i valori nulli si usa Stipendio Per i valori nulli si usa Stipendio Per i valori nulli si usa Stipendio isisisis nullnullnullnull::::wherewherewherewhere stipendio stipendio stipendio stipendio isisisis nullnullnullnullwherewherewherewhere stipendio stipendio stipendio stipendio isisisis notnotnotnot nullnullnullnull

Not

V F

F V

U U

a n d V U F

V V U F

U U U F

F F F F

O r V U F

V V V V

U V U U

F V U F

From Where Group By Having Select Order By

18 AA 2010-2011, Basi di Dati, Prof. Antonio d’Acierno, [email protected] SQL come DML

SQL vs Relazione come InsiemeSQL vs Relazione come InsiemeSQL vs Relazione come InsiemeSQL vs Relazione come Insieme

� Abbiamo detto che il risultato del select Abbiamo detto che il risultato del select Abbiamo detto che il risultato del select Abbiamo detto che il risultato del select èèèè una una una una relazione. relazione. relazione. relazione.

� Questo non Questo non Questo non Questo non èèèè del tutto vero, in quanto tale risultato del tutto vero, in quanto tale risultato del tutto vero, in quanto tale risultato del tutto vero, in quanto tale risultato potrebbe avere righe uguali.potrebbe avere righe uguali.potrebbe avere righe uguali.potrebbe avere righe uguali.

� Ciò Ciò Ciò Ciò èèèè dovuto a ragioni di efficienza, perchdovuto a ragioni di efficienza, perchdovuto a ragioni di efficienza, perchdovuto a ragioni di efficienza, perchéééé eliminare eliminare eliminare eliminare i duplicati può essere costoso in termini di tempo e i duplicati può essere costoso in termini di tempo e i duplicati può essere costoso in termini di tempo e i duplicati può essere costoso in termini di tempo e deve essere espressamente richiesto.deve essere espressamente richiesto.deve essere espressamente richiesto.deve essere espressamente richiesto.

select select select select distinctdistinctdistinctdistinct CittCittCittCittààààfrom ...from ...from ...from ...

Page 10: 08 SQL AS DML

19 AA 2010-2011, Basi di Dati, Prof. Antonio d’Acierno, [email protected] SQL come DML

� Impiegato(Impiegato(Impiegato(Impiegato(MatricolaMatricolaMatricolaMatricola, Cognome, Nome, , Cognome, Nome, , Cognome, Nome, , Cognome, Nome, Dipartimento.DipartimentoDipartimento.DipartimentoDipartimento.DipartimentoDipartimento.Dipartimento(Nome))(Nome))(Nome))(Nome))

� Dipartimento(Dipartimento(Dipartimento(Dipartimento(NomeNomeNomeNome, , , , CittaCittaCittaCitta))))� selectselectselectselect * * * * fromfromfromfrom Impiegato, DipartimentoImpiegato, DipartimentoImpiegato, DipartimentoImpiegato, Dipartimento

� selectselectselectselect * * * * fromfromfromfrom Impiegato CROSS JOIN DipartimentoImpiegato CROSS JOIN DipartimentoImpiegato CROSS JOIN DipartimentoImpiegato CROSS JOIN Dipartimento

From Where Group By Having Select Order By

20 AA 2010-2011, Basi di Dati, Prof. Antonio d’Acierno, [email protected] SQL come DML

From Where Group By Having Select Order By

Page 11: 08 SQL AS DML

21 AA 2010-2011, Basi di Dati, Prof. Antonio d’Acierno, [email protected] SQL come DML

� Nomi ambiguiNomi ambiguiNomi ambiguiNomi ambigui� selectselectselectselect nomenomenomenomefromfromfromfrom Impiegato, DipartimentoImpiegato, DipartimentoImpiegato, DipartimentoImpiegato, Dipartimento

� selectselectselectselect Impiegato.nomeImpiegato.nomeImpiegato.nomeImpiegato.nomefromfromfromfrom Impiegato, DipartimentoImpiegato, DipartimentoImpiegato, DipartimentoImpiegato, Dipartimento

� selectselectselectselect I.nomeI.nomeI.nomeI.nome, , , , D.cittaD.cittaD.cittaD.cittafromfromfromfrom Impiegato Impiegato Impiegato Impiegato asasasas I, Dipartimento I, Dipartimento I, Dipartimento I, Dipartimento asasasas DDDD

From Where Group By Having Select Order By

22 AA 2010-2011, Basi di Dati, Prof. Antonio d’Acierno, [email protected] SQL come DML

� selectselectselectselect * * * * fromfromfromfrom Impiegato Impiegato Impiegato Impiegato asasasas I, Dipartimento I, Dipartimento I, Dipartimento I, Dipartimento asasasas DDDDwherewherewherewhere I.DipartimentoI.DipartimentoI.DipartimentoI.Dipartimento =D.Nome=D.Nome=D.Nome=D.Nome

From Where Group By Having Select Order By

Page 12: 08 SQL AS DML

23 AA 2010-2011, Basi di Dati, Prof. Antonio d’Acierno, [email protected] SQL come DML

� selectselectselectselect * * * * fromfromfromfrom Impiegato Impiegato Impiegato Impiegato asasasas I I I I innerinnerinnerinner join Dipartimento join Dipartimento join Dipartimento join Dipartimento asasasas D D D D

on (on (on (on (I.DipartimentoI.DipartimentoI.DipartimentoI.Dipartimento =D.Nome)=D.Nome)=D.Nome)=D.Nome)

From Where Group By Having Select Order By

24 AA 2010-2011, Basi di Dati, Prof. Antonio d’Acierno, [email protected] SQL come DML

� JoinJoinJoinJoin– fromfromfromfrom t1 t1 t1 t1 tipojointipojointipojointipojoin join t2 on condizionejoin t2 on condizionejoin t2 on condizionejoin t2 on condizione

� tipojointipojointipojointipojoin� innerinnerinnerinner, , , , � right (right (right (right (outerouterouterouter) ) ) ) � leftleftleftleft ((((outerouterouterouter))))� full (full (full (full (outerouterouterouter))))

From Where Group By Having Select Order By

Page 13: 08 SQL AS DML

25 AA 2010-2011, Basi di Dati, Prof. Antonio d’Acierno, [email protected] SQL come DML

� Con il join interno le righe coinvolte nel risultato sono in Con il join interno le righe coinvolte nel risultato sono in Con il join interno le righe coinvolte nel risultato sono in Con il join interno le righe coinvolte nel risultato sono in genere un sottoinsieme delle righe di ciascuna tabella, perchgenere un sottoinsieme delle righe di ciascuna tabella, perchgenere un sottoinsieme delle righe di ciascuna tabella, perchgenere un sottoinsieme delle righe di ciascuna tabella, perchééééuna riga della tabella R1 potrebbe non avere corrispondenze una riga della tabella R1 potrebbe non avere corrispondenze una riga della tabella R1 potrebbe non avere corrispondenze una riga della tabella R1 potrebbe non avere corrispondenze nella tabella R2 e viceversa.nella tabella R2 e viceversa.nella tabella R2 e viceversa.nella tabella R2 e viceversa.

� In alcune applicazioni potrebbe servire mantenere tutte le In alcune applicazioni potrebbe servire mantenere tutte le In alcune applicazioni potrebbe servire mantenere tutte le In alcune applicazioni potrebbe servire mantenere tutte le righe di qualcuna delle (tutte le) tabelle coinvolte, mettendo righe di qualcuna delle (tutte le) tabelle coinvolte, mettendo righe di qualcuna delle (tutte le) tabelle coinvolte, mettendo righe di qualcuna delle (tutte le) tabelle coinvolte, mettendo dei valori dei valori dei valori dei valori NullNullNullNull per indicare lper indicare lper indicare lper indicare l’’’’ assenza di informazioni assenza di informazioni assenza di informazioni assenza di informazioni provenienti dallprovenienti dallprovenienti dallprovenienti dall’’’’ altra tabella.altra tabella.altra tabella.altra tabella.

� OuterOuterOuterOuter JoinJoinJoinJoin– Il join esterno mantiene tutte le righe della tabella di sinistrIl join esterno mantiene tutte le righe della tabella di sinistrIl join esterno mantiene tutte le righe della tabella di sinistrIl join esterno mantiene tutte le righe della tabella di sinistra (a (a (a (leftleftleftleft), ), ), ),

della tabella di destra (right) o di entrambe (full).della tabella di destra (right) o di entrambe (full).della tabella di destra (right) o di entrambe (full).della tabella di destra (right) o di entrambe (full).

From Where Group By Having Select Order By

26 AA 2010-2011, Basi di Dati, Prof. Antonio d’Acierno, [email protected] SQL come DML

From Where Group By Having Select Order By

Page 14: 08 SQL AS DML

27 AA 2010-2011, Basi di Dati, Prof. Antonio d’Acierno, [email protected] SQL come DML

From Where Group By Having Select Order By

28 AA 2010-2011, Basi di Dati, Prof. Antonio d’Acierno, [email protected] SQL come DML

From Where Group By Having Select Order By

Page 15: 08 SQL AS DML

29 AA 2010-2011, Basi di Dati, Prof. Antonio d’Acierno, [email protected] SQL come DML

� Variabili usate nel FROMVariabili usate nel FROMVariabili usate nel FROMVariabili usate nel FROMselectselectselectselect I.nomeI.nomeI.nomeI.nome, D.nome, , D.nome, , D.nome, , D.nome, D.CittaD.CittaD.CittaD.Cittafromfromfromfrom Impiegato Impiegato Impiegato Impiegato asasasas I, Dipartimento I, Dipartimento I, Dipartimento I, Dipartimento asasasas DDDDwherewherewherewhere I.DipartI.DipartI.DipartI.Dipart = = = = D.NomeD.NomeD.NomeD.Nome

� In questo caso la variabile In questo caso la variabile In questo caso la variabile In questo caso la variabile èèèè da interpretarsi da interpretarsi da interpretarsi da interpretarsi semplicemente come un ridenominazione.semplicemente come un ridenominazione.semplicemente come un ridenominazione.semplicemente come un ridenominazione.

� Utilizzando gli Alias Utilizzando gli Alias Utilizzando gli Alias Utilizzando gli Alias èèèè però possibile anche far però possibile anche far però possibile anche far però possibile anche far riferimento a piriferimento a piriferimento a piriferimento a piùùùù esemplari della stessa tabella. esemplari della stessa tabella. esemplari della stessa tabella. esemplari della stessa tabella.

� In questo caso lIn questo caso lIn questo caso lIn questo caso l’’’’interpretazione interpretazione interpretazione interpretazione èèèè che, per ogni alias, che, per ogni alias, che, per ogni alias, che, per ogni alias, si introducesse una variabile di tipo tabella che viene si introducesse una variabile di tipo tabella che viene si introducesse una variabile di tipo tabella che viene si introducesse una variabile di tipo tabella che viene inizializzata con la tabella in questione.inizializzata con la tabella in questione.inizializzata con la tabella in questione.inizializzata con la tabella in questione.

From Where Group By Having Select Order By

30 AA 2010-2011, Basi di Dati, Prof. Antonio d’Acierno, [email protected] SQL come DML

EsempioEsempioEsempioEsempio

� Impiegato(Matricola Cognome Impiegato(Matricola Cognome Impiegato(Matricola Cognome Impiegato(Matricola Cognome EtaEtaEtaEta Stipendio)Stipendio)Stipendio)Stipendio)Supervisione(Supervisione(Supervisione(Supervisione(CapoCapoCapoCapo::::Impiegato.MatricolaImpiegato.MatricolaImpiegato.MatricolaImpiegato.Matricola Impiegato:Impiegato:Impiegato:Impiegato:ImpiegatoImpiegatoImpiegatoImpiegato.Matricola).Matricola).Matricola).Matricola)

� Trovare il nome e lo stipendio degli impiegati che guadagnano piTrovare il nome e lo stipendio degli impiegati che guadagnano piTrovare il nome e lo stipendio degli impiegati che guadagnano piTrovare il nome e lo stipendio degli impiegati che guadagnano piùùùù del del del del proprio capo.proprio capo.proprio capo.proprio capo.

� SelectSelectSelectSelect I2.NomeI2.NomeI2.NomeI2.Nome, I2.Stip, I2.Stip, I2.Stip, I2.Stipfromfromfromfrom (Impiegato (Impiegato (Impiegato (Impiegato asasasas I1 join Supervisione I1 join Supervisione I1 join Supervisione I1 join Supervisione asasasas S on (I1.Matricola=S.Capo)) S on (I1.Matricola=S.Capo)) S on (I1.Matricola=S.Capo)) S on (I1.Matricola=S.Capo))

join Impiegato join Impiegato join Impiegato join Impiegato asasasas I2 on (I2.Matricola=S.Impiegato)I2 on (I2.Matricola=S.Impiegato)I2 on (I2.Matricola=S.Impiegato)I2 on (I2.Matricola=S.Impiegato)wherewherewherewhere I2.StipendioI2.StipendioI2.StipendioI2.Stipendio > > > > I1.StipendioI1.StipendioI1.StipendioI1.Stipendio

Capo ImpiegatoMatricolaCognome Eta Stipendio Matricola Cognome Eta Stipendio

Page 16: 08 SQL AS DML

31 AA 2010-2011, Basi di Dati, Prof. Antonio d’Acierno, [email protected] SQL come DML

EsempioEsempioEsempioEsempio

32 AA 2010-2011, Basi di Dati, Prof. Antonio d’Acierno, [email protected] SQL come DML

� Il risultato di una interrogazione Il risultato di una interrogazione Il risultato di una interrogazione Il risultato di una interrogazione èèèè una relazione e una relazione e una relazione e una relazione e come tale non come tale non come tale non come tale non èèèè ordinata. ordinata. ordinata. ordinata.

� Nelle applicazioni Nelle applicazioni Nelle applicazioni Nelle applicazioni èèèè comunque utile avere i risultati comunque utile avere i risultati comunque utile avere i risultati comunque utile avere i risultati ordinati secondo una certa strategia.ordinati secondo una certa strategia.ordinati secondo una certa strategia.ordinati secondo una certa strategia.LLLL’’’’ordinamento agisce prima del ordinamento agisce prima del ordinamento agisce prima del ordinamento agisce prima del selectselectselectselect– Non Non Non Non èèèè necessario ordinare su un attributo selezionatonecessario ordinare su un attributo selezionatonecessario ordinare su un attributo selezionatonecessario ordinare su un attributo selezionato

� LLLL’’’’ordinamento introduce, in molti casi, un certo ordinamento introduce, in molti casi, un certo ordinamento introduce, in molti casi, un certo ordinamento introduce, in molti casi, un certo overheadoverheadoverheadoverhead....

� selectselectselectselect MatricolaMatricolaMatricolaMatricolafromfromfromfrom ImpiegatoImpiegatoImpiegatoImpiegatoorderorderorderorder bybybyby Cognome, Nome Cognome, Nome Cognome, Nome Cognome, Nome descdescdescdesc

From Where Group By Having Select Order By

Page 17: 08 SQL AS DML

33 AA 2010-2011, Basi di Dati, Prof. Antonio d’Acierno, [email protected] SQL come DML

� Operatori AggregatiOperatori AggregatiOperatori AggregatiOperatori Aggregati– Agiscono non a livello di tupla ma a livello di relazione.Agiscono non a livello di tupla ma a livello di relazione.Agiscono non a livello di tupla ma a livello di relazione.Agiscono non a livello di tupla ma a livello di relazione.

� countcountcountcount� sumsumsumsum� maxmaxmaxmax� minminminmin� avgavgavgavg

� countcountcountcount (<* | [(<* | [(<* | [(<* | [distinctdistinctdistinctdistinct | | | | allallallall] ] ] ] listaattributilistaattributilistaattributilistaattributi))))

selectselectselectselect countcountcountcount((((allallallall nome,cognome)nome,cognome)nome,cognome)nome,cognome)fromfromfromfrom ImpiegatiImpiegatiImpiegatiImpiegati

From Where Group By Having Select Order By

34 AA 2010-2011, Basi di Dati, Prof. Antonio d’Acierno, [email protected] SQL come DML

Page 18: 08 SQL AS DML

35 AA 2010-2011, Basi di Dati, Prof. Antonio d’Acierno, [email protected] SQL come DML

Operatori Aggregati (continua)Operatori Aggregati (continua)Operatori Aggregati (continua)Operatori Aggregati (continua)

� <sum | <sum | <sum | <sum | avgavgavgavg | | | | maxmaxmaxmax | min> ([| min> ([| min> ([| min> ([distinctdistinctdistinctdistinct | | | | allallallall] ] ] ] AttrAttrAttrAttr))))� sum e sum e sum e sum e avgavgavgavg richiedono che lrichiedono che lrichiedono che lrichiedono che l’’’’ attributo sia numerico o di tipo intervallo attributo sia numerico o di tipo intervallo attributo sia numerico o di tipo intervallo attributo sia numerico o di tipo intervallo

temporale.temporale.temporale.temporale.� maxmaxmaxmax e min possono riferirsi a qualsiasi attributo sul cui dominio se min possono riferirsi a qualsiasi attributo sul cui dominio se min possono riferirsi a qualsiasi attributo sul cui dominio se min possono riferirsi a qualsiasi attributo sul cui dominio sia ia ia ia

definito un ordinamento.definito un ordinamento.definito un ordinamento.definito un ordinamento.

select select select select maxmaxmaxmax((((StipStipStipStip))))from Impiegatofrom Impiegatofrom Impiegatofrom Impiegatowhere where where where etaetaetaeta <35<35<35<35

errataerrataerrataerrata select select select select MatrMatrMatrMatr, , , , maxmaxmaxmax((((StipStipStipStip))))from Impiegatofrom Impiegatofrom Impiegatofrom Impiegatowhere where where where etaetaetaeta <35<35<35<35

36 AA 2010-2011, Basi di Dati, Prof. Antonio d’Acierno, [email protected] SQL come DML

Interrogazioni con RaggruppamentoInterrogazioni con RaggruppamentoInterrogazioni con RaggruppamentoInterrogazioni con Raggruppamento

� In alcune applicazioni sorge lIn alcune applicazioni sorge lIn alcune applicazioni sorge lIn alcune applicazioni sorge l’’’’esigenza di applicare esigenza di applicare esigenza di applicare esigenza di applicare gli operatori aggregati distintamente a gli operatori aggregati distintamente a gli operatori aggregati distintamente a gli operatori aggregati distintamente a sottoinsiemi di righe.sottoinsiemi di righe.sottoinsiemi di righe.sottoinsiemi di righe.

Impiegatinome dipart Uff StipPippo dip1 1 10Pluto dip2 2 15Topolino dip3 3 12Paperino dip1 4 11Paperina dip2 5 10

select dipart, sum(Stip)from ImpiegatiGroup by dipart

Page 19: 08 SQL AS DML

37 AA 2010-2011, Basi di Dati, Prof. Antonio d’Acierno, [email protected] SQL come DML

Interrogazioni con RaggruppamentoInterrogazioni con RaggruppamentoInterrogazioni con RaggruppamentoInterrogazioni con Raggruppamento

� StepStepStepStep 1:1:1:1:select select select select dipartdipartdipartdipart, , , , StipStipStipStipfrom Impiegatifrom Impiegatifrom Impiegatifrom Impiegati

� StepStepStepStep 2.2.2.2.Le righe della tabella ottenuta sono analizzate e raggruppate Le righe della tabella ottenuta sono analizzate e raggruppate Le righe della tabella ottenuta sono analizzate e raggruppate Le righe della tabella ottenuta sono analizzate e raggruppate in sottoinsiemi in funzione dellin sottoinsiemi in funzione dellin sottoinsiemi in funzione dellin sottoinsiemi in funzione dell’’’’attributo di attributo di attributo di attributo di groupgroupgroupgroup bybybyby....

� StepStepStepStep 3.3.3.3.Sui sottoinsiemi viene applicato lSui sottoinsiemi viene applicato lSui sottoinsiemi viene applicato lSui sottoinsiemi viene applicato l’’’’ operatore aggregato.operatore aggregato.operatore aggregato.operatore aggregato.

38 AA 2010-2011, Basi di Dati, Prof. Antonio d’Acierno, [email protected] SQL come DML

Page 20: 08 SQL AS DML

39 AA 2010-2011, Basi di Dati, Prof. Antonio d’Acierno, [email protected] SQL come DML

Interrogazioni con Raggruppamento Interrogazioni con Raggruppamento Interrogazioni con Raggruppamento Interrogazioni con Raggruppamento

selectselectselectselect ufficio ufficio ufficio ufficio fromfromfromfrom impiegato impiegato impiegato impiegato groupgroupgroupgroup bybybyby dipartdipartdipartdipart

� sintatticamente errata e priva di senso.

selectselectselectselect dipartdipartdipartdipart, , , , countcountcountcount (*), (*), (*), (*), CittaCittaCittaCittafromfromfromfrom Impiegato I Impiegato I Impiegato I Impiegato I innerinnerinnerinner join dipartimento D on (I.dipart=D.nome)join dipartimento D on (I.dipart=D.nome)join dipartimento D on (I.dipart=D.nome)join dipartimento D on (I.dipart=D.nome)groupgroupgroupgroup bybybyby dipartdipartdipartdipart

� sintatticamente errata ma significativa

selectselectselectselect dipartdipartdipartdipart, , , , countcountcountcount (*), (*), (*), (*), CittaCittaCittaCittafromfromfromfrom Impiegato I Impiegato I Impiegato I Impiegato I innerinnerinnerinner join dipartimento D on (I.dipart=D.nome)join dipartimento D on (I.dipart=D.nome)join dipartimento D on (I.dipart=D.nome)join dipartimento D on (I.dipart=D.nome)groupgroupgroupgroup bybybyby dipartdipartdipartdipart , , , , cittacittacittacitta

40 AA 2010-2011, Basi di Dati, Prof. Antonio d’Acierno, [email protected] SQL come DML

Predicati sui GruppiPredicati sui GruppiPredicati sui GruppiPredicati sui Gruppi

� La clausola La clausola La clausola La clausola groupgroupgroupgroup bybybyby consente di lavorare su consente di lavorare su consente di lavorare su consente di lavorare su sottoinsiemi.sottoinsiemi.sottoinsiemi.sottoinsiemi.La clausola La clausola La clausola La clausola havinghavinghavinghaving consente di selezionare i consente di selezionare i consente di selezionare i consente di selezionare i sottoinsiemi.sottoinsiemi.sottoinsiemi.sottoinsiemi.

select select select select dipartdipartdipartdipart, sum(, sum(, sum(, sum(StipStipStipStip))))from Impiegatifrom Impiegatifrom Impiegatifrom Impiegatigroupbygroupbygroupbygroupby dipartdipartdipartdiparthavinghavinghavinghaving sum(sum(sum(sum(StipStipStipStip) >= 20) >= 20) >= 20) >= 20

Page 21: 08 SQL AS DML

41 AA 2010-2011, Basi di Dati, Prof. Antonio d’Acierno, [email protected] SQL come DML

42 AA 2010-2011, Basi di Dati, Prof. Antonio d’Acierno, [email protected] SQL come DML

Interrogazioni InsiemisticheInterrogazioni InsiemisticheInterrogazioni InsiemisticheInterrogazioni Insiemistiche

� union, union, union, union, intersectintersectintersectintersect, , , , execptexecptexecptexecpt ((((minusminusminusminus))))� Possono essere solo al livello piPossono essere solo al livello piPossono essere solo al livello piPossono essere solo al livello piùùùù esterno di una query, esterno di una query, esterno di una query, esterno di una query,

operando sul risultato di un select.operando sul risultato di un select.operando sul risultato di un select.operando sul risultato di un select.� Eseguono sempre una eliminazione di duplicati (se non si Eseguono sempre una eliminazione di duplicati (se non si Eseguono sempre una eliminazione di duplicati (se non si Eseguono sempre una eliminazione di duplicati (se non si

esplicita la keyword esplicita la keyword esplicita la keyword esplicita la keyword allallallall).).).).� EEEE’’’’ richiesto che gli attributi siano compatibili.richiesto che gli attributi siano compatibili.richiesto che gli attributi siano compatibili.richiesto che gli attributi siano compatibili.

selectselectselectselect cognome from Impiegaticognome from Impiegaticognome from Impiegaticognome from Impiegatiunion union union union allallallallselectselectselectselect nome from impiegatinome from impiegatinome from impiegatinome from impiegati

Page 22: 08 SQL AS DML

43 AA 2010-2011, Basi di Dati, Prof. Antonio d’Acierno, [email protected] SQL come DML

44 AA 2010-2011, Basi di Dati, Prof. Antonio d’Acierno, [email protected] SQL come DML

InterrogazioniInterrogazioniInterrogazioniInterrogazioni NidificateNidificateNidificateNidificate

� In SQL In SQL In SQL In SQL èèèè possibile confrontare un valore con il possibile confrontare un valore con il possibile confrontare un valore con il possibile confrontare un valore con il risultato di un risultato di un risultato di un risultato di un selectselectselectselect....

� AllAllAllAll, , , , anyanyanyany

select *from impiegatowhere Dipart = any (

select Nomefrom dipartimentowhere citta = ‘topolinia’)

select *from impiegatowhere Dipart <> all (

select Nomefrom dipartimentowhere citta = ‘topolinia’)

Page 23: 08 SQL AS DML

45 AA 2010-2011, Basi di Dati, Prof. Antonio d’Acierno, [email protected] SQL come DML

Interrogazioni NidificateInterrogazioni NidificateInterrogazioni NidificateInterrogazioni Nidificate

� Impiegato(Matricola, Cognome,Stipendio)Impiegato(Matricola, Cognome,Stipendio)Impiegato(Matricola, Cognome,Stipendio)Impiegato(Matricola, Cognome,Stipendio)� Trovare gli impiegati che guadagnano lo stipendio Trovare gli impiegati che guadagnano lo stipendio Trovare gli impiegati che guadagnano lo stipendio Trovare gli impiegati che guadagnano lo stipendio pipipipiùùùù altoaltoaltoalto

� SelectSelectSelectSelect ****FromFromFromFrom ImpiegatoImpiegatoImpiegatoImpiegatoWhereWhereWhereWhere Stipendio =Stipendio =Stipendio =Stipendio = ((((SelectSelectSelectSelect maxmaxmaxmax(Stipendio)(Stipendio)(Stipendio)(Stipendio)

FromFromFromFrom Impiegato)Impiegato)Impiegato)Impiegato)

46 AA 2010-2011, Basi di Dati, Prof. Antonio d’Acierno, [email protected] SQL come DML

InterpretazioneInterpretazioneInterpretazioneInterpretazione

� LLLL’’’’interrogazione nidificata interrogazione nidificata interrogazione nidificata interrogazione nidificata èèèè eseguita una sola volta prima di eseguire eseguita una sola volta prima di eseguire eseguita una sola volta prima di eseguire eseguita una sola volta prima di eseguire llll’’’’interrogazione esterna. che sarinterrogazione esterna. che sarinterrogazione esterna. che sarinterrogazione esterna. che saràààà basata su un risultato temporaneo.basata su un risultato temporaneo.basata su un risultato temporaneo.basata su un risultato temporaneo.

� LLLL’’’’interrogazione interna può anche fare riferimento a quella esterinterrogazione interna può anche fare riferimento a quella esterinterrogazione interna può anche fare riferimento a quella esterinterrogazione interna può anche fare riferimento a quella esterna, na, na, na, rendendo questa interpretazione non pirendendo questa interpretazione non pirendendo questa interpretazione non pirendendo questa interpretazione non piùùùù valida. valida. valida. valida.

� Bisogna allora reinterpretare il tutto in termini di prodotto caBisogna allora reinterpretare il tutto in termini di prodotto caBisogna allora reinterpretare il tutto in termini di prodotto caBisogna allora reinterpretare il tutto in termini di prodotto cartesiano di rtesiano di rtesiano di rtesiano di tabelle sul cui risultato si applicano le condizioni espresse netabelle sul cui risultato si applicano le condizioni espresse netabelle sul cui risultato si applicano le condizioni espresse netabelle sul cui risultato si applicano le condizioni espresse nel predicato l predicato l predicato l predicato where. Poichwhere. Poichwhere. Poichwhere. Poichéééé il predicato where il predicato where il predicato where il predicato where èèèè a sua volta una interrogazione, questa a sua volta una interrogazione, questa a sua volta una interrogazione, questa a sua volta una interrogazione, questa dovrdovrdovrdovràààà essere valutata per ogni riga del prodotto stesso. essere valutata per ogni riga del prodotto stesso. essere valutata per ogni riga del prodotto stesso. essere valutata per ogni riga del prodotto stesso.

Page 24: 08 SQL AS DML

47 AA 2010-2011, Basi di Dati, Prof. Antonio d’Acierno, [email protected] SQL come DML

InterpretazioneInterpretazioneInterpretazioneInterpretazione

� Persona(CF,Cognome,NomePersona(CF,Cognome,NomePersona(CF,Cognome,NomePersona(CF,Cognome,Nome))))– TrovareTrovareTrovareTrovare gligligligli omonimiomonimiomonimiomonimi

� Select distinct P1.*Select distinct P1.*Select distinct P1.*Select distinct P1.*From Persona P1, Persona P2From Persona P1, Persona P2From Persona P1, Persona P2From Persona P1, Persona P2where where where where P1.nome = P2.nome andP1.nome = P2.nome andP1.nome = P2.nome andP1.nome = P2.nome and

P1.cognome = P2.cognome and P1.cognome = P2.cognome and P1.cognome = P2.cognome and P1.cognome = P2.cognome and P1.CodFis <> P2.CodFisP1.CodFis <> P2.CodFisP1.CodFis <> P2.CodFisP1.CodFis <> P2.CodFis

� select * from Persona Pselect * from Persona Pselect * from Persona Pselect * from Persona P

48 AA 2010-2011, Basi di Dati, Prof. Antonio d’Acierno, [email protected] SQL come DML

Inserimento di Righe (forma 2)Inserimento di Righe (forma 2)Inserimento di Righe (forma 2)Inserimento di Righe (forma 2)

� insertinsertinsertinsert intointointointo NomeTabNomeTabNomeTabNomeTab [[[[ListaAttributiListaAttributiListaAttributiListaAttributi] ] ] ] <<<<valuesvaluesvaluesvalues ((((ListaValoriListaValoriListaValoriListaValori) | ) | ) | ) | SelectSQLSelectSQLSelectSQLSelectSQL>>>>

� Esempio forma 1:Esempio forma 1:Esempio forma 1:Esempio forma 1:insert into Dipartimento(Nome,Citta)insert into Dipartimento(Nome,Citta)insert into Dipartimento(Nome,Citta)insert into Dipartimento(Nome,Citta)values(values(values(values(‘‘‘‘prodprodprodprod’’’’,,,,’’’’MilanoMilanoMilanoMilano’’’’))))

� Esempio forma 2:Esempio forma 2:Esempio forma 2:Esempio forma 2:insert into ProdottiMilanesiinsert into ProdottiMilanesiinsert into ProdottiMilanesiinsert into ProdottiMilanesi

(select * from Prodotti(select * from Prodotti(select * from Prodotti(select * from Prodottiwhere LuogoProd=where LuogoProd=where LuogoProd=where LuogoProd=‘‘‘‘MilanoMilanoMilanoMilano’’’’))))