Transcription of Linguaggio SQL - cs.unibo.it
1 1 Il Linguaggio SQL (Structured Query Language) il Linguaggio standard per la definizione, manipolazione e interrogazione delle basi di dati relazionaliLinguaggio SQLcodicenome1 Reti di Calcolatori2 Sistemi Operativiesami3 Programmazione4 Analisi Matematicacodicematricolaannovoto1112006 30413200728sostenuti21320063031120071811 3200730matricolanomecognomecittaanno11ma rcobinibologna198513laurasicurorimini198 4studenti2 Come il DBMS processa una query SQL di tipo SELECT per ottenere il risultato 1. Per utilizzare piu tabelle congiuntamente (join) si esegue il prodotto cartesianodelle tabelle coinvolte (se c'e' una sola tabella, il prodotto cartesiano non viene effettuato) 2.
2 Si selezionanole righe (tuple) sulla base del predicato della clausola Where 3. Si proiettasugli attributi della target list Linguaggio SQL (Structured QueryLanguage) il Linguaggio standard per la definizione, manipolazione e interrogazione delle basi di dati relazionaliSELECT nome, cognome Target listFROM studenti Clausola FromWHERE citta= bologna ; Clausola WhereSemantica di Query SQL SELECT/FROM/WHEREP rodotto Cartesiano,Tabelle da utilizzareFase di SelezioneFase di Proiezione3Un esempio di come si ottiene il risultato di Query selectsostenuticodicematricolaannovoto11 1200626413200728213200630311200718113200 730studentimatricolanomecognomecittaanno 11marcobinibologna198513laurasicurorimin i1984 SELECT nome, cognomeFROM studenti, sostenutiWHERE voto=30 AND.
3 Prodotto Cartesiano,Tabelle da utilizzareFase di SelezioneFase di Proiezionestudentisostenutimatricolanome cognomecittaannocodicematricolaannovoto1 1marcobinibologna198511120062611marcobin ibologna198541320072811marcobinibologna1 98521320063011marcobinibologna1985311200 71811marcobinibologna198511320073013laur asicurorimini198411120062613laurasicuror imini198441320072813laurasicurorimini198 421320063013laurasicurorimini19843112007 1813laurasicurorimini19841132007300. la query Selectsi cercano nome e cognome degli studenti(anche ripetuti)
4 Che hannoottenuto dei voti le tabelle da usare per il il prodotto cartesianodelle tabelle, una tabella le cui righe sono formate dall unione di una riga di ciascuna tabella da utilizzare, Ciascuna riga di ciascuna tabella viene unita a ciascuna riga dell altra tabella4Un esempio di come si ottiene il risultato di Query la selezione, applico la prima condizione della clausola Where voto=30eliminando tutte le righe conVoto diverso da selezioneapplico la seconda condizione della Proiezione, considerosolo gli attributi (campi)
5 Nome e Risultato finalenomecognomelaurasicurolaurasicuros tudentisostenutimatricolanomecognomecitt aannocodicematricolaannovoto13laurasicur orimini198421320063013laurasicurorimini1 984113200730studentisostenutimatricolano mecognomecittaannocodicematricolaannovot o11marcobinibologna198511120062611marcob inibologna198541320072811marcobinibologn a198521320063011marcobinibologna19853112 0071811marcobinibologna198511320073013la urasicurorimini198411120062613laurasicur orimini198441320072813laurasicurorimini1 98421320063013laurasicurorimini198431120 071813laurasicurorimini1984113200730stud entisostenutimatricolanomecognomecittaan nocodicematricolaannovoto11marcobinibolo gna198521320063011marcobinibologna198511 320073013laurasicurorimini19842132006301 3laurasicurorimini1984113200730 Formato Query SQL di tipo Select Select:SELECT Lista_Attributi_o_EspressioniFROM Lista_Tabelle[WHERE Condizioni_Semplici][GROUP BY Lista_Attributi_Di_Raggruppamento][HAVIN G Condizioni_Aggregate][ORDER BY Lista_Attributi_Di_Ordinamento]13DB-Impi egatiImpiegatoDipartimento14 Target list: selezione senza proiezioneSELECT *FROM ImpiegatoWHERE Cognome = Rossi 15 Target list: selezione con proiezioneSELECT Nome, Cognome, StipendioFROM ImpiegatoWHERE Cognome = Rossi 16 Target list: proiezione senza selezioneSELECT Nome, CognomeFROM Impiegato17 Target list: proiezione con/senza duplicatiSELECT CognomeFROM ImpiegatoSELECT DISTINCT CognomeFROM Impiegato18 Target list: espressioniSELECT Stipendio/12 As StipendioMensileFROM ImpiegatoWHERE Cognome = Bianchi WHERE: disgiunzioneSELECT Nome, CognomeFROM ImpiegatoWHERE Dipart = Amministrazione ORWHERE Dipart = Produzione 20 Clausola WHERE: condizione complessa (uso di parentesi)SELECT NomeFROM ImpiegatoWHERE Cognome = Rossi ANDWHERE (Dipart = Amministrazione ORWHERE Dipart = Produzione )NomeMario21 Clausola WHERE: operatore INSELECT NomeFROM ImpiegatoWHERE Cognome = Rossi ANDWHERE Dipart IN ( Amministrazione ,WHERE Produzione )NomeMario22 Clausola WHERE: operatore LIKESELECT *FROM ImpiegatoWHERE Cognome LIKE _o%i _Un carattere qualsiasi%Un stringa qualsiasi23 Clausola WHERE: operatore BETWEENSELECT *FROM ImpiegatoWHERE Stipendio BETWEEN 40 AND 4524 Clausola WHERE: valori nulli Impiegati che hanno o potrebbero avere uno stipendio minore di 50 : Vogliamo anche gli stipendi nulli 25 Clausola WHERE: valori nulliSELECT *FROM Impiegati_con_nulliWHERE Stipendio < 50 or Stipendio IS NULL26 Ordinamento del risultato A differenza del modello relazionale, in cui le tuple non sono ordinate, le righe di una tabella possono esserlo - anche se solo al momento della presentazione all utente.
6 Talvolta la possibilit di ordinare il risultato di un interrogazione importante. Ad esempio, se si voglio gli stipendi in ordine dal minore al maggiore. SQL mette a disposizione la clausola ORDER BY27 Ordinamento del risultato: esempioSELECT Cognome, Nome, StipendioFROM ImpiegatoWHERE Dipartimento LIKE Amm% ORDER BY Stipendio DESC, Cognome ASCdiscendenteascendente (default)28 JOIN Implicito Il JOIN un operatore fondamentale, in quanto permette di utilizzare congiuntamente le informazioni contenute in pi tabelle Un JOIN corrisponde a un prodotto cartesiano seguito da una selezione E quindi possibile realizzare un JOIN tramite gli statement SQL visti finora, cio FROM e WHERE, che permettono di compiere prodotti cartesiani e selezioni Esistono anche operatori specifici.
7 Ma non li vedremo29DB-PersonePersoneMaternitaPater nita30 Prodotto cartesiano Il prodotto cartesiano di due o pi tabelle si ottiene riportando le tabelle nella clausola From, senza clausola WhereMadreFiglioLuisaMariaLuisaLuigiAnna OlgaPadreFiglioSergioFrancoLuigiOlgaPadr eFiglioMadreFiglio1 SergioFrancoLuisaMariaSergioFrancoLuisaL uigiSergioFrancoAnnaOlgaLuigiOlgaLuisaMa riaLuigiOlgaLuisaLuigiLuigiOlgaAnnaOlga =SELECT *FROM Pat, MatPatMat31 JOIN Implicito Query: Padre e madre di ogni persona SELECT Padre, , MadreFROM Paternita, MaternitaWHERE = : Selezione, Proiezione e JOIN Query: I padri di persone che guadagnano pi di venti milioni SELECT distinct PadreFROM Paternita, PersoneWHERE Figlio = Nome AND Reddito > 2033 Self-JOIN Nel JOIN tra una tabella e se stessa occorre necessariamente utilizzare dei sinonimi (alias) per distinguere le diverse occorrenze della tabella Query: Le persone che guadagnano pi dei rispettivi padri.
8 Mostrare nome, reddito e reddito del padre SELECT , , Paternita, Persone F, Persone PWHERE Figlio = AND = Padre AND > cosa, con ridenominazione del risultato Query: Le persone che guadagnano pi dei rispettivi padri. Mostrare nome, reddito e reddito del padre SELECT Figlio, AS Reddito, AS RedditoPadre,FROM Paternita, Persone P, Persone FWHERE Figlio = AND = Padre AND > aggregati36DB-ImpiegatiImpiegatoDipartim ento37 Necessit di operatori su tuple Nelle