SQL.

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)
Dipartimento di Ingegneria Idraulica e Ambientale - Universita di Pavia 1 Caduta non guidata di un corpo rettangolare in un serbatoio Velocità e rotazione.
1 MeDeC - Centro Demoscopico Metropolitano Provincia di Bologna - per Valutazione su alcuni servizi erogati nel.
1 Pregnana Milanese Assessorato alle Risorse Economiche Bilancio Preventivo P R O P O S T A.
Algebra e calcolo relazionale (parte 2)
Structured Query Language
SQL applicato a SQL Server
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità C1 Il linguaggio SQL.
Structured Query Language (SQL) Presentazione 13.1 Informatica Generale (Prof. Luca A. Ludovico)
Esercitazioni del Corso di Sistemi Informativi Marina Mongiello
1 SQL come linguaggio di definizione di dati Eugenio Di Sciascio.
Esercitazioni del Corso di Sistemi Informativi Marina Mongiello
Frontespizio Economia Monetaria Anno Accademico
Basi di Dati prof. A. Longheu
SQL Dati i seguenti schemi relazionali:
SQL Structured Query Language
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.
Corso di Informatica (Basi di Dati)
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.
Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, 1999
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.
Trovare le matricole dei capi degli impiegati che guadagnano più di 40 milioni PROJCapo (SELStipendio>40 (Supervisione JOIN Impiegato=Matricola Impiegati))
Algebra Relazionale Linguaggio procedurale, cioè le operazioni vengono descritte attraverso la descrizione della sequenza di azioni da compiere per ottenere.
Equivalenza di espressioni
Duplicati Lalgebra relazionale non ammette duplicati, SQL li ammette. Quindi select Città from Persona where Cognome= Rossi estrae una lista di città in.
SQL SQL (pronunciato anche come l’inglese sequel) è l’acronimo di Structured Query Language (linguaggio di interrogazione strutturato) E’ un linguaggio.
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 IDENTIFICATORI di tabelle e attributi: stringhe di lunghezza max 18 caratteri, composte da.
1 Negozi Nuove idee realizzate per. 2 Negozi 3 4.
Un trucchetto di Moltiplicazione per il calcolo mentale
Corso di Basi di Dati Il Linguaggio SQL Home page del corso:
sql: esempi di linguaggio sql nell'implementazione mysql
1 Il Linguaggio SQL Il Linguaggio SQL Prof. Lorenzo Vita, Ing. Luigi Testa.
Basi di Dati e Sistemi Informativi
Basi di Dati e Sistemi Informativi Il Linguaggio SQL Home page del corso:
SQL.
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:
NO WASTE Progetto continuità scuola primaria scuola secondaria Salorno a.s. 2013_
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,
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?
1 Basi di Dati S tructured Q uery L anguage Appunti Matteo Longhi.
Interrogazioni (parte 2)
SQL (III) Data Definition Language/ Data Manipulation Language.
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,
Vincoli Interrelazionali Per i vincoli visti l’inserimento di un valore che li viola viene semplicemente impedito. In caso di vincoli di integrità referenziale,
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.
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.
SQL Linguaggio per l’interrogazione di una base dati.
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:
Transcript della presentazione:

SQL

SQL Structured Query Language è un linguaggio con varie funzionalità: contiene sia il DDL sia il DML; esistono varie versioni dell’SQL; vediamo gli aspetti essenziali, non i dettagli “storia”: prima proposta SEQUEL (IBM Research, 1974); prima implementazione in SQL/DS (IBM, 1981); dal 1983 ca., “standard di fatto” standard (1986, poi 1989 e infine 1992) recepito in parte; standard SQL:2003 (SQL3) approvato recentemente

Domini Domini elementari (predefiniti) Domini definiti dall‘utente (semplici, ma riutilizzabili)

