SQL e algebra relazionale

Documenti analoghi
Documentazione SQL. Argomento Sintassi Note Definizione schema create schema [NomeSchema] [[authorization] Autorizzazione] {DefElementoSchema}

SQL quick reference. piccolo manuale di riferimento dei principali comandi SQL (prof. Claudio Maccherani, Perugia, 2013)

Linguaggio SQL seconda parte

SQL. SQL: "storia. Sviluppato nella metà degli anni settanta (1974) presso il laboratorio di ricerca IBM di S.Josè. Dal 1983 ca. "standard di fatto"

Structured. Language. Basi di Dati. Introduzione. DDL: Data Definition Language. Tipi di dato. Query. Modifica dei Dati

SQL. SQL: una visione panoramica. SQL: "storia" Definizione dei dati

Linguaggio SQL. studenti matricola nome cognome citta anno 11 marco bini bologna laura sicuro rimini 1984 esami codice

Capitolo 4. Soluzione: Soluzione: Create domain STRING as character varying (256) default sconosciuto not null

SQL. Structured Query Language 1974: SEQUEL by IBM 1981: SQL by IBM : SQL ISO 9075:1992 SQL:1999 SQL:2003

SQL Sintassi Dei Comandi

SQL (STRUCTURED QUERY LANGUAGE)

Storia. Corso di Basi di Dati Spaziali. Componente DDL. Funzionalità. Esempio. Creazione di schema. Linguaggi: SQL. Storia:

Query. Query (Interrogazioni) SQL SQL. Significato dell interrogazione. Sintassi

Caratteristiche dei linguaggi per Database

Definizione di domini

Il linguaggio SQL: raggruppamenti. Versione elettronica: SQLb-gruppi.pdf

Interrogazioni nidificate

SQL [2] Concetti avanzati di SQL. Esempi di interrogazioni


Esercitazione query in SQL L esercitazione viene effettuata sul database viaggi e vacanze che prevede il seguente modello E/R:

SQL. Il nome sta per Structured Query Language Le interrogazioni SQL sono dichiarative

OR true null false true true true true null true null null false true null false NOT

<Nome Tabella>.<attributo>

Basi di Dati: Corso di laboratorio

Prova Scritta di Basi di Dati

CAPITOLO 4 ESERCIZI SU SQL

Il linguaggio SQL: le viste

Il linguaggio SQL: le basi

Basi di Dati: Corso di laboratorio

SELECT s.nome, e.data Studenti s, Esami e WHERE e.materia = 'BD' AND e.voto = 30 AND e.matricola = s.matricola

Esercizio 4.1. Soluzione:

Esempio di database relazionale con l utilizzo del prodotto MySQL

Interrogazioni con ANY e ALL. Operatori ANY e ALL. Interrogazioni con ANY e ALL. Interrogazioni con ANY e ALL. Interrogazioni con ANY e ALL

Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, SQL

Il linguaggio SQL: query innestate

Algebra relazionale. Algebra relazionale. Operatori dell algebra relazionale. Operatori dell algebra relazionale. Algebra relazionale.

Informatica. Sintassi. Interrogazioni in SQL. Significato dell interrogazione. Tabella Impiegato. Basi di dati parte 4 SQL

SQL: DDL, VI, Aggiornamenti e Viste

Interrogazioni nidificate

SQL Avanzato. Interrogazioni e il valore NULL. Interrogazioni complesse, trigger, viste e modifiche dello schema. Giorgio Giacinto 2015

Domini elementari in SQL

Basi di Dati. Il Linguaggio SQL. K. Donno - Il Linguaggio SQL

SQL (STRUCTURED QUERY LANGUAGE)

Il linguaggio SQL: le basi. Versione elettronica: SQLa-basi.pdf

Interrogare una base di dati: algebra relazionale e SQL. Savino Castagnozzi Giorgio Macauda Michele Meomartino Salvatore Picerno Massimiliano Sartor

SQL: Structured Query Language. T. Catarci, M. Scannapieco, Corso di Basi di Dati, A.A. 2008/2009, Sapienza Università di Roma

Esempi SQL con Access. Orazio Battaglia

D B M G. Linguaggio SQL: fondamenti. Istruzione SELECT: fondamenti. Elena Baralis 2007 Politecnico di Torino 1. Struttura di base

Istruzioni DML di SQL

MAX, SUM, AVG, COUNT)

Corso di Basi di Dati A.A. 2015/2016

