Laboratorio di Basi di Dati Introduzione a SQL

Похожие документы
SQL SQL. Definizione dei dati. Domini. Esistono 6 domini elementari:

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

Definizione di domini

Laboratorio di Basi di Dati e Web

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

Gestione delle tabelle

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

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

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

SQL Sintassi Dei Comandi

Laboratorio di Basi di Dati

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


Basi di Dati: Corso di laboratorio

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)

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

SQL. Storia e standard

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

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

SQL: Concetti Base -Prima Parte-

Il linguaggio SQL: DDL di base

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

Linguaggio SQL. Structured Query Language

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

Basi di Dati prof. Letizia Tanca

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

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

DBMS (Data Base Management System)

Vincoli di Integrità Approccio dichiarativo alla loro implementazione

SQL (STRUCTURED QUERY LANGUAGE)

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

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

SQL (STRUCTURED QUERY LANGUAGE)

Corso sul linguaggio SQL

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

Informatica per le discipline umanistiche 2 lezione 10

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

Basi di Dati Relazionali

Vincoli di Integrità

SQL. Alcune note sulla definizione dei dati

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

Corso di Informatica Generale 1 IN1. Linguaggio SQL

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

Corso sul linguaggio SQL

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

SQL. (Structured Query Language) Eugenio Di Sciascio

SQL non è solo un linguaggio di interrogazione (Query Language), ma. Un linguaggio per la definizione di basi di dati (Data-definition language (DDL))

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

Volumi di riferimento

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

SQL PER LA DEFINIZIONE DI BASI DI DATI

Organizzazione degli archivi

DUE GRUPPI DI COMANDI

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

Basi di Dati: Corso di laboratorio

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

Il linguaggio SQL: le basi

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

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

Linguaggio SQL Descriviamo la notazione usata nel seguito:

Lezione 8. Metadati, Viste e Trigger

Il Modello Relazionale

MAX, SUM, AVG, COUNT)

Lo schema concettuale risultante dalla progettazione concettuale è l input alla fase di progettazione logica.

SQL Manuale introduttivo

Appunti di MySql. Evoluzione di un tutorial di base di mysql, scritto da Etel Sverdlov.

Introduzione a MySQL

Introduzione al linguaggio SQL

MODELLO RELAZIONALE. cesarini-bdsi mod relazionale 1 MODELLO RELAZIONALE

Corso di Laboratorio di Basi di Dati

INDICI. Prevediamo di effettuare spesso interrogazioni simili alle seguenti:

2104 volume III Programmazione

Esercitazione 1. Sistemi Informativi T. Versione elettronica: L01.2.DDLDMLbase.pdf

Archivi e Basi di Dati

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

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

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

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

Il Modello Relazionale

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

Descrizione del linguaggio SQL Definizione del database. Giovanna Rosone 02-03/03/2010

SISTEMI INFORMATIVI AVANZATI -2010/ Introduzione

PROGRAMMA DI CLASSE 5AI

Structured Query Language parte 1

Basi di dati Il linguaggio SQL

Basi di dati Il linguaggio SQL

BASE DI DATI: sicurezza. Informatica febbraio ASA

Транскрипт:

Laboratorio di Basi di Dati Introduzione a SQL Pierluigi Pierini Technolabs S.p.a. Pierluigi.Pierini@technolabs.it

evoluzione e standards 1970 - E.F. Codd, A Relational Model of Data for Large Shared Data Banks. 1974 - Donald D. Chamberlin and Raymond F. Boyce of IBM created the Structured English Query Language (SEQUEL) 1979 - Relational Software Inc. (ora Oracle Corp.) lancia Oracle_v2 1983 - IBM rilascia DB2 1986 - ANSI rilascia il primo standard SQL-87 1999 - esce SQL:1999 (SQL3) con significativi aggiornamenti rispetto a SQL-87 2003 - esce SQL:2003, introduce XML 2006 - SQL:2006 estende i criteri di interazione tra XML e SQL 2008 - SQL:2008 (ISO/IEC 9075:2008)

introduzione SQL non è un linguaggio di programmazione paradigma dichiarativo: si specifica la descrizione dell obiettivo e non il modo con cui ottenerlo (a differenza dell algebra relazionale, che è procedurale) l interrogazione in SQL viene tradotta dai DBMS in linguaggio procedurale, quindi viene ottimizzata sulla traduzione si fanno ottimizzazioni algebriche (ecco a cosa serve l algebra!!!) e non (queste ultime dipendono dalle strutture sottostanti al DBMS in questione)

