basi di dati
DESCRIPTION
Basi di Dati. SQL-92 Dettagli e Approfondimenti. versione 2.0. Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina). DDL: Tabelle valori di default vincoli di riferimento modifiche allo schema DDL: Viste definizione e uso DDL: Indici - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Basi di Dati](https://reader035.vdocuments.pub/reader035/viewer/2022070403/56813a07550346895da1d24b/html5/thumbnails/1.jpg)
G. Mecca – [email protected] – Università della BasilicataG. Mecca – [email protected] – Università della Basilicata
Basi di Dati
SQL-92Dettagli e Approfondimenti
versione 2.0
Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina)
![Page 2: Basi di Dati](https://reader035.vdocuments.pub/reader035/viewer/2022070403/56813a07550346895da1d24b/html5/thumbnails/2.jpg)
2G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
Dettagli e Approfondimenti
DDL: Tabellevalori di defaultvincoli di riferimentomodifiche allo schema
DDL: Vistedefinizione e uso
DDL: Indici DCL
utenti
autorizzazionischemi esterni
DML: Aggiornamentiinserimenti
DML: Interrogazionioperatori insiemisticiSELECT: espressioniFROM: joinWHERE: op. like
SQL-92 >> Sommario
![Page 3: Basi di Dati](https://reader035.vdocuments.pub/reader035/viewer/2022070403/56813a07550346895da1d24b/html5/thumbnails/3.jpg)
3G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
SQL
SQL-92 Intermediate DDL
“Data Definition Language”definizione degli oggetti dello schemaCREATE DATABASEDROP DATABASECREATE TABLEDROP TABLE
SQL-92 >> Dettagli e Approdondimenti
![Page 4: Basi di Dati](https://reader035.vdocuments.pub/reader035/viewer/2022070403/56813a07550346895da1d24b/html5/thumbnails/4.jpg)
4G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
SQL
DCL“Data Control Language”utenti e autorizzazioni
DML“Data Manipulation Language”interrogazioni e aggiornamentiINSERT, DELETE, UPDATESELECT
SQL-92 >> Dettagli e Approdondimenti
![Page 5: Basi di Dati](https://reader035.vdocuments.pub/reader035/viewer/2022070403/56813a07550346895da1d24b/html5/thumbnails/5.jpg)
5G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
DDL: Tabelle
CreazioneCREATE TABLE <nome> (<schema>);
<schema>una o più definizioni di attributozero o più definizioni di vincoli di tabella
Definizione di attributo<nomeattributo> <tipo> [<vincoli di colonna>]
SQL-92 >> Dettagli e Approdondimenti >> DDL: Tabelle
![Page 6: Basi di Dati](https://reader035.vdocuments.pub/reader035/viewer/2022070403/56813a07550346895da1d24b/html5/thumbnails/6.jpg)
6G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
Valori di Default
Nella CREATE TABLE e’ possibile specificare valori standard per gli attributi
CREATE TABLE Studenti ( matr integer PRIMARY KEY,
cognome varchar(20) NOT NULL,nome varchar(20) NOT NULL,ciclo char(20) DEFAULT ‘laurea tr.’,anno integer NOT NULL DEFAULT 1,relatore char(4) REFERENCES
Professori(cod));
SQL-92 >> Dettagli e Approdondimenti >> DDL: Tabelle
![Page 7: Basi di Dati](https://reader035.vdocuments.pub/reader035/viewer/2022070403/56813a07550346895da1d24b/html5/thumbnails/7.jpg)
7G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
Vincoli di Riferimento
Vincoli di riferimento di colonna<attr> <tipo> REFERENCES <chiave est.>es: docente char(4) REFERENCES Professori(cod)
Vincoli di riferimento di tabellaFOREIGN KEY (<attributi>)
REFERENCES <chiave est.>es: se la chiave di Collegi è prov. e numero FOREIGN KEY (provincia, collegio) REFERENCES Collegi(provincia, numero)
SQL-92 >> Dettagli e Approdondimenti >> DDL: Tabelle
![Page 8: Basi di Dati](https://reader035.vdocuments.pub/reader035/viewer/2022070403/56813a07550346895da1d24b/html5/thumbnails/8.jpg)
8G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
Vincoli di Riferimento
Aggiornamenti in cascataON {UPDATE | DELETE} <azione>
<azione>CASCADESET NULLSET DEFAULTes: docente char(4) REFERENCES Professori(cod) ON UPDATE SET NULL;
SQL-92 >> Dettagli e Approdondimenti >> DDL: Tabelle
![Page 9: Basi di Dati](https://reader035.vdocuments.pub/reader035/viewer/2022070403/56813a07550346895da1d24b/html5/thumbnails/9.jpg)
9G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
Modifiche allo Schema
Modifiche ad una tabella già esistenteALTER TABLE
Tre funzioniridenominazione della tabellaaggiunta, ridenominazione ed eliminazione
di attributiaggiunta ed eliminazione di vincoli
SQL-92 >> Dettagli e Approdondimenti >> DDL: Tabelle
![Page 10: Basi di Dati](https://reader035.vdocuments.pub/reader035/viewer/2022070403/56813a07550346895da1d24b/html5/thumbnails/10.jpg)
10G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
Modifiche allo Schema
Ridenominazione della tabellaALTER TABLE <nome> RENAME TO
<nuovo nome>;es: ALTER TABLE Professori RENAME TO Docenti;
Modifiche agli attributiALTER TABLE <nome> RENAME COLUMN
<vecchio attributo> TO <nuovo attributo>;ALTER TABLE <nome> ADD COLUMN
<nuovo attributo> <tipo>;ALTER TABLE <nome> DROP COLUMN
<nome attributo>;
SQL-92 >> Dettagli e Approdondimenti >> DDL: Tabelle
![Page 11: Basi di Dati](https://reader035.vdocuments.pub/reader035/viewer/2022070403/56813a07550346895da1d24b/html5/thumbnails/11.jpg)
11G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
Modifiche allo Schema
EsempioALTER TABLE Studenti ADD COLUMN
dataNascita DATE;ALTER TABLE Studenti ADD COLUMN
luogoNascita VARCHAR(20);ALTER TABLE Studenti ADD COLUMN
reddito DECIMAL(8,2);ALTER TABLE Studenti RENAME COLUMN
dataNascita TO dataDiNascita;ALTER TABLE Studenti DROP COLUMN
dataDiNascita;
SQL-92 >> Dettagli e Approdondimenti >> DDL: Tabelle
![Page 12: Basi di Dati](https://reader035.vdocuments.pub/reader035/viewer/2022070403/56813a07550346895da1d24b/html5/thumbnails/12.jpg)
12G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
Modifiche allo Schema
Semantica dell’aggiunta di colonnela nuova colonna viene aggiunta allo schemaa tutte le ennuple viene aggiunto NULLoppure il valore standard se è stato specif.
Semantica dell’eliminazione di colonnela colonna viene eliminata dallo schema,
assieme agli eventuali vincoli relativiviene effettuata la proiezione delle ennuple
SQL-92 >> Dettagli e Approdondimenti >> DDL: Tabelle
![Page 13: Basi di Dati](https://reader035.vdocuments.pub/reader035/viewer/2022070403/56813a07550346895da1d24b/html5/thumbnails/13.jpg)
13G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
Modifiche allo Schema
Aggiunta di vincoliALTER TABLE <nome> ADD CONSTRAINT
<nome vincolo> <def. vincolo di tabella>;l’istanza deve rispettare il vincolo
EsempioALTER TABLE Studenti ADD CONSTRAINT cf
UNIQUE (nome, cognome, dataNascita, luogoNascita);
SQL-92 >> Dettagli e Approdondimenti >> DDL: Tabelle
![Page 14: Basi di Dati](https://reader035.vdocuments.pub/reader035/viewer/2022070403/56813a07550346895da1d24b/html5/thumbnails/14.jpg)
14G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
Modifiche allo Schema
Eliminazione di vincoliALTER TABLE <nome> DROP CONSTRAINT
<nome vincolo>;
EsempioALTER TABLE Studenti DROP CONSTRAINT cf;
Attenzione:molti DBMS non supportano nè DROP
COLUMN, né DROP CONSTRAINT
SQL-92 >> Dettagli e Approdondimenti >> DDL: Tabelle
![Page 15: Basi di Dati](https://reader035.vdocuments.pub/reader035/viewer/2022070403/56813a07550346895da1d24b/html5/thumbnails/15.jpg)
15G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
DDL: Viste
Vistetabelle “virtuali”definite attraverso un’interrogazionepossono essere utilizzate come tabelle reali
Due funzioni fondamentalicreazione degli schemi esterni (privatezza
dei dati o ristrutturazioni)semplificazione di interrogazioni ricorrenti
SQL-92 >> Dettagli e Approdondimenti >> DDL: Viste
![Page 16: Basi di Dati](https://reader035.vdocuments.pub/reader035/viewer/2022070403/56813a07550346895da1d24b/html5/thumbnails/16.jpg)
16G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
DDL: Viste
Creazione di visteCREATE VIEW <nome> AS <SELECT>;
Semanticala vista viene ricalcolata sulla base della sua
definizione ogni volta che viene usata Eliminazione di viste
DROP VIEW <nome>;
SQL-92 >> Dettagli e Approdondimenti >> DDL: Viste
![Page 17: Basi di Dati](https://reader035.vdocuments.pub/reader035/viewer/2022070403/56813a07550346895da1d24b/html5/thumbnails/17.jpg)
17G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
DDL: Viste
Privatezza: esami senza votiCREATE VIEW EsamiSenzaVoti AS SELECT studente, corso FROM Esami;
SELECT * FROM EsamiSenzaVoti;
SELECT * FROM Studenti, EsamiSenzaVotiWHERE matr=studente;
DROP VIEW EsamiSenzaVoti;
SQL-92 >> Dettagli e Approdondimenti >> DDL: Viste
![Page 18: Basi di Dati](https://reader035.vdocuments.pub/reader035/viewer/2022070403/56813a07550346895da1d24b/html5/thumbnails/18.jpg)
18G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
DDL: Viste
Compiti ricorrenti: professori e numeriCREATE VIEW ProfessoriNumeri AS SELECT codice, nome, cognome, numero FROM Professori JOIN Numeri ON cod=professore;
SELECT * FROM ProfessoriNumeriORDER BY cognome, nome;
SQL-92 >> Dettagli e Approdondimenti >> DDL: Viste
![Page 19: Basi di Dati](https://reader035.vdocuments.pub/reader035/viewer/2022070403/56813a07550346895da1d24b/html5/thumbnails/19.jpg)
19G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
DDL: Viste
Differenza tra tabelle e vistele tabelle sono materializzate nella base di
dati, le viste no (sono derivate dalle tabelle)schema di una vista = attributi e tipi della
selectistanza di una vista = risultato della selectle tabelle sono aggiornabili, le viste nole viste sono sempre aggiornate e consistentinon hanno impatto sulle prestazioni
SQL-92 >> Dettagli e Approdondimenti >> DDL: Viste
![Page 20: Basi di Dati](https://reader035.vdocuments.pub/reader035/viewer/2022070403/56813a07550346895da1d24b/html5/thumbnails/20.jpg)
20G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
DDL: Indici
Aggiunta di indici CREATE [UNIQUE] INDEX <nome> ON
<tabella>(<attributi>);UNIQUE: impone un vincolo di chiave sugli
attributi Esempio:
CREATE INDEX annociclo ON Studenti(anno, ciclo);
SQL-92 >> Dettagli e Approdondimenti >> DDL: Indici
![Page 21: Basi di Dati](https://reader035.vdocuments.pub/reader035/viewer/2022070403/56813a07550346895da1d24b/html5/thumbnails/21.jpg)
21G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
DDL: Indici
Annotazioniindici secondariIn alcuni sistemi (es: PgSQL) anche il tipo di
indice (BTREE, HASH, ecc.)attenzione all’impatto sulle prestazioni
Eliminazione di indiciDROP INDEX <nome>;
EsempioDROP INDEX annociclo;
SQL-92 >> Dettagli e Approdondimenti >> DDL: Indici
![Page 22: Basi di Dati](https://reader035.vdocuments.pub/reader035/viewer/2022070403/56813a07550346895da1d24b/html5/thumbnails/22.jpg)
22G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
DCL “Data Control Language”
Due funzioni principalicreazione ed eliminazione di utenticoncessione e revoca di autorizzazionisintassi non standard
UtentiCREATE USER, DROP USER
AutorizzazioniGRANT, REVOKE
SQL-92 >> Dettagli e Approdondimenti >> DCL
![Page 23: Basi di Dati](https://reader035.vdocuments.pub/reader035/viewer/2022070403/56813a07550346895da1d24b/html5/thumbnails/23.jpg)
23G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
Creazione ed Eliminazione di Utenti Esempio: in PgSQL
CREATE USER <nome> [WITH [PASSWORD ‘<password>’] [CREATEDB] [CREATEUSER]];
es: CREATE USER pguser WITH PASSWORD‘pguser’ CREATEDB;
inserimenti nella tabella pg_shadow Eliminazione di utenti
DROP USER <nome>;es; CREATE USER pguser;
SQL-92 >> Dettagli e Approdondimenti >> DCL
![Page 24: Basi di Dati](https://reader035.vdocuments.pub/reader035/viewer/2022070403/56813a07550346895da1d24b/html5/thumbnails/24.jpg)
24G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
Concessione e Revoca di privilegi
Autorizzazioninon tutti gli utenti sono autorizzati ad
accedere alle basi di datitipicamente: l’utente che crea la base di dati
e/o le tabelle (il proprietario) è autorizzato a fare tutto
gli altri utenti non possono fare niente il proprietario può concedere autorizzazioni
ad altri utenti
SQL-92 >> Dettagli e Approdondimenti >> DCL
![Page 25: Basi di Dati](https://reader035.vdocuments.pub/reader035/viewer/2022070403/56813a07550346895da1d24b/html5/thumbnails/25.jpg)
25G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
Concessione e Revoca di privilegi
Istruzione GRANTGRANT <privilegi> ON <risorsa>
TO <utente> [WITH GRANT OPTION];<privilegi>: SELECT, INSERT, DELETE,
UPDATE, REFERENCES, ALL<risorsa>: tabella o vista<utente>: nome oppure PUBLICWITH GRANT OPTION: l’utente può
trasmettere i privilegi con l’istruzione GRANT
SQL-92 >> Dettagli e Approdondimenti >> DCL
![Page 26: Basi di Dati](https://reader035.vdocuments.pub/reader035/viewer/2022070403/56813a07550346895da1d24b/html5/thumbnails/26.jpg)
26G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
Concessione e Revoca di Privilegi
EsempiGRANT ALL ON Studenti TO pguser;GRANT SELECT ON Professori TO pguser WITH GRANT OPTION;
GRANT SELECT ON EsamiSenzaVoti TO PUBLIC;
Revoca di privilegiREVOKE <privilegio> ON <risorsa>
FROM <utente>;es: REVOKE DELETE ON Studenti FROM pguser;
SQL-92 >> Dettagli e Approdondimenti >> DCL
![Page 27: Basi di Dati](https://reader035.vdocuments.pub/reader035/viewer/2022070403/56813a07550346895da1d24b/html5/thumbnails/27.jpg)
27G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
Schemi Esterni
Costruzione dello schema logicol’utente o il DBA creano la base di datil’utente o il DBA creano lo schema
Costruzione degli schemi esternil’utente o il DBA definiscono eventuali vistel’utente o il DBA definiscono le autorizzazioni
Schema esterno di un utenteinsieme delle risorse visibili all’utente
SQL-92 >> Dettagli e Approdondimenti >> DCL
![Page 28: Basi di Dati](https://reader035.vdocuments.pub/reader035/viewer/2022070403/56813a07550346895da1d24b/html5/thumbnails/28.jpg)
28G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
DML: Aggiornamenti
CancellazioniDELETE FROM <tabella> [<WHERE>];es: DELETE FROM Professori WHERE qualifica=‘supplente’;
ModificheUPDATE <tabella> SET
<attributo>=<espressione> [<WHERE>];es: UPDATE Professori SET qualifica=‘ordinario’ WHERE cod=‘VC’;
SQL-92 >> Dettagli e Approdondimenti >> DML: Aggiornamenti
![Page 29: Basi di Dati](https://reader035.vdocuments.pub/reader035/viewer/2022070403/56813a07550346895da1d24b/html5/thumbnails/29.jpg)
29G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
Inserimenti
Istruzione INSERTdue forme
Una ennupla alla voltavengono specificati i valori della ennupla
Più ennuple alla voltaviene specificata una SELECTtutto il risultato della SELECT viene inserito
nella tabella
SQL-92 >> Dettagli e Approdondimenti >> DML: Aggiornamenti
![Page 30: Basi di Dati](https://reader035.vdocuments.pub/reader035/viewer/2022070403/56813a07550346895da1d24b/html5/thumbnails/30.jpg)
30G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
Inserimenti
Una ennupla alla voltaINSERT INTO <tabella> VALUES (<valori>);
Non è necessario specificare tutti i valorilista di attributi assieme alla tabellai valori corrispondono ordinatamente agli attr.altri attributi: NULL oppure DEFAULT
EsempioINSERT INTO Corsi(cod, titolo) VALUES (‘BD’, ‘Basi di Dati’);
SQL-92 >> Dettagli e Approdondimenti >> DML: Aggiornamenti
![Page 31: Basi di Dati](https://reader035.vdocuments.pub/reader035/viewer/2022070403/56813a07550346895da1d24b/html5/thumbnails/31.jpg)
31G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
Inserimenti
Più ennuple alla volta (“copia” di ennuple)INSERT INTO <tabella> <SELECT>;tutti o parte degli attributi (corrispondenza)
Esempio:
SQL-92 >> Dettagli e Approdondimenti >> DML: Aggiornamenti
CREATE TABLE CorsiTriennale ( cod char(3) PRIMARY KEY, titolo varchar(20), docente char(4) REFERENCES Professori(cod) );
INSERT INTO CorsiTriennaleSELECT cod, titolo, docenteFROM CorsiWHERE ciclo=‘laurea tr.’;
differenza con le viste
![Page 32: Basi di Dati](https://reader035.vdocuments.pub/reader035/viewer/2022070403/56813a07550346895da1d24b/html5/thumbnails/32.jpg)
32G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
DML: Interrogazioni
Istruzione SELECTuna sintassi concreta per esprimere
operazioni dell’algebra relazionale Interrogazioni, forma generale
più blocchi SELECT correlati da operatori insiemistici, UNION, INTERSECT, EXCEPT
blocco SELECT: fatto di varie clausole
SQL-92 >> Dettagli e Approdondimenti >> DML: Interrogazioni
![Page 33: Basi di Dati](https://reader035.vdocuments.pub/reader035/viewer/2022070403/56813a07550346895da1d24b/html5/thumbnails/33.jpg)
33G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
DML: Interrogazioni
SQL-92 >> Dettagli e Approfondimenti >> DML: Interrogazioni
UNION, INTERSECT, EXCEPT
Sottointerrogazione
Sottointerrogazione
ORDER BY
FROM
WHERE
SELECT
U oppure ∩ oppure –
Sottointerrogazione
Sottointerrogazione
ORDER BY
DISTINCT
tabelle con X o
![Page 34: Basi di Dati](https://reader035.vdocuments.pub/reader035/viewer/2022070403/56813a07550346895da1d24b/html5/thumbnails/34.jpg)
34G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
DML: Interrogazioni
Blocco SELECTSELECT [DISTINCT] <proiezioni e ridenom.>FROM <tabelle, prod. cartesiani, join, alias>[WHERE <selezioni>][ORDER BY <attributi>];
Clausole obbligatorieSELECT e FROMWHERE e ORDER BY sono opzionali
SQL-92 >> Dettagli e Approdondimenti >> DML: Interrogazioni
![Page 35: Basi di Dati](https://reader035.vdocuments.pub/reader035/viewer/2022070403/56813a07550346895da1d24b/html5/thumbnails/35.jpg)
35G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
Esempi
“Titolo dei corsi tenuti dal Professor Francesco Totti, in ordine alfabetico”
SQL-92 >> Dettagli e Approfondimenti >> DML: Interrogazioni
SELECT titolo
Risultato = ORDER BY titolo (
Corsi docente=cod Professori
cognome=‘Totti’ AND nome=‘Francesco’ (
)
titolo (
)
FROM Corsi JOIN Professori ON docente=cod
WHERE cognome=‘Totti’ AND nome=‘Francesco’
ORDER BY titolo
)
![Page 36: Basi di Dati](https://reader035.vdocuments.pub/reader035/viewer/2022070403/56813a07550346895da1d24b/html5/thumbnails/36.jpg)
36G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
Esempi
“Nome e cognome degli studenti il cui tutor è Pasquale Bruno”
SQL-92 >> Dettagli e Approfondimenti >> DML: Interrogazioni
SELECT Studenti.cognome, Studenti.nome
Risultato =
Studenti Studenti.matr=studente Tutorato
)
Tutor.cognome=‘Bruno’ AND Tutor.nome=‘Pasquale’ (
)
Studenti.cognome, Studenti.nome (
FROM Studenti JOIN Tutorato ON Studenti.matr=studente
WHERE Tutor.cognome=‘Bruno’ AND Tutor.nome=‘Pasquale’
JOIN Studenti AS Tutor ON tutor=Tutor.matr
tutor=Tutor.matr (Studenti AS Tutor)
![Page 37: Basi di Dati](https://reader035.vdocuments.pub/reader035/viewer/2022070403/56813a07550346895da1d24b/html5/thumbnails/37.jpg)
37G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
DML: Interrogazioni
Suggerimenti metodologiciper scrivere l’interrogazione SQL, ragionare
sugli operatori dell’algebra necessariseguire l’ordine di scrittura delle clausole
suggerito dalla forma standardragionare sulla struttura e sul contenuto dei
risultati intermedi
SQL-92 >> Dettagli e Approdondimenti >> DML: Interrogazioni
![Page 38: Basi di Dati](https://reader035.vdocuments.pub/reader035/viewer/2022070403/56813a07550346895da1d24b/html5/thumbnails/38.jpg)
38G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
Operatori Insiemistici
Eliminano i duplicati E’ possibile mantenere i duplicati
UNION ALL, INTERSECT ALL, EXCEPT ALL
Esempio: professori e studenti
SQL-92 >> Dettagli e Approdondimenti >> DML: Interrogazioni
SELECT cognome, nomeFROM Professori
SELECT cognome, nomeFROM Studenti;
UNION
SELECT cognome, nomeFROM Professori
SELECT cognome, nomeFROM Studenti;
UNION ALL
![Page 39: Basi di Dati](https://reader035.vdocuments.pub/reader035/viewer/2022070403/56813a07550346895da1d24b/html5/thumbnails/39.jpg)
39G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
Operatori Insiemistici
Ordinamentile SELECT coinvolte non possono contenere
ORDER BYun’unica ORDER BY finale per il risultato
SQL-92 >> Dettagli e Approdondimenti >> DML: Interrogazioni
SELECT cognome, nomeFROM ProfessoriORDER BY cognome
SELECT cognome, nomeFROM Studenti;
UNION
SELECT cognome, nomeFROM Professori
SELECT cognome, nomeFROM StudentiORDER BY cognome;
UNION
(
)
![Page 40: Basi di Dati](https://reader035.vdocuments.pub/reader035/viewer/2022070403/56813a07550346895da1d24b/html5/thumbnails/40.jpg)
40G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
Clausola SELECT
DISTINCT, proiezioni, ridenominazioni Eventuali funzioni aggregative
COUNT, SUM, MAX, MIN, AVGDISTINCT
Esempio: contare le facoltà dei professori
SQL-92 >> Dettagli e Approdondimenti >> DML: Interrogazioni
SELECT COUNT(facolta)FROM Professori
SELECT COUNT(DISTINCT facolta))FROM Professori
risultato scorretto, uguale al numero dei professori
risultato corretto, uguale al numerodi facoltà distinte
![Page 41: Basi di Dati](https://reader035.vdocuments.pub/reader035/viewer/2022070403/56813a07550346895da1d24b/html5/thumbnails/41.jpg)
41G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
Espressioni
Possono comparire nella SELECT Operandi
valori degli attributi Operatori (non standard)
operatori aritmetici +, -, *, % ed altrifunzioni matematiche log, exp, sin, …funzioni su stringhe length, substring, …funzioni su date e tempi
SQL-92 >> Dettagli e Approdondimenti >> DML: Interrogazioni
![Page 42: Basi di Dati](https://reader035.vdocuments.pub/reader035/viewer/2022070403/56813a07550346895da1d24b/html5/thumbnails/42.jpg)
42G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
Espressioni
Esempio: reddito familiare in lireSELECT cognome, nome, reddito*1936.27FROM Studenti;
Esempio: media degli esami dello studente Pasquale Bruno in 110miSELECT AVG(voto)/30*110 AS media110miFROM Studenti JOIN Esami ON cod=studenteWHERE cognome=‘Bruno’ AND nome=‘Pasquale’;
SQL-92 >> Dettagli e Approdondimenti >> DML: Interrogazioni
![Page 43: Basi di Dati](https://reader035.vdocuments.pub/reader035/viewer/2022070403/56813a07550346895da1d24b/html5/thumbnails/43.jpg)
43G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
Clausola FROM
Tabelle, prodotti cartesiani, join e alias Join
FROM R [INNER] JOIN S ON A=B Altre forme di join
FROM R NATURAL JOIN SFROM R LEFT [OUTER] JOIN S ON A=BFROM R RIGHT [OUTER] JOIN S ON A=BFROM R FULL [OUTER] JOIN S ON A=B
SQL-92 >> Dettagli e Approdondimenti >> DML: Interrogazioni
![Page 44: Basi di Dati](https://reader035.vdocuments.pub/reader035/viewer/2022070403/56813a07550346895da1d24b/html5/thumbnails/44.jpg)
44G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
Join Esterni
Esempio: tutti i professori con i loro eventuali numeri telefonici
SELECT Professori.*, numeroFROM Professori LEFT OUTER JOIN Numeri ON cod=professore;
SQL-92 >> Dettagli e Approdondimenti >> DML: Interrogazioni
![Page 45: Basi di Dati](https://reader035.vdocuments.pub/reader035/viewer/2022070403/56813a07550346895da1d24b/html5/thumbnails/45.jpg)
45G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
Clausola WHERE
Condizioni di selezionecondizioni sui valori degli attributioperatori di confronto =, >, <, >=, <=, <>espressioni con operatori e funzioniconnettivi booleani AND, OR, NOT
Operatori specialiIS NULL, IS NOT NULLLIKE
SQL-92 >> Dettagli e Approdondimenti >> DML: Interrogazioni
![Page 46: Basi di Dati](https://reader035.vdocuments.pub/reader035/viewer/2022070403/56813a07550346895da1d24b/html5/thumbnails/46.jpg)
46G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
Operatore LIKE
Operatore LIKEcorrispondenza “parziale” tra valori testuali
“Pattern”sequenza di caratteri e simboli speciali%: una sequenza di 0 o più caratteri_ : un carattere qualsiasicorrisponde ad un insieme di stringhe
SQL-92 >> Dettagli e Approdondimenti >> DML: Interrogazioni
![Page 47: Basi di Dati](https://reader035.vdocuments.pub/reader035/viewer/2022070403/56813a07550346895da1d24b/html5/thumbnails/47.jpg)
47G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
Operatore LIKE
Esempi:‘B%i’: {‘Bianchi’, ‘Belli’, ‘Brutti’, ‘Bi’, …}‘p_ _ _a’: {‘palla’, ‘pasta’, ‘pista’, …}‘A_t%’: {‘Antonio’, ‘Artrite’, …}
Condizioni<attributo di tipo testo> LIKE <pattern>vera se il valore dell’attributo appartiene
all’insieme di stringhe corrispondenti
SQL-92 >> Dettagli e Approdondimenti >> DML: Interrogazioni
![Page 48: Basi di Dati](https://reader035.vdocuments.pub/reader035/viewer/2022070403/56813a07550346895da1d24b/html5/thumbnails/48.jpg)
48G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
Operatore LIKE
EsempiSELECT cognome, nomeFROM StudentiWHERE cognome LIKE ‘A%’;
SELECT *FROM CorsiWHERE titolo LIKE ‘%programmazione%’;
SQL-92 >> Dettagli e Approdondimenti >> DML: Interrogazioni
![Page 49: Basi di Dati](https://reader035.vdocuments.pub/reader035/viewer/2022070403/56813a07550346895da1d24b/html5/thumbnails/49.jpg)
49G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
Dettagli e Approfondimenti
DDL: Tabellevalori di defaultvincoli di riferimentomodifiche allo schema
DDL: Vistedefinizione e uso
DDL: Indici DCL
utenti
autorizzazionischemi esterni
DML: Aggiornamentiinserimenti
DML: Interrogazionioperatori insiemisticiSELECT: espressioniFROM: joinWHERE: op. like
SQL-92 >> Sommario
![Page 50: Basi di Dati](https://reader035.vdocuments.pub/reader035/viewer/2022070403/56813a07550346895da1d24b/html5/thumbnails/50.jpg)
50G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
SQL-92 >> Dettagli e Approfondimenti >> La Base di Dati di Esempio
CREATE TABLE Studenti ( matr integer PRIMARY KEY, cognome varchar(20) NOT NULL, nome varchar(20) NOT NULL, ciclo char(20), anno integer, relatore char(4) REFERENCES Professori(cod));
CREATE TABLE Professori ( cod char(4) PRIMARY KEY, cognome varchar(20) NOT NULL, nome varchar(20) NOT NULL, qualifica char(15), facolta char(10) );
CREATE TABLE Tutorato ( studente integer REFERENCES Studenti(matr), tutor integer REFERENCES Studenti(matr), PRIMARY KEY (studente,tutor));
CREATE TABLE Esami ( studente integer REFERENCES Studenti(matr) ON DELETE cascade ON UPDATE cascade, corso char(3) REFERENCES Corsi(cod), voto integer, lode bool, CHECK (voto>=18 and voto<=30), CHECK (not lode or voto=30), PRIMARY KEY (studente, corso));
CREATE TABLE Corsi ( cod char(3) PRIMARY KEY, titolo varchar(20) NOT NULL, ciclo char(20), docente char(4) REFERENCES Professori(cod) );
CREATE TABLE Numeri ( professore char(4) REFERENCES Professori(cod), numero char(9), PRIMARY KEY (professore,numero));
![Page 51: Basi di Dati](https://reader035.vdocuments.pub/reader035/viewer/2022070403/56813a07550346895da1d24b/html5/thumbnails/51.jpg)
51G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
SQL-92 >> Dettagli e Approfondimenti >> La Base di Dati di Esempio
Tutorato T
studente INTEGER PK, FK
tutor INTEGER PK, FK
Studenti T
matr INTEGER PK
cognome VARCHAR(20)
nome VARCHAR(20)
ciclo CHAR(20)
anno INTEGER
relatore CHAR(4) FK
Professori T
cod CHAR(4) PK
cognome VARCHAR(20)
nome VARCHAR(20)
qualifica CHAR(15)
facolta CHAR(10)
Esami T
corso CHAR(3) PK, FK
studente INTEGER PK, FK
voto INTEGER
lode BOOL
Corsi T
codice CHAR(3) PK
titolo VARCHAR(20)
ciclo CHAR(20)
docente CHAR(4) FK
Numeri T
numero CHAR(9) PK
docente CHAR(4) PK, FK
![Page 52: Basi di Dati](https://reader035.vdocuments.pub/reader035/viewer/2022070403/56813a07550346895da1d24b/html5/thumbnails/52.jpg)
52G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
SQL-92 >> Dettagli e Approfondimenti >> La Base di Dati di Esempio
cod cognome nome qualifica facolta
FT Totti Francesco ordinario Ingegneria
CV Vieri Christian associato Scienze
ADP Del Piero Alessandro supplente null
Professori
matr cognome nome ciclo anno relatore
111 Rossi Mario laurea tr. 1 null
222 Neri Paolo laurea tr. 2 null
333 Rossi Maria laurea tr. 1 null
444 Pinco Palla laurea tr. 3 FT
77777 Bruno Pasquale laurea sp. 1 FT
88888 Pinco Pietro laurea sp. 1 CV
Studenti
cod titolo ciclo docente
PR1 Programmazione I laurea tr. FT
ASD Algoritmi e Str. Dati laurea tr. CV
INFT Informatica Teorica laurea sp. ADP
Corsi
![Page 53: Basi di Dati](https://reader035.vdocuments.pub/reader035/viewer/2022070403/56813a07550346895da1d24b/html5/thumbnails/53.jpg)
53G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
SQL-92 >> Dettagli e Approfondimenti >> La Base di Dati di Esempio
studente tutor
111 77777
222 77777
333 88888
444 88888
Tutorato
studente corso voto lode
111 PR1 27 false
222 ASD 30 true
111 INFT 24 false
77777 PR1 21 false
77777 ASD 20 false
88888 ASD 28 false
88888 PR1 30 false
88888 INFT 30 true
Esami
professore numero
FT 0971205145
FT 347123456
VC 0971205227
ADP 0971205363
ADP 338123456
Numeri
![Page 54: Basi di Dati](https://reader035.vdocuments.pub/reader035/viewer/2022070403/56813a07550346895da1d24b/html5/thumbnails/54.jpg)
54G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
Termini della Licenza
Termini della Licenza
This work is licensed under the Creative Commons Attribution-ShareAlike License. To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/1.0/ or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.
Questo lavoro viene concesso in uso secondo i termini della licenza “Attribution-ShareAlike” di Creative Commons. Per ottenere una copia della licenza, è possibile visitare http://creativecommons.org/licenses/by-sa/1.0/ oppure inviare una lettera all’indirizzo Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.