Linguaggio SQL Descriviamo la notazione usata nel seguito:



Documenti analoghi
Definizione di domini

SQL SQL. Definizione dei dati. Domini. Esistono 6 domini elementari:

Gestione delle tabelle

SQL Sintassi Dei Comandi

Linguaggio SQL: fondamenti D B M G. Gestione delle tabelle

Basi di Dati e Sistemi Informativi. Structured Query Language

Domini elementari, 2. Basi di dati. Domini elementari, 4. Domini elementari, 3. Domini definiti dagli utenti. Domini elementari, 5

Basi di Dati prof. Letizia Tanca

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

Basi di dati SQL. Standardizzazione di SQL. Linguaggi di Interrogazione: SQL. Prof.Angela Bonifati

SQL: Concetti Base -Prima Parte-

Laboratorio di Basi di Dati e Web

SQL - Tipi di dato Il linguaggio SQL

Il linguaggio SQL. Il linguaggio SQL. Il linguaggio SQL. SQL - Tipi di dato. SQL - Tipi di dato numerici. SQL - Tipi di dato numerici

Corso di Informatica (Basi di Dati)

DDL DML. Tipi di linguaggi per basi di dati. Si distinguono due categorie:

Giovanna Rosone 04/03/ /03/2010 SQL, Istruzioni per la modifica dello schema

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

Laboratorio di Basi di Dati

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

Basi di Dati: Corso di laboratorio

SQL. Laboratorio di Progettazione di Basi di Dati (CdS in Informatica e TPS)

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

SQL. Storia e standard

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

Join in SQL (primo modo) Informatica. Tabella Dipartimento. Interrogazione 4a. Interrogazione 4b. Interrogazione 4a

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

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

Corso sul linguaggio SQL


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

SQL SQL. Definizione dei dati. Domini. Esistono 6 domini elementari:

Il linguaggio SQL: DDL di base

Linguaggio SQL. Structured Query Language

Tipi numerici esatti Valori interi o con parte decimale di lunghezza prefissata

SQL. Alcune note sulla definizione dei dati

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

Basi di dati. Il Modello Relazionale dei Dati. K. Donno - Il Modello Relazionale dei Dati

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

IL LINGUAGGIO SQL IDENTIFICATORI E TIPI DI DATI COMANDI E ISTRUZIONI

Basi di Dati. Laboratorio Ing. G. Laboccetta Dott.ssa. V. Policicchio. Corso di Laurea in Informatica. a.a

INFORMATICA GENERALE Prof. Alberto Postiglione. Scienze della Comunicazione Università di Salerno. INFORMATICA GENERALE Prof. Alberto Postiglione

Stringhe di caratteri

Basi di Dati prof. Letizia Tanca lucidi ispirati al libro Atzeni-Ceri-Paraboschi-Torlone. SQL: il DDL

Uso delle variabili di alias. SQL slide aggiuntive. Interrogazione 25. Interrogazione 26

Vincoli di Integrità Approccio dichiarativo alla loro implementazione

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

SQL (STRUCTURED QUERY LANGUAGE)

Basi di Dati Relazionali

Il linguaggio SQL: le basi

Volumi di riferimento

Insegnamento di Informatica CdS Scienze Giuridiche A.A. 2006/7. Il trattamento dei dati

DBMS (Data Base Management System)

Corso sul linguaggio SQL

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

Lezione V. Aula Multimediale - sabato 29/03/2008

User Tools: DataBase Manager

MODELLO RELAZIONALE. Introduzione

Vincoli di Integrità

INFORMATICA PER L IMPRESA (Docente Prof. Alfredo Garro)

Il Modello Relazionale

4 SQL : Interrogazioni nidificate

SQL (STRUCTURED QUERY LANGUAGE)

INFORMATICA PER L IMPRESA (Docente Prof. Alfredo Garro) ESERCIZIO 3

Istruzioni DML di SQL

Vincoli di integrità

ECDL - Database. European Computer Driving Licence - Modulo 5 - Database LEZIONE 2