Basi di dati. Il Linguaggio SQL. K. Donno - Il Linguaggio SQL

Corrado Aaron Visaggio 1. Esercizio

SQL: Concetti Base -Prima Parte-

Elena Baralis 2007 Politecnico di Torino 1

CAPITOLO 5: DATABASE INTRODUZIONE

SQL terza parte D O C E N T E P R O F. A L B E R T O B E L U S S I. Anno accademico 2010/11

SQL Laboratorio di Basi di Dati a.a. 2002/2003

SQL. Storia un po piu in dettaglio. SQL: "storia" Tre livelli per SQL-2. Standard, dialetti, mercato

Linguaggio SQL. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

SQL: concetti base SQL. Definizione dei dati in SQL. SQL: "storia"

Sommario. Introduzione... 13

Linguaggio SQL Descriviamo la notazione usata nel seguito:

Il linguaggio SQL. ing. Alfredo Cozzi 1

Basi di Dati Corso di Laura in Informatica Umanistica

Il linguaggio SQL Basi di dati 1. Il linguaggio SQL. Angelo Montanari. Dipartimento di Matematica e Informatica Università di Udine

ESERCIZI SQL. Esercizio 1

Corso di Laurea in Ingegneria Informatica Algoritmi e basi di dati Modulo Basi di dati a.a

Basi di Dati. Esercitazione 3: Interrogazioni in SQL. K. Donno - Interrogazioni in SQL

Basi di Dati: Corso di laboratorio

DATABASE PER IL WEB. Programmazione Web 1

Esercizio 1. Cognome e nome:... Matricola:...

SQL - Sottointerrogazioni

Il linguaggio SQL. Evoluzione del linguaggio. I linguaggi dentro SQL. I dialeu SQL. U@lizzo di SQL SQL. A. Ferrari 1

Elena Baralis 2007 Politecnico di Torino 1

LABORATORIO di INFORMATICA

Parte III. L algebra relazionale

Introduzione. Structured Query Language (SQL) Inquadramento. Evoluzione dello standard SQL - 1. La situazione attuale

Basi di dati. SQL: concetti base

Il linguaggio SQL. Il linguaggio SQL. Il linguaggio SQL. Il linguaggio SQL. Il linguaggio SQL: fondamenti. Il linguaggio SQL

Il linguaggio SQL: DML di base. Versione elettronica: 04.2.SQL.DMLbase.pdf

Il linguaggio SQL: DML di base

Create la tabella Dipendenti:

Operazioni sui database

SQL IL LINGUAGGIO DI INTERROGAZIONE

Basi di Dati. Esercitazione 2: Interrogazioni in SQL. K. Donno - Interrogazioni in SQL

Basi di Dati. S Q L Lezione 2

Esercitazione su SQL

Esercitazione: Interrogazioni SQL

16. IL LINGUAGGIO SQL

3 SQL : Interrogazioni

DDL, VINCOLI D INTEGRITÁ, AGGIORNAMENTI E VISTE. SQL è più di un semplice linguaggio di interrogazione

APPUNTI DELLA LEZIONE DI DATABASE DEL 26/10/2016 Studenti: Marco D'Amato, Adriano Luigi Piscopello Professore: Mario Bochicchio

Il sistema informativo deve essere di tipo centralizzato e accessibile mediante un computer server installato nella rete locale dell albergo.

Corso di Basi di Dati A.A. 2013/2014

Domande utili alla preparazione dell orale di Informatica all Esame di Stato

ACCESS Esercitazione (query complesse) Ing. Cosimo Orlacchio

SQL come linguaggio di interrogazione. Basi di dati. Interrogazioni SQL. Interpretazione algebrica delle query SQL

Il linguaggio SQL. Massimo Paolucci DIST Università di Genova. SQL: Structured Query Language

Il linguaggio SQL. è di fatto lo standard tra i linguaggi per la gestione di data base relazionali.

Transcript:

SQL e algebra relazionale Il linguaggio SQL consente una maggiore espressività dell algebra relazionale grazie a costrutti che permettono: di definire join più sofisticati di ordinare le righe dei risultati delle interrogazioni in base a criteri definiti dall utente di applicare operatori aggregati per ottenere conteggi, minimi, massimi, medie e somme. di raggruppare le righe della tabella-risultato prima di applicare gli operatori aggregati Inoltre è possibile: applicare operatori insiemistici nidificare le interrogazioni Structured Query Language 1