introduzione permette di definire lo schema di un database, popolarne le tabelle, aggiornarne i dati, eseguire query, definire vincoli ed autorizzazioni. le implementazioni SQL in genere non rispettano pienamente standard (vari dialetti)

introduzione Data Definition Language (DDL): definizione dello schema del DB Data Manipulation Language (DML): utilizzo dei dati del DB Data Control Language (DCL): gestione degli utenti gestione dei diritti ottimizzazione

DDL (Data Definition Language) E il primo dei linguaggi di SQL ed è dedicato alla definizione della parte intensionale del database: creazione del database tabelle, campi e domini indici eventuali modifiche allo schema (vincoli, autorizzazioni) DDL schema del DB

creazione di database sintassi: create database <database> [create-specs] se non vi sono create-specs, il DBMS alloca un insieme di risorse predefinite per il nuovo database (e.g. character set, page size, etc..). Esempio: CREATE DATABASE Biblioteca

modifica di database sintassi: alter database <database> <alterspecs> Modifica le impostazioni relative alle risorse fisiche impegnate dal database indicato Esempio: ALTER DATABASE Biblioteca ADD FILE bib2.gdb

cancellazione di database sintassi: drop database <database> Cancella tutte le tabelle e libera le risorse fisiche impegnate dal database indicato Esempio: DROP DATABASE Biblioteca

creazione di schema Per passare alla definizione dello schema delle singole tabelle, SQL richiede l ulteriore comando CREATE SCHEMA (in molte implementazioni è sinonimo di create database) Sintassi: CREATE SCHEMA [AUTHORIZATION owner] [schema elements] AUTHORIZATION specifica il proprietario dello schema che si va definendo schema elements comprende la definizione dello schema delle singole tabelle (CREATE TABLE), i diritti di accesso (GRANT) e le viste (CREATE VIEW).

esempio CREATE DATABASE DBlibri CREATE SCHEMA AUTHORIZATION db35 CREATE TABLE libri (isbn INT.) GRANT SELECT on libri to public...

definizione di dominio un dominio è un insieme di valori ammissibili per un attributo (concetto simile a quello di tipo ) SQL offre 6 famiglie di domini predefiniti: Carattere Bit Tipi numerici esatti Tipi numerici approssimati Data e ora Intervalli temporali si possono creare/manipolare domini nuovi a partire da quelli di base ( tipi composti ) con i costrutti: create/alter/drop domain