Il Modello Relazionale

INDICI. Prevediamo di effettuare spesso interrogazioni simili alle seguenti:

Corrado Aaron Visaggio 1. Esercizio

Corso Sistemi Informativi Avanzati. Programma 30 set Installazione Macchina Virtuale. Introduzione alla BI nelle Aziende.

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

Elena Baralis 2013 Politecnico di Torino 1

DB - Modello relazionale dei dati. DB - Modello Relazionale 1

Corso di Basi di Dati

Data Base. Master "Bio Info" Reti e Basi di Dati Lezione 6

Domini elementari in SQL

Viste come strumenti di programmazione

Laboratorio di Basi di Dati Introduzione a SQL

MAX, SUM, AVG, COUNT)

Dati relazionali e XML

Operazioni sui database

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

DUE GRUPPI DI COMANDI

I comandi del linguaggio DDL (Data Definition Language): CREATE E ALTER

Informatica per le discipline umanistiche 2 lezione 10

SQL -DDL. FONDISTA(Nome, Nazione, Età) GAREGGIA(NomeFondista, NomeGara, Piazzamento) GARA(Nome, Luogo, Nazione, Lunghezza)

ESEMPI DI QUERY SQL. Esempi di Query SQL Michele Batocchi AS 2012/2013 Pagina 1 di 7

Modello Relazionale dei DBMS - Vincoli Tradizionalmente, esistono quattro modelli logici: Gerarchico Reticolare Relazionale A oggetti XML I modelli

SQL e ACCESS. Modello relazionale PROBLEMA ENTITA STUDENTE

Basi di Dati. Programmazione e gestione di sistemi telematici

Basi di dati. L Algebra Relazionale. K. Donno - L Algebra Relazionale

Le query. Lezione 6 a cura di Maria Novella Mosciatti

I database relazionali sono il tipo di database attualmente piu diffuso. I motivi di questo successo sono fondamentalmente due:

BASE DI DATI: sicurezza. Informatica febbraio ASA

Introduzione all Algebra Relazionale

Le Basi di Dati. Le Basi di Dati

DATABASE RELAZIONALI

MODELLO RELAZIONALE. cesarini-bdsi mod relazionale 1 MODELLO RELAZIONALE

Elementi di Algebra Relazionale

Transcript:

Descriviamo la notazione usata nel seguito: i termini del linguaggio sono sottolineati; i termini variabili sono scritti in corsivo; le parentesi angolari (< >)permettono di isolare un termine della sintassi; le parentesi graffe ({ }) indicano che il termine racchiuso può non comparire o essere ripetuto un numero arbitrario di volte; le parentesi quadre ([ ]) indicano che il termine all interno è opzionale, ovvero può non comparire o non comparire una sola volta; le barre verticali ( ) indicano che il termine deve essere scelto tra uno dei termini separati dalle barre; un elenco di termini alternativi può essere racchiuso tra parentesi angolari. le parentesi tonde () dovranno essere intese come simboli del linguaggio SQL. 06/10/2010 1 1. Domini elementari di SQL: Carattere: il dominio character permette di rappresentare stringhe di caratteri. character [varying ] [ (Lunghezza ) ] [character set Nome famiglia di caratteri ] 06/10/2010 2 1

Lunghezza indica la dimensione di una stringa se la lunghezza non è specificata il dominio rappresenta un singolo carattere; Per le stringhe a lunghezza variabile (varying) il numero indica la lunghezza massima della stringa; character = char; varying character = varchar; Nome famiglia di caratteri indica il tipo di alfabeto da utilizzare. 06/10/2010 3 character varying (1000) character set Greek Stringa di caratteri dell alfabeto greco a lunghezza variabile di dimensione massima 1000 06/10/2010 4 2

1. Domini elementari di SQL: Bit: il dominio bit viene utilizzato per attributi che possono assumere solo il val ore 0 od 1. bit [varying ] [ (Lunghezza ) ] 06/10/2010 5 Lunghezza indica la dimensione di una stringa di bit se la lunghezza non è specificata il dominio rappresenta un bit; per le stringhe a lunghezza variabile il numero indica la lunghezza massima della stringa varying bit = varbit 06/10/2010 6 3