Domini elementari Carattere: singoli caratteri o stringhe, anche di lunghezza variabile character [ varying ] [ ( Lunghezza ) ] [ character set NomeFamigliaCaratteri ] Bit: singoli booleani o stringhe bit [ varying ] [ ( Lunghezza ) ] Numerici, esatti e approssimati: numeric [( Precisione [ , Scala ) ] ] integer float [( Precisione )] double precision

Domini elementari, 2 Data, ora, intervalli: date time [( Precisione )] [ with time zone ] timestamp [( Precisione )] [ with time zone ] interval UnitàDiTempo [ to UnitàDiTempo ]

Definizione di schemi In un database non ci sono solo tabelle: create schema [NomeSchema] [ [authorization] autorizzazione]{elemento schema} ‘elemento schema’ può essere: dominio, tabella, indice, asserzione, vista, privilegio ‘autorizzazione’ è il nome dell’utente proprietario dello schema non è necessario definire tutto all’inizio

Definizione di tabelle create table NomeTabella (NomeAttributo Dominio [Default] [Vincoli] {, NomeAttributo Dominio [Default] [Vincoli] } AltriVincoli) Default (utilizzabili anche nella create domain) default < Valore | user | null >

Esempio create table Dipartimento ( nome char(20) primary key, indirizzo char(50), città char(20) )

Definizione di domini Istruzione CREATE DOMAIN: definisce un dominio (semplice), utilizzabile in definizioni di relazioni Sintassi create domain NomeDominio as Tipo [ Default ] [ Vincoli ] Esempio create domain Voto as smallint default null check ( value >=18 and value <= 30 )

Vincoli intrarelazionali not null (su singoli attributi) unique: permette di definire chiavi; sintassi: per singoli attributi: unique dopo il dominio chiavi formate da più attributi: unique ( Attributo { , Attributo } ) primary key: definizione della chiave primaria (una sola, implica not null); sintassi, come per unique check, vedremo più avanti

Vincoli intrarelazionali, esempi Nome character(20) not null, Cognome character(20) not null, unique (Cognome,Nome) è diverso da: Nome character(20) not null unique, Cognome character(20) not null unique

Vincoli interrelazionali references e foreign key (chiave esterna) permettono di definire vincoli di integrità referenziale; sintassi: per singoli attributi: references dopo il dominio riferimenti su più attributi: foreign key( Attributo { , Attributo } ) references ... è possibile associare politiche di reazione alla violazione dei vincoli (causate da modifiche sulla tabella esterna, cioè quella cui si fa riferimento)

Richiamo: base di dati con vincoli di integrità referenziale

Vincoli interrelazionali, esempio create table Infrazioni( Codice character(6) primary key, Data date not null, Vigile integer not null references Vigile(Matricola), Provincia character(2), Numero character(6) , foreign key(Provincia, Numero) references Automobili(Provincia, Numero) ) Infrazioni e’ una tabella interna, Vigile e Automobili sono esterne

Violazione dei vincoli per tutti i vincoli visti fino ad ora si assume che se violati a causa di un aggiornamento, il comando di aggiornamento venga rifiutato segnalando l’errore all’utente. per i vincoli di integrità referenziale, SQL permette di scegliere altre reazioni da adottare quando viene rilevata una violazione la reazione è possibile solo per le operazioni sulla tabella esterna che si propagano secondo una certa politica verso la tabella interna le violazioni possibili sono causate da modifiche del valore dell’attributo riferito e dalla cancellazione di righe (es. modifiche dell’attributo Provincia e cancellazione di righe da Vigile)

Politiche di reazione Specificata immediatamente dopo il vincolo di integrità consente di associare politiche diverse ai diversi eventi (delete, update) secondo la seguente sintassi: on < delete | update > < cascade | set null | set default | no action >

Reazioni per delete cascade: si propagano le cancellazioni set null: all’attributo referente viene assegnato il valore nullo al posto del valore cancellato nella tabella set default: all’attributo referente viene assegnato il valore di default al posto del valore cancellato nella tabella esterna no action: la cancellazione non viene consentita