Join esplicito In SQL-2 è possibile dichiarare esplicitamente la presenza di un join in una operazione di selezione SQL select I.Nome, Cognome, Citta as as II inner join Dipartimento as as D on on Dipartimento = D.Nome L inner join coincide con il thetajoin. Altri tipi di join consentiti sono: right [ outer ] join: il risultato ha tutte le tuple della tabella di destra, eventualmente completate con valori nulli left [ outer ] join: lo stesso per la tabella di sinistra full [ outer ] join: tutte le tuple si riflettono nel risultato Structured Query Language 2

Esempio di join esplicito Date le relazioni: Guidatore(Nome, Cognome, NroPatente) Automobile(Targa, Marca, Modello, NroPatente) Domanda Trovare i i guidatori con le le automobili associate mantenendo tutti i i guidatori della tabella SQL select * from Guidatore left join Automobileon (Guidatore.NroPatente = Automobile.NroPatente) Structured Query Language 3

Costrutto order by Sintassi order by Attributo [ < asc desc > ] {, Attributo [ < asc desc > ] } Domanda SQL Ordinare per stipendio e, e, secondariamente, per cognome il il personale amministrativo select Cognome, Nome, Stipendio where Dipartimento like Amm% order by by Stipendio desc, Cognome Risultato Cognome Nome Stipendio Rossi Mario 45 Borroni Paola 40 Verdi Giuseppe 40 Structured Query Language 4

Costrutto count E un operatore aggregato che permette di contare le tuple del risultato di una interrogazione Sintassi 1 count (*) Domanda Determinare il il numero degli impiegati del dipartimento Produzione SQL Risultato select count(*) where Dipartimento = Produzione 22 Structured Query Language 5

Costrutto count (2) Sintassi 2 count ( [ < distinct all > ] ListaAttributi ) Domanda 1 SQL 1 Trovare il il numero di di valori diversi per gli gli stipendi degli impiegati select count (distinct Stipendio) Domanda 2 SQL 2 Trovare il il numero delle persone che hanno sia il il cognome che il il nome specificato select count (all Nome,Cognome) Structured Query Language 6

Altri operatori aggregati Ammettono tutti una singola sintassi: Sintassi Operatore ( [ < distinct all > ] AttrEspr ) Dove Operatore può essere: sum, max, min o avg, con ovvio significato Esempio 1 select sum(stipendio) where Dipartimento= Produzione Esempio 2 select max(stipendio), avg(stipendio), min(stipendio) Structured Query Language 7

Interrogazione errata Si consideri la seguente interrogazione: Interrogazione errata select Cognome, Nome, max(stipendio), Dipartimento where Impiegato.Dipartimento = Dipartimento.Nome and citta = Milano Cosa sarebbe successo se al posto di max ci fosse stato sum? Non si possono mischiare nella stessa target list operatori aggregati ed espressioni a livello di riga, come per esempio il nome di un attributo (unica eccezione: il costrutto group by) Structured Query Language 8

Costrutto group by Ha lo scopo di applicare gli operatori aggregati su sottoinsiemi di righe Esempio select Dipartimento, sum(stipendio) as as SommaStipendi group by by Dipartimento Risultato Dipartimento SommaStipendi Amministrazione 125 Produzione 82 Distribuzione 45 Direzione 153 Structured Query Language 9

group by: semantica Innanzi tutto viene fatta una proiezione sugli attributi interessati dagli operatori aggregati e dal costrutto group by Risultato intermedio Dipartimento Stipendio Amministrazione 45 Produzione 36 Amministrazione 40 Distribuzione 45 Direzione 80 Direzione 73 Amministrazione 40 Produzione 46 E necessario che eventuali attributi della target list non oggetto di aggregazione compaiano nella group by Structured Query Language 10

group by: semantica (2) Quindi si raggruppano le tuple della relazione in base al valore degli attributi della group by Risultato intermedio Dipartimento Stipendio Amministrazione 45 Amministrazione 40 Amministrazione 40 Produzione 36 Produzione 46 Distribuzione 45 Direzione 80 Direzione 73 Structured Query Language 11

group by: semantica (3) Infine si applica l operatore aggregato su ogni gruppo e si rinominano le colonne se richiesto Risultato finale Dipartimento SommaStipendi Amministrazione 125 Produzione 82 Distribuzione 45 Direzione 153 L operatore aggregato produce un solo valore Structured Query Language 12