bit varying (1000) Stringa di bit a lunghezza variabile di dimensione massima 1000 06/10/2010 7 1. Domini elementari di SQL: Tipi numerici esatti: domini che permettono di rappresentare valori esatti interi o decimali. numeric [ (Precisione [, Scala ] ) ] decimal [ (Precisione [, Scala ] ) ] integer smallint 06/10/2010 8 4

I domini numeric e decimal rappresentano numeri in base decimale. Precisione specifica il numero di cifre significative, segno e punto esclusi; Scala indica quante cifre devono comparire dopo la virgola, se non indicato è pari a zero; Per numeric la precisione rappresenta un valore esatto; Per decimal la precisione rappresenta un requisito minimo; 06/10/2010 9 numeric (6,3) Rappresenta valori compresi tra -999.999 e +999.999 decimal (4) Rappresenta valori compresi tra -9999 e +9999 06/10/2010 10 5

I domini integer e smallint rappresentano numeri interi. La dimensione e la rappresentazione sono lasciate all implementazione. 06/10/2010 11 1 Domini elementari di SQL: Tipi numerici approssimati: domini che permettono di rappresentare valori approssimati mediante rappresentazioni in virgola mobile, in cui a ciascun numero corrisponde una coppia di valori: la mantissa e l esponente. La mantissa è un numero frazionario, l esponente è un numero intero. Il valore approssimato del numero reale si ottiene moltiplicando la mantissa per la potenza di 10 con grado pari all esponente. float [ ( Precisione ) ] double precision real 06/10/2010 12 6

La Precisione nel dominio float indica il numero di cifre della mantissa; Nel dominio real la Precisione è fissa; Nel double precision si ha una precisione doppia rispetto al real. 06/10/2010 13 float (3) con il numero 1700000 Si rappresenta come 0.17E7 con 0.17 mantissa 7 esponente 06/10/2010 14 7

1. Domini elementari di SQL: Data e ora: descrivono informazioni temporali. data time [ ( Precisione ) ] [ with time zone ] timestamp [ ( Precisione ) ] [ with time zone ] Il dominio date ammette i campi year, month e day Il dominio time ammette i campi hour, minute e second Il dominio timestamp ammette tutti i campi, da year a second 06/10/2010 15 Precisione rappresenta il numero di posti decimali che deve essere utilizzato nella rappresentazione delle frazioni di secondo. Se non specificato, è pari a zero per time e a sei per timestamp. Se with time zone è specificato si ha accesso ad altri due campi, timezone_hour e timezone_minute che rappresentano la differenza tra il tempo locale (LC) e il Tempo Universale Coordinato (UCT), o Greenwich Mean Time (GMT). 06/10/2010 16 8

time (0 ) with time zone 21:03:04+1:00 Corrispondente al Tempo dell Europa Centrale 06/10/2010 17 1. Domini elementari di SQL: Intervalli temporali: consentono la rappresentazione di intervalli di tempo, come, ad esempio, la durata di un azione. Interval PrimaUnitàDiTempo [ ( Precisione ) ] [ to UltimaUnitàDiTempo [ ( Precisione ) ] ] 06/10/2010 18 9

PrimaUnitàDiTempo e UltimaUnitàDiTempo definiscono le unità di misura che devono essere usate, dalla più grande alla più piccola. La definizione è valida nei 2 sottointervalli [year,month] e [day,second]. 06/10/2010 19 Interval day(4) to second (6) Rappresenta l intervallo [0,9999] giorni e secondi con precisione al milionesimo di s. 06/10/2010 20 10

