Interrogazioni (parte 2)

Slides:



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

DB -Algebra Relazionale
Ricorsione in SQL-99.
Calcolo Relazionale.
Algebra e calcolo relazionale (parte 2)
Structured Query Language (SQL) Presentazione 13.1 Informatica Generale (Prof. Luca A. Ludovico)
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 e Ritardi: schema E/R
DML – Data Manipulation Language
Esercitazioni del Corso di Sistemi Informativi Marina Mongiello
Esercitazioni del Corso di Sistemi Informativi Marina Mongiello
Basi di Dati prof. A. Longheu
SQL.
SQL Dati i seguenti schemi relazionali:
Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill,
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.
SQL Esercitazione per il corso “Basi di Dati” Gabriel Kuper
SQL: Lezione 7 Nataliya Rassadko
Esercitazione.
Algebra Relazionale Linguaggio procedurale, cioè le operazioni vengono descritte attraverso la descrizione della sequenza di azioni da compiere per ottenere.
Duplicati Lalgebra relazionale non ammette duplicati, SQL li ammette. Quindi select Città from Persona where Cognome= Rossi estrae una lista di città in.
Normalizzazione Le forme normali certificano che la base di dati soddisfa criteri di qualità che mirano ad evitare le ridondanze e i conseguenti effetti.
Manipolazione dei dati I comandi SQL che permettono di modificare il contenuto di una base di dati sono insertdeleteupdate insert ha la seguente sintassi:
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
SQL: Structured Query Language
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.
1 Il Linguaggio SQL Il Linguaggio SQL Prof. Lorenzo Vita, Ing. Luigi Testa.
Basi di dati - Modelli e linguaggi di interrogazione- Paolo Atzeni, Stefano Ceri, Stefano Paraboschi, Riccardo Torlone Copyright © The McGraw-Hill.
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.
Informatica Introduzione alle basi di dati Lezione 8 Scienze e tecniche psicologiche dello sviluppo e dell'educazione, laurea magistrale Anno accademico:
Microsoft Access (parte 5) Introduzione alle basi di dati Scienze e tecniche psicologiche dello sviluppo e dell'educazione, laurea magistrale Anno accademico:
Informatica II – Basi di Dati (07/08) – Parte 2 Gianluca Torta Dipartimento di Informatica dell’Università di Torino
SEFOC – SETTORE FORMAZIONE CONTINUA DEL PERSONALE CORSO MYSQL AVANZATO ROBERTO PENNOLINO – CARMELO MASSIMO PRIOLO PALERMO – 07 | 06 | 2011.
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,
Le query in SQL Unità didattica sviluppata per l’ITIS “A. Volta” – Classe 5 sez. I Ing Domenico Liguori - Università degli studi di Napoli “Federico.
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
Il modello relazionale. Modello logico dei dati basato su concetti relazione e tabella Relazione: da teoria degli insiemi Tabella: rappresentazione grafica.
Microsoft Access Query (III).
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 e Relazioni Uno schema di relazione R(X) è costituito da un simbolo (nome della relazione) R e da una serie di attributi X={A 1, A 2, …, A.
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,
Query languages per Basi di Dati Relazionali  Algebra Relazionale:  basato sulla teoria degli insiemi  procedurale  usato per l’implementazione di.
Join Proprietà Il join di r 1 e r 2 contiene un numero di tuple compreso fra zero e il prodotto di |r 1 | e |r 2 | se il join di r 1 e r 2 è completo allora.
Vincoli Interrelazionali Per i vincoli visti l’inserimento di un valore che li viola viene semplicemente impedito. In caso di vincoli di integrità referenziale,
Join Se ciascuna tupla di ciascun operando contribuisce ad almeno una tupla del risultato il join si dice completo. Se per alcune tuple non è verificata.
Vincoli interrelazionali
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.
S. Costantini 06/05/2006 (parte del materiale è tratto da slide del 2001 di Ceri-Atzeni) Normalizzazione di Schemi.
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.
Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso:
Operazioni Relazionali
Linguaggio SQL prima parte Linguaggio SQL prima parte A. Lorenzi, E. Cavalli INFORMATICA PER SISTEMI INFORMATIVI AZIENDALI Copyright © Istituto Italiano.
SQL Linguaggio per l’interrogazione di una base dati.
E. Tinelli SQL come linguaggio di manipolazione dei dati 1 DML – Data Manipulation Language.
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:

Interrogazioni (parte 2) SQL (II) Interrogazioni (parte 2)

Notazione Le parentesi angolari <,>: permettono di isolare un termine della sintassi Le parentesi quadre [,]: indicano che il termine all’interno è opzionale Può non comparire o comparire una sola volta

Notazione Le parentesi graffe {,}: indicano che il termine racchiuso può non comparire o essere ripetuto un numero arbitrario di volte Le barre verticali |: indicano che deve essere scelto uno tra i termini separati dalle barre

Interpretazione algebrica delle interrogazioni SQL select T1.Attrib_11,…,Th.Attrib_hm from Tabella1 as T1,…,Tabellan as Tn where condizione T1.Attrib_11,…,Th.Attrib_hm( condizione(Tabella1 x … x Tabellan)) Per semplicità, omettiamo le ridenominazioni che ci permettono di considerare tutti i join come prodotto cartesiano

Algebra->calcolo, SQL->linguaggio SQL gestisce i duplicati (select e select distinct), algebra no (basata su insiemi) select * from Impiegati ordered by [asc|desc] Matricola Operatori aggregati Interrogazioni nidificate per ordinare le tuple

Tabella “Impiegato” Impiegato Nome Cognome Dipart Ufficio Stipendio Città Mario Rossi Amministr 10 15 Milano Carlo Bianchi Prod 20 12 Torino Giuseppe Verdi 13 Roma Franco Neri Distrib 16 Napoli Direzione 14 27 Lorenzo Lanzi 7 21 Genova Paola Burroni Ammistr 75 Venezia Marco

Tabella “Dipartimento” Nome Indirizzo Città Amministr Via Tito Livio 27 Milano Prod P.le Lavater 3 Torino Distrib Via Segre 9 Roma Direzione Ricerca Via Morone 6

Operatori aggregati Algebra relazionale: tutte le condizioni sono valutate su una tupla alla volta, in modo indipendente SQL offre degli operatori che lavorano su più di una tupla alla volta: count,sum,max,min,avg

valori diversi tra loro Interrogazione 12 select count(*) from Impiegato where Dipart = ‘Prod’ count(<*|[distinct|all|]ListaAttributi>) valori diversi tra loro non null

Interrogazioni 13, 14 Gli operatori aggregati si applicano sulle tuple selezionate dalla clausola “where” (se c’è) count(<*|[distinct|all|]ListaAttributi>) Numero di stipendi diversi select count(distinct Stipendio) from Impiegato Numero di righe che hanno nome non nullo select count(all Nome)

sum, max, min, avg Prendono solo espressioni rappresentanti valori numerici o intervalli di tempo distinct e all stesso significato di prima Altri operatori a seconda delle versioni di SQL (solitamente operatori statistici)

Interrogazioni 15, 16 Somma stipendi di Amministrazione select sum(Stipendio) from Impiegato where Dipart = ‘Amministr’ Stipendi min, max, medio degli Impiegati select min(Stipendio),max(Stipendio),avg(Stipendio)

Interrogazione 17 Max stipendio tra impiegati che lavorano in dip a Milano select max(Stipendio) from Impiegato, Dipartimento where Dipart = NomeDip and Citta = ‘Milano’ Equi-join

Interrogazione non corretta select Cognome, Nome, max(Stipendio) from Impiegato, Dipartimento where Dipart = NomeDip and Citta = ‘Milano’ Perché è scorretta? Ha senso con group by…

Interrogazione 18 Estrarre la somma degli stipendi di tutti gli impiegati dello stesso dipartimento select Dipart, sum(Stipendio) from Impiegato group by Dipart

Interrogazione 18 (cont.) E` come se prima si facesse la query select Dipart, Stipendio from Impiegato ottenendo la tabella…

Interrogazione 18 (cont.) Dipart Stipendio Amministrazione 22.500 Produzione 18.000 20.000 Distribuzione Direzione 40.000 36.500 23.000

Interrogazione 18 (cont.) Poi le tuple si raggruppano in sottoinsiemi in base allo stesso valore dell’attributo Dipart Dipart Stipendio Amministrazione 22.500 20.000 Produzione 18.000 23.000 Distribuzione Direzione 40.000 36.500

Interrogazione 18 (cont.) Poi le tuple si raggruppano in sottoinsiemi in base allo stesso valore dell’attributo Dipart Dipart Stipendio Amministrazione 22.500 20.000 Produzione 18.000 23.000 Distribuzione Direzione 40.000 36.500

Interrogazione 18 (cont.) Infine l’operatore sum viene applicato separatamente a ogni sottoinsieme Dipart sum(Stipendio) Amministrazione 125 Produzione 82 Distribuzione 45 Direzione 153

Interrogazione non corretta select Ufficio from Impiegato group by Dipart Perché?

Interrogazione non corretta select Ufficio from Impiegato group by Dipart Ogni valore dell’attributo Dipart corrisponderanno diversi valori dell’attributo Ufficio Dopo l’esecuzione del raggruppamento, invece, ogni sottoinsieme di righe deve corrispondere a una sola riga nella tabella risultato della interrogazione

Interrogazione 19 Dipartimenti, il numero di impiegati di ciascun dipart, e la città sede del dipart select Dipart, count(*), D.citta from Impiegato I, Dipartimento D where I.Dipart=D.Nome group by Dipart scorretta!

Interrogazione 19 select Dipart, count(*), D.Citta from Impiegato I, Dipartimento D where I.Dipart=D.Nome group by Dipart, Citta  corretta!

Predicati sui gruppi group by: le tuple vengono raggruppate in sottoinsiemi Si può voler considerare solo sottoinsiemi che soddisfano una certa condizione Sulle singole righe: clausola “where” Se condizioni di tipo aggregato: clausola having:ogni sottoinsieme di tuple della group by viene selezionato se il predicato di having è soddisfatto

Interrogazione 20 Dipartimenti che spendono più di 100 milioni in stipendi select Dipart, sum(Stipendi) as SommaStip from Impiegato group by Dipart having sum(Stipendio) > 100

Predicati sui gruppi Consigli di buon uso Meglio usare having con group by Senza group by: l’intero insieme di righe è trattato come un unico raggruppamento Se la condizione non è soddisfatta il risultato sarà vuoto Solo predicati in cui ci sono operatori aggregati nella clausola having

Interrogazione 21 Dipartimenti per cui la media degli stipendi degli impiegati che lavorano nell’ufficio 20 è > di 25 milioni select Dipart from Impiegato where Ufficio = 20 group by Dipart having avg(Stipendio) > 25

Interrogazioni in SQL La forma sintetica generale di un’interrogazione SQL diventa: SelectSQL ::= select ListaAttributiOEspressioni from ListaTabelle [ where CondizioniSemplici ] [ group by ListaAttributiDiRaggrupamento ] [ having CondizioniAggregate ] [ order by ListaAttributiDiOrdinamento ]

Interrogazioni di tipo insiemistico union (unione), intersect (intersezione) ed except (differenza) Assumono come default di eseguire una eliminazione di dupilicati L’eliminazione dei duplicati rispetta meglio il tipico significato delle operatori insiemistici Per preservare i duplicati: usare l’operatore con la parola chiave all

Interrogazioni di tipo insiemistico La sintassi per l’uso degli operatori insiemistici: SelectSQL {<union|intersect|except> [all] SelectSQL }

Interrogazioni di tipo insiemistico SQL non richiede che gli schemi su cui vengono effettuate le operazioni insiemistiche siano identiche Solo che gli attributi siano in pari numero e che abbiano domini compatibili La corrispondenza tra gli attributi non si basa sul nome ma sulla posizione degli attributi Se gli attributi hanno nome diverso, il risultato normalmente usa i nomi del primo operando

Interrogazione 22 (insiemistiche) Nomi e cognomi degli impiegati (notare: non serve che gli attributi abbiano lo stesso nome, ma solo lo stesso “tipo”, per esempio stringa) select Nome from Impiegato union select Cognome L’unione non si può simulare

Interrogazione 22 (insiemistiche) Nome Mario Carlo Giuseppe Franco Lorenzo Paola Marco Rossi Bianchi Verdi Neri Lanzi Borroni select Nome from Impiegato union select Cognome

Interrogazione 23 (insiemistiche) Nomi e cognomi degli impiegati mantenendo i duplicati select Nome from Impiegato union all select Cognome Nome Carlo Franco Lorenzo Marco Bianchi Neri Rossi Lanzi

Interrogazione 24 (insiemistiche) Cognomi che sono anche nomi select Nome from Impiegato intersect select Cognome Nome Franco

Interrogazione 25 (insiemistiche) Nomi che non sono cognomi select Nome from Impiegato except select Cognome Nome Mario Carlo Giuseppe Lorenzo Paola Marco

Join esplicito Abbiamo visto un modo di fare il join mettendo le condizioni di join nella clausola where Si può utilizzare esplicitamente un operatore di join

Interrogazione 26 (join esplicito) select Impiegato.Nome, Cognome, Dipartimento.Città from Impiegato,Dipartimento where Dipart = Dipartimento.Nome select Impiegato.Nome,Cognome, Dipartimento.Città from Impiegato join Dipartimento On (Dipart =Dipartimento.Nome)

Interrogazione 27 (join esplicito riprende la 11) Estrarre il nome e lo stipendio dei capi degli impiegati che guadagnano piú dei loro capi select I1.Nome, I1.Stipendio from Impiegato I1, Impiegato I2, Supervisione where I1.Matricola = Capo and I2.Matricola = Impiegato and I2.Stipendio > I1.Stipendio from (Impiegato I1 join Supervisione on (I1.Matricola = Capo)) join Impiegato I2 on (I2.Matricola = Impiegato) where I2.Stipendio > I1.Stipendio

Outer join Fino ad adesso abbiamo visto inner join Parliamo adesso di outer join Serve quando il join non è completo … Completo: dato R1 join R2 on (…), per ciascuna tupla di R1 esiste almeno una tupla di R2 che si combina con essa, e viceversa per R2 … se si vuole mantenere l’informazione anche per quelle tuple che non partecipano al join

Tabelle “Guidatore” e “Automobile” Nome Cognome NumPatente Mario Carlo Marco Rossi Bianchi Neri VR 2030020Y PZ 1012436B AP 4544442R Targa Marca Modello NumPatente AB 574 WW AA 652 FF BJ 747 XX BB 421 JJ Fiat Lancia Punto Brava Delta Uno VR 2030020Y PZ 1012436B MI 2020030U

Inner join (“normale”) select Nome,Cognome,Guidatore.NumPatente, Targa from Guidatore join Automobile on (Guidatore.NumPatente=Automobile.NumPatente) Nome Cognome NumPatente Targa Marca Modello Mario Carlo Rossi Bianchi VR 2030020Y PZ 1012436B AB 574 WW AA 652 FF BJ 747 XX Fiat Lancia Punto Brava Delta Join non completo

Outer left join (interrogazione 28) select Nome,Cognome,Guidatore.NumPatente, Targa from Guidatore left join Automobile on (Guidatore.NumPatente=Automobile.NumPatente) Nome Cognome NumPatente Targa Marca Modello Mario Carlo Marco Rossi Bianchi Neri VR 2030020Y PZ 1012436B AP 4544442R AB 574 WW AA 652 FF BJ 747 XX null Fiat Lancia Punto Brava Delta

Outer right join (interrogazione 29) select Nome,Cognome,Guidatore.NumPatente, Targa from Guidatore right join Automobile on (Guidatore.NumPatente=Automobile.NumPatente) Nome Cognome NumPatente Targa Marca Modello Mario Carlo null Rossi Bianchi VR 2030020Y PZ 1012436B AB 574 WW AA 652 FF BJ 747 XX BB 421 JJ Fiat Lancia Punto Brava Delta Uno

Outer full join (interrogazione 30) select Nome,Cognome,Guidatore.NumPatente, Targa from Guidatore full join Automobile on (Guidatore.NumPatente=Automobile.NumPatente) Nome Cognome NumPatente Targa Marca Modello Mario Carlo Marco null Rossi Bianchi Neri VR 2030020Y PZ 1012436B AP 4544442R AB 574 WW AA 652 FF BJ 747 XX BB 421 JJ Fiat Lancia Punto Brava Delta Uno

Join naturale (interrogazione 31) select Nome,Cognome,Guidatore.NumPatente, Targa from Guidatore natural join Automobile Nome Cognome NumPatente Targa Marca Modello Mario Carlo Rossi Bianchi VR 2030020Y PZ 1012436B AB 574 WW AA 652 FF BJ 747 XX Fiat Lancia Punto Brava Delta Attributo comune: NumPatente

Interrogazioni nidificate Clausola “where” su predicati logici in cui le componenti sono confronti tra valori Possibile anche confrontare valori con il risultato di una query (query annidata) Di solito prima si esegue la query più interna, ma ci sono eccezioni (per esempio, passaggio di binding)

Interrogazioni nidificate Parole chiave all e any: any: specifica che la riga soddisfa la condizione se risulta vero il confronto tra il valore dell’attributo per la riga ed almeno uno degli elementi restituiti dall’interrogazione all: specifica che la riga soddisfa la condizione solo se tutti gli elementi restituiti dall’interrogazione nidificata rendono vero il confronto

Interrogazione 32 Tutti i dati degli impiegati che lavorano in dipartimenti in Firenze select * from Impiegato where Dipart = any (select Nome from Dipartimento where Citta = ‘Firenze’) = any corrisponde a in

Interrogazione 33 (simile alla 10) Impiegati che hanno lo stesso nome di impiegati del dip di Produzione select I1.Nome from Impiegato I1, Impiegato I2 where I1.Nome = I2.Nome and I2.Dipart = ‘Produzione’ select Nome from Impiegato where Nome = any (select Nome where Dipart = ‘Produzione’)

Interrogazione 34 Dipartimenti in cui non lavorano persone con cognome ‘Rossi’ select Nome from Dipartimento where Nome <> all (select Dipart from Impiegato where Cognome = ‘Rossi’) except select Dipart where Cognome = ‘Rossi’ “diverso da” <> all corrisponde a not in

Un solo valore da confrontare Interrogazione 35 Dipartimento dell’impiegato che guadagna lo stipendio massimo select Dipart from Impiegato where Stipendio = (select max(Stipendio) from Impiegato) where Stipendio >= all (select Stipendio Un solo valore da confrontare Le due interrogazioni sono equivalenti