Interrogazione errata Interrogazione errata select Dipartimento, count(*), Citta, Dipartimento where Impiegato.Dipartimento = Dipartimento.Nome group by by Dipartimento L attributo Citta compare nella target list ma non è oggetto di aggregazione e non compare nella group by Interrogazione giusta select Dipartimento, count(*), Citta, Dipartimento where Impiegato.Dipartimento = Dipartimento.Nome group by by Dipartimento, Citta Structured Query Language 13

group by con predicati Esempio select Dipartimento, sum(stipendio) as as SommaStipendi group by by Dipartimento having sum(stipendio) > 100 Risultato Dipartimento SommaStipendi Amministrazione 125 Direzione 153 Generalmente, per chiarezza, solo i predicati contenenti operatori aggregati si mettono nella clausola having, gli altri si mettono nella clausola where Structured Query Language 14

Esempio di having Domanda Trovare i i dipartimenti per cui la la media degli stipendi degli impiegati che lavorano nell ufficio 20 20 è superiore a 25 25 milioni SQL select Dipartimento where Ufficio = 20 20 group by by Dipartimento having avg(stipendio) > 25 25 Risultato Dipartimento Produzione Amministrazione Structured Query Language 15

Sintassi della select Considerando tutti i costrutti introdotti finora l istruzione select ha la seguente sintassi: Sintassi select ListaAttributiOEspr from ListaTabelle [ where CondizioniSemplici ] [ group by ListaAttributiRaggruppamento [ having CondAggregate ] ] [ order by ListaAttributiOrdinamento ] Structured Query Language 16

Operatori insiemistici Sintassi IstruzioneSelect { < union intersect exept > [ all ] IstruzioneSelect } union, intersect e exept corrispondono rispettivamente ad unione intersezione e differenza tra gli insiemi ottenuti con le istruzioni select Gli operatori insiemistici eliminano di default di duplicati. Se si vogliono conservare i duplicati occorre inserire la particella all Structured Query Language 17

Operatori insiemistici: esempio Domanda Tutte le le stringhe che compaiono come nomi o cognomi degli impiegati SQL select Nome union select Cognome Structured Query Language 18

Operatori insiemistici: altro esempio Domanda SQL Tutte le le stringhe, anche ripetute, che compaiono come nomi o cognomi degli impiegati dei dipartimenti diversi dall amministrazione select Nome where Dipartimento <> <> Amministrazione union all all select Cognome where Dipartimento <> <> Amministrazione Structured Query Language 19

Interrogazioni nidificate Domanda SQL Trovare gli gli impiegati che lavorano in in dipartimenti situati a Firenze select * where Dipartimento = any (select Nome from Dipartimento where Citta = Firenze ) Si possono utilizzare gli operatori di confronto (=,<>,<,>,<=,>=) con le particelle any ed all (il valore di default è any) in particolare: = any si può sostituire con in <> all si può sostituire con not in Structured Query Language 20