2. La sintassi per la definizione di una tabella è la seguente: create table TableName (AttributeNameDomain [DefaultValue] [Constraints] {, AttributeNameDomain [DefaultValue] [Constraints] } [OtherConstraints] ) 06/10/2010 21 Ogni tabella è definita assegnando il nome e la definizione dei suoi attributi. Ogni attributo ha un nome ed un dominio e un set di vincoli Sono poi definiti i vincoli che coinvolgono più attributi contemporaneamente. Il creatore della tabella ha tutti i privilegi che la riguardano, ossia il diritto di accesso e modifica dei dati. 06/10/2010 22 11

La relazione STUDENTI (Matricola, Cognome, Nome, Data di nascita) si può definire come: create table Studenti ( Matricola char (10) primary key, Cognome varchar (100), Nome varchar (100), Data di nascita date ) 06/10/2010 23 E possibile definire dei Domini Utente, a partire dai domini elementari. La sintassi è la seguente: create domain DomainName as ElementaryDomain [DefaultValue] [Constraints] 06/10/2010 24 12

Ogni dominio è definito assegnando: nome; un dominio elementare che a sua volta può essere user-defined; un valore di default; dei vincoli. Ogni attributo associato a tale dominio ne condivide anche i vincoli. Non esistono costruttori in grado di definire tipi record o array. 06/10/2010 25 La sintassi per la definizione di un valore di default [DefaultValue] è la seguente: default < ValoreGenerico user null > Valore generico è un valore compatibile con il dominio scelto; L opzione user definisce come valore di default lo username dell utente che crea la tabella od il dominio; Null è l opzione predefinita. Il valore di default attribuito ad un attributo ha la preminenza sul valore di default attribuito al dominio 06/10/2010 26 13

La sintassi per la definizione di un constraint [Constraints] predefinito intrarelazionale la seguente: Primary Key Unique Not null Primary Key definisce la caratteristica di chiave primaria. Se impiegato per più attributi la sintassi diviene, a piè dell elenco degli attributi: Primary Key (NomiAttributiCostituentiLaChiavePrimaria). Nessuno degli attributi della chiave primaria può assumere il valore Null Unique impone, applicato ad un attributo o ad un set di attributi, che esso sia superchiave per la relazione, ossia vi siano valori differenti per righe differenti, che possono però contenere il valore Null. Se impiegato per più attributi la sintassi diviene, a piè dell elenco degli attributi: Unique (NomiAttributiCostituentiLaChiavePrimaria). Not null indica che il valore nullo non è ammissibile come valore per l attributo, che, in assenza di un valore d ingresso, assumerà il valore di default. 06/10/2010 27 Vediamo ora come si realizzano i [ Constraints ] interrelazionali di integrità referenziale: references NomeTabellaEsterna (NomeAttributoTabellaEsterna) foreign key (NomeDegliAttributiCoinvolti ) references per ogni riga della tabella corrente (o interna) impone che il valore dell attributo specificato, se diverso dal valore nullo, sia presente nelle righe di un altra tabella (detta esterna) tra i valori del corrispondente attributo. L unico requisito che il vincolo impone è che l attributo cui si fa riferimento nella tabella esterna sia soggetto a vincolo unique, tipicamente è la chiave primaria della tabella esterna. E possibile anche confrontare ennuple di attributi se coinvolte nel vincolo. La sintassi in tal caso diviene foreign key (NomeDegliAttributiCoinvolti ) 06/10/2010 28 14

Vincolo di integrità referenziale mediante il costrutto references create table Impiegati ( Numero character (6) primary key Nome character (20) references Supervisori (Impiegato) Età integer Salario numeric (10) ) 06/10/2010 29 Vincolo di integrità referenziale mediante il costrutto foreign key e references create table IMPIEGATI ( Numero character (6) primary key Nome character (20) Età integer Salario numeric (10) foreign key (Nome, Numero ) references ANAGRAFICA (Nome, Matricola) ) Il vincolo impone che l attributo Nome e Numero della tabella IMPIEGATI possano assumere solo uno dei valori che le righe della tabella ANAGRAFICA possiedono per l attributo Nome e Matricola. 06/10/2010 30 15