Reazioni per update cascade: il nuovo valore valore viene propagato nell’altra tabella set null: all’attributo referente viene assegnato il valore nullo al posto del valore modificato nella tabella set default: all’attributo referente viene assegnato il valore di default al posto del valore modificato nella tabella esterna no action: l’azione di modifica non viene consentita

Modifiche degli schemi Fornisce primitive per la manipolazione di schemi che permettono di modificare gli schemi: alter domain alter table drop domain drop table ... Estendere questa parte

Dizionario dei Dati Tutti i DBMS relazionali gestiscono le descrizioni delle tabelle presenti nella basi di dati mediante una struttura relazionale, cioè mediante tabelle. La base di dati contiene due tipi di tabelle: quelle contente i dati, e quelle contenente i metadati (dati che descrivono dati), dette il catalogo della base di dati oppure il dizionario dei dati I comandi di definizione e modifica dello schema manipolano il dizionario dei dati

SELECT, sintassi select AttrExpr [ [as] Alias ] { , AttrExpr [ [as] Alias ] } from Tabella [ [as] Alias ] { , Tabella [ [as] Alias ] } [ where Condizione ] le tre parti vengono di solito chiamate target list clausola from clausola where seleziona tra le righe che appartengono al prodotto cartesiano delle tabelle elencate nella clausola from quelle che soddisfano la condizione espressa nell‘argomento della clausola where

Selezione e proiezione “Nome e reddito delle persone con meno di trenta anni” select nome, reddito from persone where eta < 30

SELECT, abbreviazioni data una relazione R su A e B select * from R equivale (intutivamente) a select X.A AS A, X.B AS B from R X where true

Selezione, senza proiezione select * from Impiegato where Cognome = 'Rossi’

Espressioni nella target list select Stipendio/12 as StipendioMensile from Impiegato where Cognome = 'Bianchi'

Disgiunzione select Nome, Cognome from Impiegato where Dipart = 'Amministrazione' or Dipart = 'Produzione'

Condizione complessa select Nome from Impiegato where Cognome = 'Rossi' and (Dipart = 'Amministrazione' or Dipart = 'Produzione')

Condizione “LIKE” “Gli impiegati che hanno un cognome che ha una 'o' in seconda posizione e finisce per 'i'.” select * from Impiegato where Cognome like '_o%i'

Gestione dei valori nulli “Gli impiegati che hanno o potrebbero avere uno stipendio minore di 50 milioni” select * from Impiegato where Stipendio < 50 or Stipendio is null

Selezione, proiezione e join “I padri di persone che guadagnano più di venti milioni” select distinct padre from persone, paternita where figlio = nome and reddito > 20

Proiezione, senza selezione select Nome, Cognome from Impiegato

Proiezione: duplicati select Cognome from Impiegato select distinct Cognome from Impiegato

“Padre e madre di ogni persona” Join naturale “Padre e madre di ogni persona” select paternita.figlio, padre, madre from maternita, paternita where paternita.figlio = maternita.figlio

Join di una relazione con se stessa “Le persone che guadagnano più dei rispettivi padri; mostrare nome, reddito e reddito del padre” select f.nome, f.reddito, p.reddito from persone p, paternita, persone f where p.nome = padre and figlio = f.nome and f.reddito > p.reddito

Ridenominazione del risultato “Le persone che guadagnano più dei rispettivi padri; mostrare nome, reddito e reddito del padre” select figlio, f.reddito as reddito, p.reddito as redditoPadre from persone p, paternita, persone f where p.nome = padre and figlio = f.nome and f.reddito > p.reddito

SELECT, con join esplicito, sintassi select AttrExpr [ [as] Alias ] {,AttrExpr [ [as] Alias ] } from Tabella [ [ as ] Alias ] {[ TipoJoin ] join Tabella [ [ as ] Alias ] on CondDiJoin }, ... [ where AltraCondizione ]