Formulazioni alternative Domanda SQL SQL Trovare gli gli impiegati che hanno lo lo stesso nome di di un un impiegato del dipartimento produzione select I1.Nome as as I1, I1, Impiegato as as I2 I2 where I1.Nome = I2.Nome and I2.Dipartimento = Produzione select Nome where Nome = any (( select Nome where Dipartimento = Produzione ) Structured Query Language 21

Formulazioni alternative (2) Domanda Trovare il il nome dei dipartimenti in in cui non lavorano persone di di cognome Rossi SQL select Nome from Dipartimento except select Dipartimento where Cognome = Rossi SQL select Nome from Dipartimento where Nome <> <> all all (( select Dipartimento where Cognome = Rossi ) Structured Query Language 22

Formulazioni alternative (3) Domanda Trovare il il dipartimento in in cui lavora l impiegato che percepisce lo lo stipendio maggiore SQL select Dipartimento where Stipendio = (( select max (Stipendio) )) SQL select Dipartimento where Stipendio >= >= all all (( select Stipendio )) Structured Query Language 23

Operatore logico exists Data la relazione: Persona(CF, Nome, Cognome, Citta) Domanda Trovare le le persone che hanno degli omonimi SQL select * from Persona as as P where exists (( select * from Persona P1 P1 where P1.Nome = P.Nome and P1.Cognome = P.Cognome and P1.CF <> <> P.CF )) Structured Query Language 24

Inserimento di righe Sintassi insert into NomeTabella [ ( ListaAttributi ) ] < values ( ListaValori ) ( IstruzioneSelect ) > Esempio insert into Dipartimento (Nome, Citta) values ( Produzione, Torino ) Esempio insert into ProdottiMilanesi (( select Codice, Descrizione from Prodotto where LuogoProd = Milano ) Structured Query Language 25

Cancellazione di righe Sintassi delete from NomeTabella [ where Condizione ] Es. delete from Dipartimento where Nome = Produzione Esempio Es. delete from Dipartimento where Nome not in in (( select Dipartimento )) delete from Dipartimento Cancella tutte le righe (ma lo schema della relazione rimane) Structured Query Language 26

Modifica di righe Sintassi update NomeTabella set Attributo = < Espressione Select null default > {, Attributo = < Espressione Select null default > } [ where Condizione ] Esempio update Impiegato set Stipendio = Stipendio * 1.1 where Dipartimento = Amministrazione Structured Query Language 27

Vincoli espressi con check Sintassi check ( Condizione ) Esempio create table Impiegato (( Matricola char(6) primary key, Cognome char(20), Nome char(20), Dipartimento char(20), Superiore char(6), check (( Dipartimento = (( select Dipartimento as as II where I.Matricola = Superiore)) )) Structured Query Language 28

Asserzioni Le asserzioni sono vincoli definiti a livello di schema tramite il costrutto check Sintassi create assertion NomeAsserzione check ( Condizione ) Esempio create assertion AlmenoUnImpiegato check (( 1 <= <= (( select count(*) from Impiegati) )) Vincola la relazione Impiegati ad avere almeno un elemento Structured Query Language 29

Comando alter alter domain alter domain NomeDominio < set default ValoreDef drop default add constraint DefVincolo drop constraint NomeVincolo > alter table alter table NomeTabella < alter column NomeAttr < set default ValoreDef drop default > add constraint DefVincolo drop constraint NomeVincolo add column DefAttr drop column NomeAttr > Structured Query Language 30

Comando drop Sintassi drop < schema domain table assertion > Nome [ < restrict cascade > ] L opzione restrict è quella di default e impone che il comando non venga eseguito in presenza di oggetti non vuoti Con l opzione cascade: Quando si rimuove un dominio, tutti gli attributi che usano quel dominio rimangono associati alla stessa definizione di tipo Quando si rimuove una tabella, tutti i riferimenti a quella tabella vengono rimossi Structured Query Language 31

Gestione di indici Non fanno parte dello standard SQL Sintassi Sin. create [ unique ] index NomeIndice on NomeTabella ( ListaAttributi ) drop index NomeIndice Esempio create index NomeCittaIdx on on Impiegato(Cognome,Citta) L ordine degli attributi è significativo Es. drop index NomeCittaIdx Structured Query Language 32

Esercizio Dato il seguente schema: Aeroporto(Citta, Nazione, NunPiste) Volo(IdVolo, GiornoSett, CittaPart, OraPart, CittaArr, OraArr, TipoAereo) Aereo(TipoAereo, NumPasseggeri,QtaMerci) Scrivere le interrogazioni SQL che permettono di determinare: 1) Le città con un aeroporto di cui non è noto il numero di piste 2) Le nazioni da cui parte e arriva il volo con codice AZ274 3) I tipi di aereo usati nei voli che partono da Torino Structured Query Language 33

Esercizio (continua) 4) I tipi di aereo e il corrispondente numero di passeggeri usati nei voli che partono da Torino. Se la descrizione dell aereo non è disponibile visualizzare solamente il tipo 5) Le città da cui partono voli internazionali 6) Le città da cui partono voli diretti a Bologna, ordinate alfabeticamente 7) Il numero di voli internazionali che partono il giovedì da Napoli 8) Il numero di voli internazionali che partono ogni settimana da città italiane (farlo in due modi: facendo comparire o meno nel risultato gli aeroporti senza voli internazionali) 9) Le città francesi da cui partono più di venti voli alla settimana diretti in Italia Structured Query Language 34

Esercizio (fine) 10) Gli aeroporti italiani che hanno solo voli interni. Rappresentare questa interrogazione in quattro modi: con operatori insiemistici con un interrogazione nidificata con operatore not in con un interogazione nidificata con operatore not exists con l outer join e l operatore di conteggio. Esprimere l interogazione anche in algebra relazionale. 11) Le città che sono servite dall aereo caratterizzato dal massimo numero di passeggeri 12) Il massimo numero di passeggeri che possono arrivare in un aeroporto italiano dalla Francia di giovedì (se vi sono più voli occorre sommare i passeggeri) Structured Query Language 35