Si possono introdurre violazioni modificando il contenuto della tabella interna in due modi: inserendo una nuova riga modificando il valore dell attributo referente. Per ognuna di tali violazioni si assume che l operazione venga semplicemente impedita. 06/10/2010 31 Per le tabelle esterne valgono delle regole differenti: Per le operazioni di modifiche, è possibile reagire in uno dei seguenti modi cascade: il nuovo valore dell attributo della tabella esterna viene riportato su tutte le corrispondenti righe della tabella interna; set null: all attributo referente viene assegnato il valore nullo al posto del valore modificato nella tabella esterna; set default: all attributo referente viene assegnato il valore di default posto del valore modificato nella tabella esterna; no action: l azione di modifica non viene consentita, senza che il sistema provi a riparare la violazione. 06/10/2010 32 16

Per le operazioni di cancellazione è possibile reagire in uno dei seguenti modi: cascade: tutte le righe della tabella interna corrispondenti alla riga cancellata vengono cancellate; set null: all attributo referente viene assegnato il valore nullo al posto de valore cancellato nella tabella esterna; set default: all attributo referente viene assegnato il valore di default a del valore cancellato nella tabella esterna; no action: la cancellazione non viene consentita. 06/10/2010 33 La politica di reazione viene specificata immediatamente dopo il vincolo di integrità, secondo la seguente sintassi: on < delete update > < cascade set null set default no action > 06/10/2010 34 17

Stabilire una politica di set null sulle cancellazioni e di cascade per gli update, relativamente alla tabella dell esempio precedente: create table Impiegato ( Numero character (6) primary key Nome character (20) Età integer Salario numeric (10) primary key ( Matricola ), foreign key (Nome, Numero ) references ANAGRAFICA (Nome, Matricola) on delete set null on update cascade, ) 06/10/2010 35 SQL fornisce primitive che consentono la modificazione degli schemi delle tabelle precedentemente introdotte: tali primitive sono rappresentate dai comandi: alter drop 06/10/2010 36 18

Il comando alter ha la seguente sintassi: alter domain NomeDominio < set default ValoreDefault drop default add constraint DefVincolo drop constraint Nome Vincolo > alter table NomeTabella < alter column NomeAttributo < set default NuovoDefault drop default > add constraint DefVincolo drop constraint NomeVincolo add column DefAttributo drop column NomeAttributo > 06/10/2010 37 Tramite alter domain e alter table è possibile: aggiungere e rimuovere vincoli e modificare i valori di default associati ai domini e agli attributi; aggiungere ed eliminare attributi e vincoli sullo schema di una tabella; quando si definisce un nuovo vincolo, questo deve essere soddisfatto dai dati già presenti, altrimenti l inserimento viene rifiutato. 06/10/2010 38 19

Estendere lo schema dalla tabella DIPARTIMENTO con un attributo NroUffici che permetta di rappresentare il numero di uffici di cui il dipartimento è dotato: alter table DIPARTIMENTO add column NroUffici numeric (4) 06/10/2010 39 Il comando drop ha la seguente sintassi:: drop < schema domain table view assertion > NomeElemento [ restrict I cascade ] 06/10/2010 40 20

Il comando drop permette di rimuovere dei componenti, siano essi schemi, domini, tabelle, viste o asserzioni. 06/10/2010 41 L opzione restrict specifica che il comando non deve essere eseguito in presenza di oggetti non vuoti: uno schema non è rimosso se contiene tabelle o altri oggetti; un dominio non è rimosso se appare in qualche definizione di tabella; una tabella non è rimossa se possiede delle righe o se è presente in qualche definizione di tabella/vista; una vista non è rimossa se è utilizzata nella definizione di altre tabelle o viste. L opzione restrict è l opzione di default. 06/10/2010 42 21

