SQL: Structured Query Language

Slides:



Advertisements
Presentazioni simili
Interrogazioni Semplici Le operazioni di interrogazione vengono specificate per mezzo dellistruzione select select ListaAttributi from ListaTabelle [where.
Advertisements

TIPI STANDARD DI SQL BOOLEAN Valori: vero, falso CHAR(n)
Ricorsione in SQL-99.
Principale limitazione di AR e SQL-92: interrogazioni ricorsive
Calcolo Relazionale.
Structured Query Language
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità C1 Il linguaggio SQL.
Structured Query Language (SQL) Presentazione 13.1 Informatica Generale (Prof. Luca A. Ludovico)
Algebra relazionale Presentazione 12.1
Query OQL e XQUERY a confronto
SQL92 e XQuery1.0 a confronto1 SQL92 E XQUERY1.0 A CONFRONTO Università degli Studi di Modena e Reggio Emilia Facoltà di Ingegneria - Sede di Modena Corso.
Biglietti: schema E/R.
1 Biglietti: schema E/R. 2 Biglietti: albero degli attributi.
Principale limitazione di AR e SQL-92: interrogazioni ricorsive IMPIEGATO NOMENOMECAPO RossiVerdi NeriVerdi DeSio TucciDeSio DeLucaDeSio Lazio selezionare.
DML – Data Manipulation Language
Esercitazioni del Corso di Sistemi Informativi Marina Mongiello
Esercitazioni del Corso di Sistemi Informativi Marina Mongiello
G. Mecca – – Università della Basilicata Basi di Dati SQL-92 Concetti Avanzati versione 2.0 Questo lavoro è concesso in uso secondo i termini.
Algoritmo di Query Optimization. Espressione Algebrica di Query LAlgebra Relazionale può essere utilizzata come linguaggio per interrogare una base di.
SQL.
19/01/2014 Viste. 19/01/2014 Viste Le Viste Logiche o Viste o View possono essere definite come delle tabelle virtuali, i cui dati sono riaggregazioni.
1 Corso di Laurea in Biotecnologie Informatica (Basi di Dati) SQL: Data Manipulation Language (DML) Anno Accademico 2009/2010 Da: Atzeni, Ceri, Paraboschi,
Laboratorio di Basi di Dati Introduzione ad Access 2ª Parte.
Access: Query semplici
SQL: Lezione 7 Nataliya Rassadko
SQL Per la definizione di basi di dati SQL per definire ed amministrare Ogni utente puo definire una base di dati di cui diventa lamministratore potendo.
Algoritmo di Query Optimization
Esercitazione.
Duplicati Lalgebra relazionale non ammette duplicati, SQL li ammette. Quindi select Città from Persona where Cognome= Rossi estrae una lista di città in.
SELECT STATEMENT Clausola WHERE permette di limitare il numero di record da estrarre SELECT */ [DISTINCT] colonna/ espressione [alias],… FROM table [WHERE.
Viste. Cosè una vista? è possibile creare un subset logico di dati o una combinazione di dati una vista è una tabella logica basata su una tabella o su.
Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, Capitolo 4:SQL 16/10/2002.
Basi di dati Claudia Raibulet
Il Modello Relazionale
Corso di INFORMATICA anno scolastico 2009/10 Linguaggio SQL OPERATORI INSIEMISTICI IN SQL Siano due tabelle: GiochiSolitari(CodiceGioco, NomeGioco, PrezzoGioco)
Corso di INFORMATICA anno scolastico 2009/10 Linguaggio SQL IDENTIFICATORI di tabelle e attributi: stringhe di lunghezza max 18 caratteri, composte da.
Realizzato da Roberto Savino
Gerarchie Ricorsive Una gerarchia ricorsiva deriva dalla presenza di una ricorsione o ciclo (un anello nel caso più semplice) nello schema operazionale.
1 Il Linguaggio SQL Il Linguaggio SQL Prof. Lorenzo Vita, Ing. Luigi Testa.
Basi di Dati e Sistemi Informativi Il Linguaggio SQL Home page del corso:
SQL.
BIOINFO3 - Lezione 51 INSERIMENTO DEI DATI Visto come si creano le tabelle (sinora tristemente vuote), cominciamo ad occuparci di come riempirle con dei.
DATABASE Introduzione
Sistemi Informativi Insieme di “strutture” in grado di acquisire, elaborare, trasmettere ed archiviare informazioni in genere ad uso di un’organizzazione.
Informatica II – Basi di Dati (07/08) – Parte 2 Gianluca Torta Dipartimento di Informatica dell’Università di Torino
SQL Interrogazioni. 2 Interrogazioni in SQL Non esiste un SQL standard (vari dialetti) Formulazione di interrogazioni (query) è parte del Data Manipulation.
Microsoft Access (parte 5) Introduzione alle basi di dati Scienze e tecniche psicologiche dello sviluppo e dell'educazione, laurea magistrale Anno accademico:
Microsoft Access Query (II), filtri.
Basi di dati I Prof.ssa Rosalba Giugno Prof. Alfredo Pulvirenti SQL :Structured Query Language: SELECT (IV) SQL (Slide tratte in parte da da Atzeni, Ceri,
Interrogazione di una base di dati relazionale
Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le.
SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.
Algebra relazionale (III). Esempi di Interrogazioni: 3 Trovare matricola e nome dei capi i cui impiegati guadagnano tutti più di Tutti gli impiegati?
Raggruppamento in SQL Esempio di raggruppamento
Microsoft Access Query (III).
1 Basi di Dati S tructured Q uery L anguage Appunti Matteo Longhi.
Interrogazioni (parte 2)
Interrogazioni Le interrogazioni in SQL sono formulate in modo dichiarativo specificando cioè cosa si vuole ottenere e non come lo si vuole ottenere. L’interrogazione.
Basi di dati I Prof.ssa Rosalba Giugno Prof. Alfredo Pulvirenti SQL :Structured Query Language: SELECT (III) SQL (Slide tratte in parte da da Atzeni, Ceri,
Raggruppamenti e target list scorretta select padre, avg(f.reddito), p.reddito from persone f join paternita on figlio = nome join persone p on padre =
Lezione 6 - SQL. Linguaggi per DB Per interagire con le basi di dati occorre un linguaggio Linguaggio SQL (Structured Query Language), linguaggio standardizzato.
Corso integrato di Matematica, Informatica e Statistica Informatica di base Linea 1 Daniela Besozzi Dipartimento di Informatica e Comunicazione Università.
Interrogazioni Le interrogazioni in SQL sono formulate in modo dichiarativo specificando cioè cosa si vuole ottenere e non come lo si vuole ottenere. L’interrogazione.
Funzionalità del DBMS relazionale l Funzioni per –definizione della base di dati –inserimento / rimozione /aggiornamento di informazioni deve soddisfare.
Approfondimenti SQL.
Linguaggio SQL prima parte Linguaggio SQL prima parte A. Lorenzi, E. Cavalli INFORMATICA PER SISTEMI INFORMATIVI AZIENDALI Copyright © Istituto Italiano.
E. Tinelli SQL come linguaggio di manipolazione dei dati 1 DML – Data Manipulation Language.
Linguaggio SQL. Linguaggi per database La diffusione del modello relazionale ha favorito l’uso prevalente di linguaggi non procedurali: in questo modo.
Il linguaggio SQL (Structured Query Language) è il linguaggio standard per creare, manipolare e interrogare database relazionali. SQL non è case-sensitive:
Esercizi SQL Group by. CREATE TABLE dipendente (codDip CHAR(8) NOT NULL UNIQUE PRIMARY KEY, cognome CHAR(60) NOT NULL, nome CHAR(60) NOT NULL, stipendio.
Transcript della presentazione:

SQL: Structured Query Language SQL è stato definito nel 1973 ed è oggi il linguaggio universale dei sistemi relazionali Standard: SQL-84, SQL-89, SQL-92 (o SQL2), SQL:1999 (o SQL3) (ANSI/ISO) SQL-92: entry, intermediate e full SQL. SQL:1999: a oggetti. SQL: 2003 (XML, sequences, etc.) SQL: 2006 (XQuery, XML import/export, etc.) SQL: DDL, DML, query language.

SQL per interrogare: select from where SQL è un calcolo su multiinsiemi. Il comando base dell’SQL: SELECT [DISTINCT] Attributo {, Attributo} FROM Tabella [Ide] {, Tabella [Ide]} [WHERE Condizione] Semantica: prodotto + restrizione + proiezione. Un attributo A di una tabella “R x” si denota come: A oppure R.A oppure x.A

La lista degli attributi Attributi ::= * | Expr [[AS] Nuovonome] {, Expr [[AS] Nuovonome]} Expr ::= [Ide.]Attributo | Const | ( Expr ) | [-] Expr [Op Expr] | COUNT(*) | AggrFun ( [DISTINCT] [Ide.]Attributo) e AS x: dà un nome alla colonna di e AggrFun ::= SUM | COUNT | AVG | MAX | MIN AggrFun: o si usano tutte funzioni di aggregazione (e si ottiene un’unica riga) o non se ne usa nessuna.

La lista delle tabelle Le tabelle si possono combinare usando: “,” (prodotto): FROM T1,T2 Giunzioni di vario genere.

La condizione Combinazione booleana di predicati tra cui: Expr Comp Expr Expr Comp ( Sottoselect che torna un valore) [NOT] EXISTS (Sottoselect) Espr Comp (ANY | ALL) (Sottoselect) Expr [NOT] IN ( Sottoselect) (oppure IN (v1,..,vn)) Comp: <, =, >, <>, <=, >=

Sintassi della select Sottoselect: Select: SELECT [DISTINCT] Attributi FROM Tabelle [WHERE Condizione] [GROUP BY A1,..,An [HAVING Condizione]] Select: Sottoselect { (UNION | INTERSECT | EXCEPT) Sottoselect } [ ORDER BY Attributo [DESC] {, Attributo [DESC]} ]

ESEMPI: proiezione Trovare il nome, la matricola e la provincia degli studenti: SELECT Nome, Matricola, Provincia FROM Studenti Nome Matricola Provincia Isaia 171523 PI Rossi 167459 LU Bianchi 179856 LI Bonini 175649

ESEMPI: restrizione Trovare tutti i dati degli studenti di Pisa: SELECT * FROM Studenti WHERE Provincia = 'PI' Nome Matricola Provincia AnnoNascita Isaia 171523 PI 1980 Bonini 175649 Trovare la matricola, l’anno di nascita e il nome degli studenti di Pisa (Proiezione+Restrizione): SELECT Nome, Matricola, AnnoNascita FROM Studenti WHERE Provincia = 'PI' Nome Matricola AnnoNascita Isaia 171523 1980 Bonini 175649

ESEMPI: prodotto e giunzione Trovare tutte le possibili coppie Studente-Esame Trovare tutte le possibili coppie Studente - Esame sostenuto dallo studente Trovare il nome e la data degli esami per gli studenti che hanno superato l’esame di BD con 30: SELECT * FROM Studenti, Esami SELECT * FROM Studenti s, Esami e WHERE s.Matricola = e.Candidato SELECT Nome, Data FROM Studenti s, Esami e WHERE e.Materia = 'BD' AND e.Voto = 30 AND e.Candidato = s.Matricola

ESEMPI: ordinamenti e funzioni di aggregazione Studenti ordinati per Nome SELECT * FROM Studenti ORDER BY Nome; Numero di elementi di Studenti SELECT count(*) FROM Studenti; Anno di nascita minimo, massimo e medio degli studenti: SELECT min(AnnoNascita), max(AnnoNascita), avg(AnnoNascita)

Il valore null Il valore di un campo di un'ennupla può mancare per varie ragioni (ne sono state individuate 14), ad esempio perché sconosciuto (es. il reddito di una persona impiegata) oppure perché non è noto se il valore esiste (es., il reddito di una persona) . SQL fornisce il valore speciale NULL per tali situazioni. La presenza del NULL introduce dei problemi: occorrono dei predicati per controllare se un valore è/non è NULL. la condizione "reddito>8" è vera o falsa quando il reddito è uguale a NULL? Cosa succede degli operatori AND, OR e NOT? Occorre una logica a 3 valori (vero, falso e unknown). Va definita opportunamente la semantica dei costrutti. Ad es. il WHERE elimina le ennuple che non rendono vera la condizione. Nuovi operatori sono utili (es. giunzioni esterne)

Il raggruppamento SELECT ... FROM ... WHERE … GROUP BY A1,..,An [HAVING condizione] Semantica: Esegue le clausole FROM - WHERE Partiziona la tabella risultante rispetto all’uguaglianza su tutti i campi A1…An Elimina i gruppi che non rispettano la clausola HAVING Da ogni gruppo estrae una riga usando la clausola SELECT Come ottenere un solo valore da ogni gruppo: Le clausole HAVING e SELECT citano solo: espressioni su attributi di raggruppamento; funzioni di aggregazione applicate ad attributi non di raggruppamento.

Esecuzione di group by SELECT Candidato, count(*) AS NEsami, min(Voto), max(Voto), avg(e.Voto FROM Esami GROUP BY Candidato HAVING count(*) > 1; M a t e ri a C a ndid a t o V ot o D o c e n te M a t e ri a C a ndid a t o V ot o D o c e n te D A 1 20 10 D A 1 20 10 L F C 2 30 20 M TI 1 30 30 M TI 1 30 30 L F C 2 30 20 LP 2 20 40 LP 2 20 40 Candidato NEsami min(Voto) max(Voto ) Avg(Voto) 1 2 20 30 25 2 2 20 30 25

La quantificazione Tutte le interrogazioni su di una associazione multivalore vanno quantificate Non: gli studenti che hanno preso 30 (ambiguo!) ma: Gli studenti che hanno preso sempre (o solo) 30: universale Gli studenti che hanno preso qualche (almeno un) 30: esistenziale Gli studenti che non hanno preso qualche 30 (senza nessun 30): universale Gli studenti che non hanno preso sempre 30: esistenziale Studenti Esami Studenti Esami

La quantificazione Universale negata = esistenziale: Non tutti i voti sono 24 = Almeno un voto >24 (esistenziale) Esistenziale negata = universale: Non esiste voto diverso da 30 = Tutti i voti sono uguali a 30 (universale)

La quantificazione esistenziale Gli studenti con almeno un voto sopra 27; servirebbe un quantificatore eEsami-Di(s): e.Voto > 27 (stile OQL): SELECT s.Nome FROM Studenti s WHERE exists Esami e WHERE e.Candidato = s.Matricola : e.Voto > 27) Altra query esistenziale: gli studenti in cui non tutti gli esami hanno voto 30, ovvero: gli studenti in cui qualche esame ha voto diverso da 30: WHERE EXISTS Esami e WHERE e.Candidato = s.Matricola : e.Voto <> 30)

Ricordiamo la sintassi del where Combinazione booleana di predicati tra cui: Expr Comp Expr Expr Comp ( Sottoselect che torna un valore) [NOT] EXISTS (Sottoselect) Inoltre: Espr Comp (ANY | ALL) (Sottoselect) Expr [NOT] IN ( Sottoselect) (oppure IN (v1,..,vn)) Comp: <, =, >, <>, <=, >=

La quantificazione esistenziale: exists Gli studenti con almeno un voto sopra 27 stile OQL: SELECT s.Nome FROM Studenti s WHERE EXISTS Esami e WHERE e.Candidato = s.Matricola : e.Voto > 27 In SQL diventa: WHERE EXISTS (SELECT * FROM Esami e WHERE e.Candidato = s.Matricola AND e.Voto > 30)

La quantificazione esistenziale: giunzione Gli studenti con almeno un voto sopra 27, tramite EXISTS: SELECT s.Nome FROM Studenti s WHERE EXISTS (SELECT * FROM Esami e WHERE e.Candidato = s.Matricola AND e.Voto > 27) Stessa quantificazione esistenziale, tramite giunzione: FROM Studenti s, Esami e WHERE e.Candidato = s.Matricola AND e.Voto > 27

La quantificazione esistenziale: any ANY non fa nulla in più di EXISTS La solita query: SELECT s.Nome FROM Studenti s WHERE EXISTS (SELECT * FROM Esami e WHERE e.Candidato = s.Matricola AND e.Voto > 27) Si può esprimere anche tramite ANY: SELECT s.Nome FROM Studenti s WHERE s.Matricola =ANY (SELECT e.Matricola FROM Esami e WHERE e.Voto >27) WHERE 27 <ANY (SELECT e.Voto FROM Esami e WHERE e.Candidato = s.Matricola)

La quantificazione esistenziale: in IN è solo un’abbreviazione di =ANY La solita query: SELECT s.Nome FROM Studenti s WHERE s.Matricola =ANY (SELECT e.Matricola FROM Esami e WHERE e.Voto >27) Si può esprimere anche tramite IN: WHERE s.Matricola IN (SELECT e.Matricola FROM Esami e WHERE e.Voto >27)

Riassumendo La quantificazione esistenziale si fa con: Exists (il più espressivo) Giunzione =Any, >Any, <Any… IN =Any, >Any, <Any, IN,… non aggiungono potere espressivo, ma possono semplificare la scrittura delle query Il problema vero è: non confondere esistenziale con universale!

La quantificazione universale Gli studenti che hanno preso solo 30 Errore comune (e grave): SELECT s.Nome FROM Studenti s, Esami e WHERE e.Candidato = s.Matricola AND e.Voto = 30 In stile OQL (eEsami-Di(s): e.Voto = 30): FROM Studenti s WHERE FOR ALL Esami e WHERE e.Candidato = s.Matricola : e.Voto = 30

La quantificazione universale Prima scrivete: SELECT s.Nome FROM Studenti s WHERE FOR ALL Esami e WHERE e.Candidato = s.Matricola : e.Voto = 30) Poi traducete eE.p in eE. p (e. eEp = e. (eE p) = e. eE  p = e. (eEp) = eE. p ): SELECT s.Nome FROM Studenti s WHERE NOT EXISTS Esami e WHERE e.Candidato = s.Matricola : e.Voto <> 30 In SQL diventa: WHERE NOT EXISTS (SELECT * FROM Esami e WHERE e.Candidato = s.Matricola AND e.Voto <> 30)

La quantificazione universale con all Consideriamo la solita query (studenti con tutti 30): SELECT s.Nome FROM Studenti s WHERE FOR ALL Esami e WHERE e.Candidato = s.Matricola : e.Voto = 30) Poiché la condizione ‘e.Voto = 30’ è semplice, la possiamo esprimere con ALL: WHERE 30 =ALL (SELECT e.Voto FROM Esami e WHERE e.Candidato = s.Matricola ) Naturalmente, avremmo potuto anche usare WHERE NOT(30 <> ANY (SELECT…

La quantif. universale e gli insiemi vuoti Trovare gli studenti che hanno preso solo trenta: SELECT s.Nome FROM Studenti s WHERE NOT EXISTS (SELECT * FROM Esami e WHERE e.Candidato = s.Matricola AND e.Voto <> 30) Perché trovo anche Rossi? Cosa cambia se invece di NOT EXISTS uso <>ANY, =ALL, oppure NOT IN? Mater. Candidato Voto RC 1 30 IS 2 20 Nome Matricola Provincia AnnoNascita Bianco 1 PI 1970 Verdi 2 1980 Rossi 3

Gli insiemi vuoti Lo studente senza esami non soddisfa nessuna interrogazione esistenziale, ma soddisfa tutte quelle universali Se voglio gli studenti che hanno preso solo trenta, e hanno superato qualche esame: SELECT s.Nome FROM Studenti s WHERE NOT EXISTS (SELECT * FROM Esami e WHERE e.Candidato = s.Matricola AND e.Voto <> 30) AND EXISTS (SELECT * FROM Esami e WHERE e.Candidato = s.Matricola) (La combinazione di exists e for all si può fare anche con la GROUP BY: Studenti-Join-Esami GROUP BY s.Matricola, s.Nome HAVING min(e.Voto)=30)

Esercizio: gli elementi non associati Per ogni studente, trovare il numero di esami, che può essere 0 Problema analogo (giunzione esterna): Stampare un elenco che combina i dati di studenti ed esami, aggiungendo un ‘esame nullo’ agli studenti senza esami: Nome Matricola Bianco 1 Verdi 2 Rossi 3 Nome Matricola Sigla Voto Bianco 1 RC 30 Verdi 2 IS 20 Rossi 3 Sigla Candidato Voto RC 1 30 IS 2 20

SQL per modificare i dati INSERT INTO Tabella [ (A1,..,An)] ( VALUES (V1,..,Vn) | AS Select ) UPDATE Tabella SET Attributo = Expr, …, Attributo = Expr WHERE Condizione DELETE FROM Tabella WHERE Condizione

Esecuzione dei comandi SQL SELECT s.Nome FROM Studenti s, Esami e WHERE s.Matricola = s.Candidato AND e.Voto > 25 AND s.Matricola > 30000 Studenti Esami Voto>25 Matricola>30000 Nome Candidato = Matricola Project({“Nome”}) Nome Candidato = Matricola NestedLoop(“Candidato”,”Matricola”) Filter(“Matricola>30000”) Matricola>30000 Voto>25 IndexFilter(Idx,”Voto < 25”) Studenti Esami TableScan(“Studenti”) Esami Albero logico Trasformazione Piano di accesso