“Padre e madre di ogni persona” Join esplicito “Padre e madre di ogni persona” select madre, paternita.figlio, padre from maternita join paternita on paternita.figlio = maternita.figlio

Ulteriore estensione: join naturale “Padre e madre di ogni persona” select madre, paternita.figlio, padre from maternita natural join paternita from maternita join paternita on paternita.figlio = maternita.figlio

Join

Join esplicito select I.Nome, Cognome, Citta from Impiegato I join Dipartimento D on Dipart = D.Nome

Ordinamento del risultato order by AttrDiOrdinamento [ asc | desc ] {, AttrDiOrdinamento [ asc | desc ] } select Cognome, Nome, Stipendio from Impiegato where Dipart like 'Amm%' order by Stipendio desc, Cognome

Necessità di operatori su tuple tutte le condizioni dell’algebra vengono valutate su una tupla alla volta la condizione è sempre un predicato che viene valutato su ciascuna tupla indipedentemente da tutte le altre se volessi contare il numero di impiegati di un certo dipartimento a partire da una relazione Impiegato come si fa? occorre introdurre degli operatori che consentono di valutare proprietà che dipendono da insiemi di tuple questi operatori sono detti operatori aggregati

Operatori aggregati select count(*) AS NumeroImpiegati from Impiegato where Dipart = 'Produzione' l’operatore aggregato (count) viene applicato al risultato dell’interrogazione: select *

COUNT: sintassi count ( < * | [ distinct | all ] ListaAttributi > ) select count(Stipendio) as NumeroStipendi from Impiegato select count(distinct Stipendio) as StipendiDiversi

COUNT e valori nulli select count(*) as NumeroImpiegati from Impiegato select count(Stipendio) as NumeroStipendi

Somma, media, massimo, minimo < sum | max | min | avg > ( [ distinct | all ] AttrEspr ) Totale degli stipendi del dipartimento amministrazione select sum(Stipendio) as TotaleStipendi from Impiegato where Dipart = 'Amministrazione' escludono opportunamente i valori nulli

Join e operatore aggregato “Il massimo stipendio tra quelli degli impiegati che lavorano in un dipartimento con sede a Milano” select max(Stipendio) from Impiegato, Dipartimento D where Dipart = D.Nome and Citta = 'Milano' Nota: non abbiamo usato la as e l’attributo nel risultato non ha nome

Operatori aggregati e target list un’interrogazione scorretta: select Cognome, Nome, max(Stipendio) from Impiegato, Dipartimento where Dipart = NomeDip and Citta = 'Milano’ di chi sarebbe il cognome? La target list deve essere omogenea

Interrogazioni con raggruppamento gli operatori aggregati vengono applicati ad un insieme di righe gli esempi visti operano su tutte le righe spesso esiste l’esigenza di applicare operatori aggregati a distintamente ad insiemi di tuple in SQL l’operatore group by ci consente di fare questo

Operatori aggregati e raggruppamenti “Per ogni dipartimento, la somma degli stipendi” select Dipart, sum(Stipendio) as SommaStipendi from Impiegato group by Dipart

Semantica di interrogazioni con operatori aggregati e raggruppamenti interrogazione senza group by e senza operatori aggregati: select Dipart, Stipendio from Impiegato

Semantica …, 2 poi si raggruppa e si applica l’operatore aggregato a ciascun gruppo dopo group by dopo sum()as

Raggruppamento sbagliato select ufficio from impiegato group by dipart Ad ogni valore ( e quindi gruppo) di dipart possono corrispondere più valori di ufficio. Quale scegliere?

importante! nella clausola select può comparire solo un sottoinsieme S degli attributi utilizzati nella clausola group by in questo modo, ciascuna tupla sugli attributi in S è associata ad un unico valore del gruppo E’ una condizione molto restrittiva. interrogazione scorretta: select dipart, count (*), d.città from impiegato i join dipartimento d on i.dipart=d.nome group by dipart corretta: group by dipart, città