Con l opzione cascade tutti gli oggetti specificati devono essere rimossi. Eliminando uno schema non vuoto tutti gli oggetti che fanno parte dello schema vengono eliminati; Eliminando un dominio che compare nella definizione di qualche attributo, l opzione cascade rimuove il nome di dominio, ma gli attributi definiti utilizzando quel dominio rimangono associati al medesimo dominio elementare. Eliminando una tabella con l opzione cascade, tutte le righe vengono perse e se la tabella compariva in qualche definizione di tabella o vista, anche queste vengono rimosse; Eliminando una vista che compare nella definizione di altre tabelle o viste, anche queste tabelle e viste vengono rimosse. L opzione cascade attiva una reazione a catena: tutti gli elementi che dipendono da un elemento rimosso vengono rimossi, fino a che non si giunge in una situazione in cui non vi sono elementi nella cui definizione compaiono elementi che sono stati rimossi. ( dipendenze non risolte ) 06/10/2010 43 dizionario dei dati: descrizione delle tabelle presenti nella base di dati (mediante una struttura relazionale, cioè tramite tabelle) La base di dati contiene quindi due tipi di tabella: quelle che contengono i dati e quelle che contengono i cosiddetti metadati (dati che descrivono i dati). catalogo della base di dati: insieme di tabelle contenenti i metadati Tale caratteristica delle implementazioni dei sistemi relazionali viene detta riflessività. 06/10/2010 44 22

Lo standard SQL-2 prevede per il dizionario dei dati una descrizione in due livelli. Definition_schema: insieme di tabelle che contengono la descrizione di tutte le strutture della base di dati. Information_ schema: insieme di viste definite sul definition_schema che costituiscono un interfaccia verso il dizionario dei dati. Contiene un totale di ventitré viste che descrivono la struttura della base di dati. 06/10/2010 45 Forniamo un esempio del contenuto di una di queste viste del cat alogo, la vista Columns, per le tabelle Impiegato e Dipartimento. Table Name rappresenta il nome della tabella; Column Name è il nome dell attributo; Ordinal Position descrive la posizione dell attributo nello schema; Column Default specifica il valore di default per l attributo; Is Nullable è un valore booleano che specifica se l attributo può assumere o no un valore nullo. Table_Name Column_Name Ord_Position Column_Default Is_Nullable Impiegato Nome 1 NULL N Impiegato Cognome 2 NULL N Impiegato Dipart 3 NULL N Impiegato Ufficio 4 NULL Y Impiegato Stipendio 5 0 Y Impiegato Città 6 NULL Y Dipartimento Nome 1 NULL N Dipartimento Indirizzo 2 NULL Y Dipartimento Città 3 NULL Y 06/10/2010 46 23

La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. La separazione tra DML e DDL non è rigida e parte dei servizi di definizione di interrogazioni vengono riutilizzati nella specifica di alcuni aspetti avanzati dello schema. 06/10/2010 47 SQL esprime le interrogazioni in modo dichiarativo: si specifica l obiettivo dell interrogazione e non il modo in cui ottenerlo. SQL si contrappone a linguaggi di interrogazione procedurali, (es. l algebra relazionale), in cui l interrogazione specifica i passi da compiere per estrarre le informazioni dalla base di dati. L interrogazione SQL per essere eseguita viene passata all ottimizzatore di interrogazioni, un componente del DBMS il quale analizza l interrogazione e formula a partire da questa un interrogazione equivalente nel linguaggio procedurale interno del sistema di gestione di basi di dati, nascosto all utente. 06/10/2010 48 24

Le operazioni di interrogazione in SQL sono specificate mediante l istruzione select: select AttrEspr [ [as] Alias ] {, AttrEspr [ [as] Alias ] } target list from [ Tabella [as] Alias ] { [, Tabella [as] Alias ] } clausola from [ where Condizione ] clausola where 06/10/2010 49 L interrogazione SQL seleziona, tra le righe che appartengono al prodotto cartesiano delle tabelle elencate nella clausola from, quelle che soddisfano le condizioni espresse nell argomento della clausola where. La clausola where ammette come argomento un espressione boolena costruita combinando predicati semplici con gli operatori and, or, not. Ciascun predicato semplice usa gli operatori =, <>, >, <, <= e => per confrontare da un lato un espressione costruita a partire dai valori degli attributi per l a riga e dall altro un valore costante o un altra espressione. Il risultato dell esecuzione di una interrogazione SQL è una tabella: si ha una riga per ogni riga selezionata dalla clausola where ed una colonna per ogni colonna che si ottiene dalla valutazione delle espressioni AttrEspr che appaiono nella target list. Ogni colonna viene eventualmente ridenominata con un Alias. Anche le tabelle possono essere ridenominate con un Alias. 06/10/2010 50 25