character per rappresentare caratteri singoli e stringhe a lunghezza fissa o variabile si puo` scegliere tra diversi alfabeti character [varying varying][(lunghmax)] [character set Fam] forme abbreviate: char char, varchar Es char, char(20), varchar(50)

bit per rappresentare bit (0,1) e stringhe di bit a lunghezza fissa o variabile utili per rappresentare in modo compatto insiemi di valori booleani bit [varying varying][(lunghmax)] forme abbreviate: varbit Es varbit(20), stringhe di bit lunghe al max 20

tipi numerici esatti per rappresentare valori esatti, interi o con parte decimale di lungh. prefissata numeric [(precision [, scale])] prec. esatta decimal [(precision [, scale])] prec. minima precision = numero di cifre significative (se non si indica, si usa quella di default del DBMS) scale = numero di cifre dopo la virgola (default=0) x = n x 10 -s n è intero e -10 p n < 10 p integer (intero a 32 bit) integer smallint (intero a 16 bit) Es decimal(4) tra 10000 e +9999 Es numeric(6,3) tra 1000,000 e +999,999

tipi numerici approssimati per rappresentare valori reali float[(precision)] double precision real Rappresentazione <mantissa>e<esponente> (precision indica le cifre della mantissa) Es 0.17E16 = 0.17 * 10 16

tipi temporali data e ora date contiene: year, month, day time contiene: hour, minute, second timestamp contiene: year, month, day, hour, minute, second intervalli temporali year-month per intervalli di anni e mesi; day-time time: per intervalli di giorni, ore, minuti e secondi interval due forme: year

tipi booleani non sono implementati in tutti i DBMS and T T T F F N N eventualmente sono sostituiti da un dominio definito dall utente F N F N F F F N boolean or T F N T T T T Può assumere valori: true, false e null F N not T T F N N N T F F T N N

valori di default per domini e attributi di tabelle valore che viene assegnato se non ne viene specificato un altro default <val null user > val: valore o espressione con tipo compatibile user: identificativo utente (per domini di tipo character ) null: valore costante che rappresenta assenza di informazione (i.e valore non noto o non applicabile); è compatibile con ogni tipo

operatori e funzioni funzioni aritmetiche di base + - * /, NULL=0 operatori di confronto <, =, >, <=, >=, <> operatori logici AND, OR, NOT funzioni scalari ABS(n), MOD(n,m), SQRT(n),... funzioni per stringhe LENGTH(s), SUBSTR(s,m[,n]), CONCAT(s1,s2,..) espressioni regolari e operatori di confronto per stringhe (LIKE) Test su valori null o diversi da null IS [NOT] NULL

creazione di un dominio composto Un dominio composto si costruisce come un sottoinsieme di un dominio predefinito che soddisfi specifiche condizioni e vincoli: create domain nome-dom as tipo [default value][not NULL][check vincoli] Es create domain annocorso as smallint default 1 not null check (value between 1 and 5)

definizione di vincoli Un vincolo è definibile tramite un espressione costruita sulla base delle funzioni e degli operatori del linguaggio. sintassi: check [VALUE <val>] <condition> <condition> = <operator> <val> [NOT] LIKE <val> [NOT] BETWEEN <val> AND <val> IS [NOT] NULL [NOT] IN (<val> [, <val> ] ) [NOT] CONTAINING <val> [NOT] STARTING [WITH] <val> (<condition>) NOT <condition> <condition> OR <condition> <condition> AND <condition> <val> = { :variable <constant> <expr> <function> NULL USER } <constant> = num 'string' <function> = COUNT (<val>) SUM (<val>) AVG (<val>) MAX (<val>) MIN (<val>) UPPER (<val>) CAST (<val> AS <datatype>)..

modifica/cancellazione di un dominio modifica di un dominio composto: alter domain nome-dom set [default value][not NULL][check vincoli] cancellazione di un dominio composto: drop domain nome-dom Es alter domain annocorso set type int Es drop domain annocorso

creazione di tabella (relazione) una tabella è una collezione di attributi (i.e.colonne) e può avere vincoli ciascun attributo può, a sua volta, avere dei vincoli create table nome-tab (col-spec [,col-spec tab-constraint ]) col-spec: nomeattr dominio [default-value] [vincoli] Inizialmente la tabella è vuota e il proprietario ha tutti i privilegi Es create table Persona (Nome char(20) not null unique, Cognome char(20) primary key, NumFigli smallint default 0)

vincoli intrarelazionali su tabelle e domini: specificano proprietà che ogni istanza del DB deve verificare vincoli predefiniti: not null: non può assumere valore nullo unique: attributo (insieme di attributi unique(attr {,attr})) è superchiave primary key: attributi come chiave primaria (implica il primary key not null) vincoli non predefiniti: check...

vincoli interrelazionali (I) foreign key: chiave esterna, impone che su ogni riga della tabella corrente (interna) il valore degli attributi specificati, se div. da null, sia presente nelle tuple della tabella esterna tra i valori dei corrisp. attributi. La sintassi impone che l insieme di attributi della tab. esterna sia unique, cioe` superchiave (vincolo di integrita` referenziale) references: foreign key su singolo attributo Es1 create table Impiegato ( Dip char(15) references ) Impiegato(Matr,Nome, Cogn,Dip,Stip) Dipartimento(NomeDip, ) Dipartimento(NomeDip)

vincoli interrelazionali (II) Es2 create table Impiegati (Matr character(6) primary key, Cogn character(20) not null, Nome character(20) not null, Dip character(15) references Dipartimento(NomeDip), Stip numeric(6) default 0, unique(nome,cogn) foreign key(nome,cogn) references Anagrafica(Nome,Cognome)) NB Conta l ordine degli attributi nella foreign key

gestione vincoli Vincoli intrarelazionali: il DBMS verifica che per ogni istanza (inserimento/modifica) i vincoli non siano violati. In caso di violazione, l aggiunta/modifica viene rifiutata con un messaggio di errore Vincoli interrelazionali: non tutte le violazioni vengono trattate nello stesso modo politiche di reazione alle violazioni

gestione vincoli integrità referenziale (I) violazione su tabella interna (inserimento/modifica riga) DBMS rifiuta l operazione violazione su tabella esterna (cancellazione/modifica riga a cui fa riferimento tabella interna) l esterna e` la tabella principale politiche specifiche

gestione vincoli integrità referenziale (II): modifica cascade: valore di tab esterna riportato su tutte tab interne cascade set null: inserisce null come valore degli attributi corrispondenti nelle tab interne set null set default: inserisce il valore di default set default no action: non si permette la modifica alla tab esterna no action

gestione vincoli integrità referenziale (III): cancellazione cascade: cancellazione delle righe corrispondenti anche dalle tab interne cascade set null: inserisce null come valore degli attributi nelle tab interne corrispondenti ai valori delle righe cancellate nella tab esterna set null set default: inserisce il valore di default set default no action: non si permette la cancellazione nella tab esterna no action

gestione vincoli integrità referenziale (IV) cascade prevede una stretta dipendenza tra le tabelle esterna ed interna si possono adottare politiche diverse si possono innescare reazioni a catena!

specifica di politica di reazione on <delete update> <cascade set null set default no action> Es2 create table Impiegati (Matr character(6) primary key, Cogn character(20) not null, Nome character(20) not null, Dip character(15), Stip numeric(6) default 0, unique(cogn,nome) foreign key(dip) references Dipartimento(NomeDip) on delete set null on update cascade)

modifica di una tabella modifica di una tabella: alter table nome-tab <operation>[, <operation> ]; <operation> = { ADD [COLUMN] nome-col <col_def> ADD <constraint> ALTER [COLUMN] column_name <alt_col> DROP col DROP CONSTRAINT constraint} <alt_col> = {TO new_col_name TYPE new_col_datatype POSITION new_col_position} Es: alter table Dipartimento ADD NUff int

cancellazione di una tabella cancellazione di una tabella: drop table nome-tab Es drop table Dipartimento

Inserire (I) query insert into nome-tab [(lista-attr)] <values (lista-valori) SelectSQL> Es1 insert into Dipart (Nome,Citta) values ( produzione, Torino ) Es2 insert into Prodotti-Milanesi (select Cod,Descr from Prodotto where Luogo = Milano )

Inserire (II) Conta l ordine con cui si elencano gli attributi (anche nella query) e i valori Se i valori non sono specificati: o null o valore di default (a seconda di come e` stata creata la tabella) Di solito vengono fornite delle form che nascondono le insert

Delete (I) delete from nome-tab [where condizione] Es1 delete from Dipart where Nome = produzione Es2 delete from Dipart where Nome not in (select Dip from Impiegato)

Delete (II) Se non c e` nessuna condizione, cancella tutta la nome-tab (attenzione ai cascade!!!) (1) delete from Dipart diverso da (2) drop table Dipart cascade diverso da (3) drop table Dipart restrict (1) cancella le righe della tabella (se c era cascade, cancella righe di altre tab. legate da vincoli integr. ref.) (2) rimuove la tabella (3) non cancella la tabella se ha tuple

Update (I) update nome-tab set attributo = <espressione SelectSQL null default> {,attributo = < >} [where condizione] Es1 update Dipendente set Stip = StipBase + 5 where matr = 666 Senza condizione, si modificano tutte le tuple

Update (II) 10% 15% Es2 1) update Impiegato set Stip = Stip*1.1 where Stip <= 30 2) update Impiegato set Stip = Stip*1.15 where Stip > 30 Il risultato è diverso se eseguite nell'ordine indicato o viceversa. SQL e` set-oriented e non tuple-oriented (come alternativa paraziale uso dei cursori )

