1 / 67

Basi di Dati e Sistemi Informativi

Basi di Dati e Sistemi Informativi. Il Linguaggio SQL Home page del corso : http:// www.cs.unibo.it /~ difelice / dbsi /. Il Linguaggio SQL. SQL ( Structured Query Language ) e’ il linguaggio di riferimento per le basi di dati relazionali .

Download Presentation

Basi di Dati e Sistemi Informativi

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Basi di Dati e SistemiInformativi Il Linguaggio SQL Home page del corso: http://www.cs.unibo.it/~difelice/dbsi/

  2. Il Linguaggio SQL • SQL (Structured Query Language) e’ illinguaggio di riferimento per le basi di datirelazionali. • Diverse versioni del linguaggio: • SQL-86  Costrutti base • SQL-89  Integrita’ referenziale • SQL-92 (SQL2)  Modellorelazionale, struttura a livelli • SQL:1999 (SQL3)  Modello ad oggetti • SQL:2003 (SQL3)  Nuoveparti: SQL/JRT, SQL/XML • SQL:2006 (SQL3)  Estensione di SQL/XML • SQL:2008 (SQL3)  Lieviaggiunte

  3. Il Linguaggio SQL • Due componentiprincipali: • DDL (Data Definition Language) • Contieneicostruttinecessari per la creazione/modificadelloschemadella base di dati. • DML (Data Manipulation Language) • Contieneicostrutti per le interrogazioni e di inserimento/eliminazione/modifica di dati.

  4. Il Linguaggio SQL • Due componentiprincipali: • DDL (Data Definition Language) • Contieneicostruttinecessari per la creazione/modificadelloschemadella base di dati. • DML (Data Manipulation Language) • Contieneicostrutti per le interrogazioni e di inserimento/eliminazione/modifica di dati.

  5. SQL: DML Esempio di interrogazione (query)  Recuperarenome e cognomedellostudente con numero di matricolapari a 4678… STUDENTI

  6. SQL: DML Le operazioni di interrogazionevengonoimplementate dal costrutto di select. select Attributo1, … AttributoM from Tabella1, … ,TabellaN where Condizione SEMANTICA: Effettuailprodottocartesianodelle Tabella1, .., TabellaN. Da queste, estrai le righecherispettano la Condizione. Di quest’ultime, preleva solo le colonnecorrispondenti a: Attributo1, …,AttributoM.

  7. SQL: DML Nelcaso di una sola tabella: select Attributoi, Attributoj, … Attributom from Tabella where Condizione STEP1: Si selezionano le ennupledella tabellachesoddisfano la condizione … TABELLA e1 e2 e3 e4

  8. SQL: DML Nelcaso di una sola tabella: select Attributoi, Attributoj, … Attributom from Tabella whereCondizione STEP2: Si selezionano le colonne/attributispecificatidalla SELECT … TABELLA e1 e2 e3 e4

  9. SQL: DML Nelcaso di una sola tabella: select Attributoi, Attributoj, … Attributom from Tabella whereCondizione STEP3: Si costruisce la tabellarisultato … { Numero di colonnedefinitodallaclausolaSELECT { Numero di righe definitodalla clausolaWHERE

  10. SQL: DML Esempio1. Selezionareinomidegliimpiegatichelavoranonell’ufficio A. IMPIEGATI SELECT NOME FROM IMPIEGATI WHERE (UFFICIO=“A”)

  11. SQL: DML Esempio2. Selezionareicodicidegliimpiegaticheguadagnanopiu’ di 20000 euro annui. IMPIEGATI SELECT NOME FROM IMPIEGATI WHERE (STIPENDIO>20000)

  12. SQL: DML Esempio3. Selezionarenomi e cognomidegliimpiegatichelavoranonell’ufficio B e guadagnanopiu’ di 20000 euro annui. IMPIEGATI SELECT NOME,COGNOME FROM IMPIEGATI WHERE ((STIPENDIO>20000) AND (UFFICIO=“B”))

  13. SQL: DML La clausolawherespecificaqualirighedelletabelledevonocomparirenelrisultato finale. La condizionedellaclausolapuo’ contenereun’espressionebooleana, o unacombinazione di espressionimedianteglioperatoriand, or, not. SELECT CODICE FROM IMPIEGATI WHERE NOT((NOME=“Marco”) AND (UFFICIO=“A”))

  14. SQL: DML Nellaclausolawhere, e’ possibilefareconfrontitrastringheusando l’operatorelike e l’utilizzo di wildcard: _  caratterearbitrario %  sequenza di caratteriarbitraria. In questomodo, e’ possibiletrovaretutte le stringhecherispettano un certo pattern. Es: selezionareilcodice di tuttigliimpiegatiil cui nomeinizi per ‘M’, abbiauna‘r’ come terzocarattere, e termini per ‘o’. SELECT CODICE FROM IMPIEGATI WHERE (NOME LIKE ‘M_R%O)

  15. SQL: DML Nellaclausolawhere, l’operatoreinconsente di verificarel’appartenenza ad un certoinsieme di valori. Es. Trovareicodicidegliimpiegatiil cui stipendiosiacompresotrai 24000 edi 34000 euro annui. IMPIEGATI SELECT NOME FROM IMPIEGATI WHERE STIPENDIO IN (24000,34000)

  16. SQL: DML Q. Cosaaccadenellaclausolawherein caso di valori NULL… Vengonoinclusinelrisultato finale? NO! IMPIEGATI SELECT NOME FROM IMPIEGATI WHERE STIPENDIO > 20000

  17. SQL: DML In generale, SQL utilizzaunalogica a trevalori: true (T), false (F), unknown (U). EsistonoglioperatoriIS NULLedIS NOT NULL. IMPIEGATI SELECT NOME FROM IMPIEGATI WHERE (STIPENDIO > 20000) OR (STIPENDIO IS NULL)

  18. SQL: DML La clausolaselectspecificaqualicolonnedellerigheselezionatedevonocomparirenelrisultato finale. L’asterisco (*) indicatutte le colonnedellatabella. SELECT * FROM IMPIEGATI WHERE (NOME=“Marco”) AND (UFFICIO=“A”) IMPIEGATI

  19. SQL: DML E’ possibileridenominare le colonne del risultato di una query attraversoilcostruttoas. SELECT NOME as Name, Cognome as LastName FROM IMPIEGATI WHERE (NOME=“Marco”) IMPIEGATI

  20. SQL: DML E’ possibileusareespressioniaritmetiche (semplici) sui valoridegliattributi di unaSELECT. SELECT NOME as Name, Stipendio/12 as SalaryM FROM IMPIEGATI WHERE (NOME=“Marco”) IMPIEGATI

  21. SQL: DML La clausolafromspecifica la listadelletabelle cui sideveaccedere (nelcaso #tabelle>1, sieffettuailprodottocartesianodellestesse). E’ possibilespecificaredegli alias per inomidelletabelle, medianteilcostruttoas: SELECT CODICE FROM IMPIEGATI AS I WHERE (NOME=“MARCO”)

  22. SQL: DML Vediamo come funziona la SELECTsupiu’ tabelle. Es. Selezionareilnumero di telefonodell’impiegato con codice 145 . … IMPIEGATI SEDI

  23. SQL: DML SELECT TELEFONO AS TEL FROM IMPIEGATI, SEDI WHERE (UFFICIO=UFFNUM) AND (CODICE=145) … COSA FA QUESTA QUERY?? IMPIEGATI SEDI

  24. SQL: DML SELECT TELEFONO AS TEL FROM IMPIEGATI, SEDI WHERE (UFFICIO=UFFNUM) AND (CODICE=145) STEP1. Si effettuailprodottocartesianodelle due tabelle …

  25. SQL: DML SELECT TELEFONO AS TEL FROM IMPIEGATI, SEDI WHERE (UFFICIO=UFFNUM) AND (CODICE=145) STEP2. Si selezionano le righe con valoricomuninelletuetabelle …

  26. SQL: DML SELECT TELEFONO AS TEL FROM IMPIEGATI, SEDI WHERE (UFFICIO=UFFNUM) AND (CODICE=145) STEP3. Si selezionano le righe relative all’impiegato 145 …

  27. SQL: DML SELECT TELEFONO AS TEL FROM IMPIEGATI, SEDI WHERE (UFFICIO=UFFNUM) AND (CODICE=145) STEP4. Si seleziona la colonnadell’attributoTelefono …

  28. SQL: DML SELECT TELEFONO AS TEL FROM IMPIEGATI, SEDI WHERE (UFFICIO=UFFNUM) AND (CODICE=145) STEP5. Si costruisceilrisultato finale …

  29. SQL: DML Q. Cheaccade se le tabelledellaclausolafrom hannoattributi con nomiuguali? SELECT TELEFONO AS TEL FROM IMPIEGATI, SEDI WHERE (UFFICIO=UFFICIO) AND (CODICE=145) ???? ERRORE!!! IMPIEGATI SEDI

  30. SQL: DML In questicasi, sipuo’ utilizzare la notazioneNomeTabella.NomeAttributo per far riferimento ad un attributoin maniera non ambigua. SELECT TELEFONO AS TEL FROM IMPIEGATI, SEDI WHERE (IMPIEGATI.UFFICIO=SEDE.UFFICIO) AND (CODICE=145) SELECT TELEFONO AS TEL FROM IMPIEGATI AS I, SEDI AS S WHERE (I.UFFICIO=S.UFFICIO) AND (CODICE=145)

  31. SQL: DML ATTENZIONE: Il risultato di una query SQL potrebbeavererigheduplicate! SELECT NOME AS NAME FROM IMPIEGATI AS I WHERE (STIPENDIO >20000) IMPIEGATI

  32. SQL: DML Il costruttodistinct (nellaselect) consente di rimuovereiduplicatinelrisultato. Il costruttoall (nellaselect) NON rimuoveiduplicati (comportamento di default). SELECT DISTINCT NOME AS NAME FROM IMPIEGATI AS I WHERE (STIPENDIO >20000)

  33. SQL: DML Nellaclausolawherepossonocomparirepiu’ istanzedellastessatabellamedianteglialias … Es. Selezionareinomideinonni di Matteo Bianchi. GENITORI

  34. SQL: DML SELECT NOME, COGNOME FROM GENITORI, GENITORI WHERE (GENITORI.NOME=GENITORI.NOMEGEN) … ???? ERRORE!!! GENITORI

  35. SQL: DML SELECT G2.NOME, G2.COGNOME FROM GENITORI AS G1, GENITORI AS G2 WHERE (G1.NOMEGEN=G2.NOME) AND (G1.COGNOMEGEN=G2.COGNOME) AND (G1.NOME=“MATTEO”) AND (G1.COGNOME=“BIANCHI”) GENITORI

  36. SQL: DML Il costruttoorder byconsente di ordinare le righedel risultato di un’interrogazione in base al valore di un attributospecificato. order by Attributo1 [asc|desc], …, AttributoN[asc|desc] SELECT * FROM IMPIEGATI WHERE (UFFICIO=“A”) ORDER BY STIPENDIO Devecompariresempredopo la clausolawhere!

  37. SQL: DML Supponiamo di volerscrivereunaquery per contareilnumero di Impiegatichelavoranonell’ufficio A. Problema: La SELECT vista fin qui opera a livello di tuple, e non a livello di colonne. .. IMPIEGATI Da questacolonnadovremmo estrarre un solo valore!

  38. SQL: DML Glioperatoriaggregatisiapplicano a gruppi di tuple (e non tupla per tupla), e producono come risultato un solo valore. Vengono in genereinseritinellaselect, e valutatiDOPO la clausolawhere e from. count (* | [distinct|all] ListaAttributi) *  siapplicasututtigliattributi, in praticacontailnumero di righe…

  39. SQL: DML Glioperatoriaggregatisiapplicano a gruppi di tuple (e non tupla per tupla), e producono come risultato un solo valore. • sumListaAttributi • avgListaAttributi • minListaAttributi • maxListaAttributi

  40. SQL: DML Es. Contareilnumero di professoriassociatichelavoranonelDipartimento di Fisica. STRUTTURATI

  41. SQL: DML SELECT COUNT(*) AS CONTATORE FROM STRUTTURATI WHERE (TIPO=“ASSOCIATO”) AND (DIPARTIMENTO=“FISICA”)

  42. SQL: DML Es. Contare la sommacomplessivadeglistipendideglistrutturatidi Fisica. STRUTTURATI

  43. SQL: DML SELECT SUM(STIPENDIO) AS TOTALE FROM STRUTTURATI WHERE (DIPARTIMENTO=“FISICA”)

  44. SQL: DML Es. Estrarrecodice e stipendio del professoreassociatoche ha lo stipendiopiu’ alto ... ERRORE! SELECT CODICE, MAX(STIPENDIO) FROM STRUTTURATI WHERE (TIPO=“ASSOCIATO) L’operatoreaggregatorestituisceun solo valore, mentre la prima parte della select restituisceun valore per ognituplaselezionata!!! COME FARE? Con interrogazioniannidate(vedidopo …)

  45. SQL: DML Es. Contareilnumero di strutturati (ricercatori + professori) di ciascundipartimento. STRUTTURATI

  46. SQL: DML L’operatore di raggruppamentoconsente di dividere la tabella in gruppi, ognunocaratterizzata da un valorecomunedell’attributospecificatonell’operatore. SELECT ListaAttributi1 FROM ListaTabelle WHERE Condizione GROUP BY ListaAttributi2 Ognigruppo produce una sola riganelrisultato finale! ListaAttributi1 deveessere un sottoinsieme di ListaAttributi2, puo’ contenereoperatoriaggregati!

  47. SQL: DML SELECT DIPARTIMENTO AS DIP, COUNT(*) AS NUMERO FROM STRUTTURATI GROUP BY DIPARTIMENTO

  48. SQL: DML SELECT DIPARTIMENTO AS DIP, COUNT(*) AS NUMERO FROM STRUTTURATI GROUP BY DIPARTIMENTO STEP1: Partizionamentodellatabella STRUTTURATI

  49. SQL: DML SELECT DIPARTIMENTO AS DIP, COUNT(*) AS NUMERO FROM STRUTTURATI GROUP BY DIPARTIMENTO STEP1: Partizionamentodellatabella

  50. SQL: DML SELECT DIPARTIMENTO AS DIP, COUNT(*) AS NUMERO FROM STRUTTURATI GROUP BY DIPARTIMENTO STEP2: Si applica la select suciascungruppo

More Related