Si consideri una base di dati contenente le tabelle: IMPIEGATO (Nome, Cognome, Dipart, Ufficio, Stipendio,Città) Nome Cognome Dipart Ufficio Stipendio Città Mario Rossi Amministr. 10 45 Carlo Bianchi Produzione 20 36 Torino Giuseppe Verdi Amministr. 20 40 Roma Franco Neri Distribuzione 16 45 Napoli Carlo Rossi Direzione 14 80 Lorenzo Lanzi Direzione 7 73 Genova Paola Bianchi Amministr. 75 40 Venezia Marco Franco Produzione 20 46 Roma DIPARTIMENTO (Nome, Indirizzo,Città). Nome Indirizzo Città Amministr. Via Tito Livio, 34 Produzione P.Le Lavater Torino Distribuzione Via Segre, 9 Roma Direzione Via Tito Livio, 34 06/10/2010 Ricerca Via Morone 51 Individuare lo stipendio degli impiegati di cognome Rossi select Stipendio as Salario from IMPIEGATO where Cognome = Rossi Salario 45 80 06/10/2010 52 26

Estrarre tutte le informazioni relative agli impiegati di cognome Rossi select * from IMPIEGATO where Cognome = Rossi Il carattere * rappresenta la selezione di tutti gli attributi delle tabelle elencate nella clausola from Salario 45 80 06/10/2010 53 Estrarre i nomi degli impiegati e le città in cui lavorano select IMPIEGATO.Nome, IMPIEGATO.Cognome, DIPARTIMENTO.Città from IMPIEGATO, DIPARTIMENTO where IMPIEGATO.Dipart = DIPARTIMENTO.Nome La clausola where è applicata sul prodotto cartesiano delle tabelle indicate nella clausola from. Nome Cognome Città Mario Carlo Giuseppe Franco Carlo Lorenzo Paola Marco Rossi Bianchi Verdi Rossi Lanzi Borroni Franco Roma Torino 06/10/2010 54 Neri Torino 27

Estrarre i nomi degli impiegati e le città in cui lavorano, utilizzando gli alias select I.Nome, I.Cognome, D.Città from IMPIEGATO as I, DIPARTIMENTO as D where Dipart = D.Nome Mediante gli alias si possono abbreviare le interrogazioni. Se non c è ambiguità si possono omettere per gli attributi le indicazioni sulle tabelle di appartenenza. Gli alias sono in realtà delle vere e proprie variabili. Nome Mario Carlo Giuseppe Franco Carlo Lorenzo Paola Marco Cognome Rossi Bianchi Verdi Rossi Lanzi Borroni Franco Roma Torino 06/10/2010 55 Neri Città Torino Estrarre i nomi ed i cognomi degli impiegati che lavorano nell ufficio 20 del dipartimento Amministrazione select Nome, Cognome from IMPIEGATO where ufficio = 20 and Dipart = Amministr. Nome Giuseppe Cognome Verdi 06/10/2010 56 28

Estrarre i nomi ed i cognomi degli impiegati che lavorano nel dipartimento Amministrazione o Produzione select Nome, Cognome from IMPIEGATO Where Dipart = Amministr. or Dipart = Produzione Nome Mario Carlo Giuseppe Paola Marco Cognome Rossi Bianchi Verdi Borroni Franco 06/10/2010 57 Estrarre i nomi propri degli impiegati di cognome Rossi che lavorano nei dipartimenti Amministrazione o Produzione select Nome from IMPIEGATO Where Cognome = Rossi and ( Dipart = Amministr. or Dipart = Produzione ) Nome Mario 06/10/2010 58 29