Viste (tabelle virtuali) (I) create view nome-vista[(lista-attr)] as SelectSQL [with with[local cascade] check option] es1 Create view ImpAmm(Matr,Nome,Cogn,Stip) as select Matr,Nome,Cogn,Stip from Impiegato where Dip = Amm and Stip > 10

Viste (II) Utili per interrogazioni complesse Le viste possono usare altre viste, ma non possono esserci dipendenze ricorsive immediate (es. V1 usa V1) o transitive (es. V1 usa V2 che usa V3 che usa V1)

Viste (III) Su certe viste possibile fare modifiche che si ripercuotono sulle tabelle di base ( reali ) In generale, problemi se ci sono join molto complessi Regola: 1 tupla vista = 1 tupla tabella di base Nei sistemi commerciali viste definite su una sola tabella reale + ins. attr della vista contengono key prim. della tabella

Controllo dell accesso (I) Utente identificato in modo univoco (es. il system administrator, predefinito e molto potente) Si da il controllo e l accesso a risorse tramite privilegi grant e revoke privilegi revoke per dare e revocare i

Controllo dell accesso (II) I privilegi sono: insert ( es. tabelle, viste, asserzioni), update (es. tabelle, viste, attributi), delete (es. tabelle, viste, asserzioni), select (es. tabelle, viste, attributi nelle interrogazioni), reference (es. tabelle usate per vincoli di integrita` referenziali), usage (es. domini nella def. di schemi di rel.), drop/alter (solo il creatore puo` usarli)

Controllo (III) grant privilegi on risorse to utenti [with grant option] revoke privilegi on risorse from utenti [restrict cascade]