“I dipartimenti che spendono più di 100 milioni in stipendi” Condizioni sui gruppi “I dipartimenti che spendono più di 100 milioni in stipendi” select Dipart, sum(Stipendio) as SommaStipendi from Impiegati group by Dipart having sum(Stipendio) > 100

WHERE o HAVING? “I dipartimenti per cui la media degli stipendi degli impiegati che lavorano nell'ufficio 20 è superiore a 25 milioni” select Dipart from Impiegato where Ufficio = 20 group by Dipart having avg(Stipendio) > 25

Sintassi, riassumiamo SelectSQL ::= select ListaAttributiOEspressioni from ListaTabelle [ where CondizioniSemplici ] [ group by ListaAttributiDiRaggruppamento ] [ having CondizioniAggregate ] [ order by ListaAttributiDiOrdinamento ]

Unione, intersezione e differenza la sintassi select-from-where da sola non permette di fare unioni; serve un costrutto esplicito: SelectSQL { < union | intersect | except > [ all ] SelectSQL } select Nome from Impiegato union select Cognome as Nome i duplicati vengono eliminati (a meno che si usi all) (anche dalle proiezioni)

Interrogazioni nidificate le condizioni atomiche esprimibili nella clausola WHERE permettono anche il confronto fra un attributo (o più, vedremo poi) e il risultato di una sottointerrogazione quantificazioni esistenziali

Interrogazioni nidificate, sintassi ConfrontoConNidificazione :: = Scalare OpConfronto [ any | all ] ( SelectAttributoSingolo)| exists ( SelectStar ) senza any o all , il risultato della SelectAttributoSingolo deve essere un solo valore v.A  any Select... (risp. all) è vero se v.A è in relazione  con almeno uno (risp. con tutti) dei valori del risultato della Select = any puo essere abbreviato con in exists( SelectStar ) è vero se il risultato della sottoespressione non è vuoto.

Interrogazioni nidificate “Gli impiegati che lavorano in dipartimenti di Roma” select * from Impiegato where Dipart = any (select Nome from Dipartimento where Citta = 'Roma')

“Nome e reddito del padre di Mario” select Nome, Reddito from Persone where Nome = (select Padre from Paternita where Figlio = 'Mario') from Persone, Paternita where Nome = Padre and Figlio = 'Mario'

Interrogazioni nidificate, commenti La prima versione di SQL prevedeva solo la forma nidificata (o strutturata), con una sola relazione in ogni clausola FROM. Il che è insoddisfacente: la dichiaratività è limitata non si possono includere nella target list attributi di relazioni nei blocchi interni La forma nidificata è “meno dichiarativa”, ma talvolta più leggibile (richiede meno variabili) La forma piana e quella nidificata possono essere combinate Le sottointerrogazioni non possono contenere operatori insiemistici (“l’unione si fa solo al livello esterno”); la limitazione non è significativa

“Nome e reddito dei padri di persone che guadagnano più di 20 milioni" select Nome, Reddito from Persone where Nome in (select Padre from Paternita where Figlio =any (select Nome where Reddito > 20)) select distinct P.Nome, P.Reddito from Persone P, Paternita, Persone F where P.Nome = Padre and Figlio = F.Nome and F.Reddito > 20

Interrogazioni piatte o nidificate? 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')

“Le persone che hanno almeno un figlio” select * from Persone where exists (select * from Paternita where Padre = Nome) or exists (select * from Maternita where Madre = Nome)

Interrogazioni nidificate, commenti, 2 regole di visibilità: non è possibile fare riferimenti a variabili definite in blocchi più interni se un nome di variabile è omesso, si assume riferimento alla variabile più “vicina” nota: in un blocco si può fare riferimento a variabili definite in blocchi più esterni; la semantica (prodotto cartesiano, selezione, proiezione) non funziona più, ne serve una più sofisticata: l’interrogazione interna va ripetuta una volta per ciascun valore della variabile