L operatore like consente il confronto di stringhe. Esso è utilizzato in congiunzione con i caratteri speciali _ ed %. _ indica la presenza di un carattere qualsiasi; % indica la presenza di una stringa di caratteri di lunghezza arbitraria. 06/10/2010 59 Estrarre i nomi degli impiegati che hanno nel cognome una o in seconda posizione e che terminano per i select * from IMPIEGATO Where Cognome like _o%i Nome Cognome Dipart Ufficio Stipendio Città Mario Rossi Amministr. 10 45 Carlo Rossi Direzione 14 80 Paola Borroni Amministr. 75 40 Venezia 06/10/2010 60 30

In SQL è possibile avere tabelle con righe eguali, ad esempio, come risultato di una interrogazione. Per eliminare i duplicati nella vista si usa la parola chiave distinct immediatamente dopo select. L opzione alternativa è all (default) che al contrario conserva i duplicati. 06/10/2010 61 Estrarre le città delle persone con Cognome Rossi select Città from IMPIEGATO Where Cognome = Rossi Città 06/10/2010 62 31

Estrarre le città delle persone con Cognome Rossi, facendo comparire ogni città al più una volta select distinct Città from IMPIEGATO Where Cognome = Rossi Città 06/10/2010 63 E possibile specificare in maniera differente il join, facendo uso di una sintassi diversa per il comando select: select AttrEspr [ [as] Alias ] {, AttrEspr [ [as] Alias ] } target list from [ Tabella [as] Alias ] { [join type] join [ Tabella [as] Alias ] on Condizione di join} clausola from [ where Condizione ] clausola where 06/10/2010 64 32

Il parametro [join type] specifica il tipo di join, che può essere: Inner Right outer Left outer Full L inner join è il tradizionale theta join dell algebra relazionale. 06/10/2010 65 Estrarre i nomi degli impiegati e le città in cui lavorano select Nome, Cognome, D.Città from IMPIEGATO inner join DIPARTIMENTO as D on Dipart = Nome Nome Mario Carlo Giuseppe Franco Carlo Lorenzo Paola Marco Cognome Rossi Bianchi Verdi Neri Rossi Lanzi Borroni Franco Città Torino Roma Torino 06/10/2010 66 33

Glia alias sono utili quando si deve ad esempio fare il join di una tabella con se stessa, in tal caso essi lavorano come delle vere e proprie variabili, i cui valori sono i nomi delle tabelle corrispondenti. Estrarre i nomi ed i cognomi degli impiegati che hanno lo stesso cognome, ma differente nome, di un impiegato che lavora nel dipartimento Produzione select E1.Nome, E2.Cognome from IMPIEGATO E1, IMPIEGATO E2 Iwhere E1.Cognome = E2.Cognome and E1.Nome <> E2.Nome and E2.Dipart = Produzione Nome Paola Cognome Bianchi 06/10/2010 67 Tabelle di verità per AND, OR, NOT AND V F OR V F V V F V V V F F F F V F NOT F V V F 06/10/2010 68 34

Sono rappresentate le relazioni STUDENTI, ESAMI, CORSI, con la tabella ESAMI che lega dati presenti nelle prime due. Matricola Cognome Nome Data di nascita STUDENTI 1000 Rossi Mario 7/6/71 2000 Verdi Carlo 5/5/73 3000 Neri Marco 8/5/72 4000 Bianchi Luca 8/8/74 5000 Spirito Gianfranco 12/11/70 ESAMI Codice Titolo Docente CORSI Studente Voto Corso 01 Database Alto 2000 25 01 03 Reti Basso 2000 28 03 04 Linguaggi Magro 5000 19 01 4000 22 04 06/10/2010 69 Quindi la base dati dell esempio precedente avrà il seguente schema: R = { STUDENTI (Matricola, Cognome, Nome, Data di nascita), ESAMI (Studente, Voto, Corso) CORSI (Codice, Titolo, Docente) } 06/10/2010 70 35