Tipi MULTISET: accesso



Похожие документы
DBMS (Data Base Management System)

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

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

Operazioni sui database

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

Informatica per le discipline umanistiche 2 lezione 10

Definizione di domini

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

Istruzioni DML di SQL

CONCETTO DI ANNIDAMENTO

Dati relazionali e XML

Introduzione ai Sistemi di Gestione di Basi di Dati XML

Le Basi di Dati. Le Basi di Dati

SQL - Funzioni di gruppo

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

Archivi e Basi di Dati

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

RDBMS: panorama attuale. RDBMS: panorama attuale

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

Basi di Dati: Corso di laboratorio

Esercitazione 8 Mercoledì 21 gennaio 2015 (2 ore) DDL e progettazione

SQL. Alcune note sulla definizione dei dati

Il linguaggio SQL: viste e tabelle derivate

Il linguaggio SQL: viste e tabelle derivate. Versione elettronica: SQLd-viste.pdf

Corso di Laboratorio di Basi di Dati

Utilizzando Microsoft Access. Si crea la tabella Anagrafica degli alunni,le Materie e i voti si mettono alcuni campi

SQL (STRUCTURED QUERY LANGUAGE)

Basi Di Dati, 09/12/2003

Il linguaggio SQL: query innestate

a.a. 2012/13 12 Novembre 2012 Preparazione al Test in itinere, Compito A 1. Modellare tramite uno schema entità- relazione la seguente base di dati:

Corso sul linguaggio SQL

********************* MODIFICA STRUTTURA DI UNA TABELLA (inserimento di un nuovo campo) ALTER TABLE Personale ADD Nascita date;

MAX, SUM, AVG, COUNT)

Data Management Software. Il linguaggio SQL. Raggruppamenti. Paolo Avallone Sr Consulting IT Specialist DB2, Data Management Marzo 2004

Ricorsione in SQL-99. Introduzione. Idea di base

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

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

Basi di Dati Corso di Laura in Informatica Umanistica

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

Volumi di riferimento

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

Nella relazione CINEMA, Nome è chiave secondaria. Nella relazione FILM, CodRegista, e CodProtagonista sono chiavi esterne sulla tabella PERSONE.

Laboratorio di Basi di Dati

IL DAT A B A S E DI ALGE B R A N D O

Al giorno d oggi, i sistemi per la gestione di database

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

Organizzazione degli archivi

Concetti fondamentali dei database database Cos'è un database Principali database

Lezione 8. Metadati, Viste e Trigger

User Tools: DataBase Manager

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

Laboratorio di Basi di Dati e Web

Abilità Informatiche A.A. 2010/2011 Lezione 9: Query Maschere Report. Facoltà di Lingue e Letterature Straniere

Introduzione ai database relazionali

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

Informatica Generale Andrea Corradini Sistemi di Gestione delle Basi di Dati

1. BASI DI DATI: GENERALITÀ

Si formulino le seguenti interrogazioni tramite il linguaggio SQL:

Sistemi per la gestione di database: MySQL ( )

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

INFORMATICA. Applicazioni WEB a tre livelli con approfondimento della loro manutenzione e memorizzazione dati e del DATABASE.

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

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

PROGRAMMA DI CLASSE 5AI

SQL. Linguaggio di interrogazione per basi di dati relazionali. Relazione = tabella con attributi (a 1, a 2,, a n ): Funzionalità principali di SQL:

SQL PER LA DEFINIZIONE DI BASI DI DATI

Sistemi Mobili e Wireless Android - Dati persistenti: SQLite

SQL/OLAP. Estensioni OLAP in SQL

Istruzioni SQL 1. Query di selezione 2 Istruzione SELECT 2 Istruzione SELECT DISTINCT 2 ORDER BY 3 WHERE 3 La condizione LIKE 4 BETWEEN AND 5

UNIVERSITÀ DEGLI STUDI DI UDINE Facoltà di Medicina e Chirurgia CORSO DI LAUREA IN TECNICHE DI RADIOLOGIA MEDICA PER IMMAGINI E RADIOTERAPIA ESAME

PROGRAMMAZIONE MODULARE. Periodo mensile. Ore previste

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

Riccardo Dutto, Paolo Garza Politecnico di Torino. Riccardo Dutto, Paolo Garza Politecnico di Torino

Introduzione alle basi di dati. Gestione delle informazioni. Gestione delle informazioni. Sistema informatico

19. LA PROGRAMMAZIONE LATO SERVER

Corso di Informatica (Basi di Dati)

SQL Sintassi Dei Comandi

Una metodologia di progettazione di applicazioni web centrate sui dati

1.Tutte 2.Spesso P.IVAe le CF volte che si visualizza i dati un fornitore si mostranoanche. La mensa. La mensa

INDICI. Prevediamo di effettuare spesso interrogazioni simili alle seguenti:

Vincoli di integrità

M733 ESAME DI STATO DI ISTITUTO TECNICO COMMERCIALE CORSO DI ORDINAMENTO

Biglietti e Ritardi: schema E/R

Programmazione a Oggetti Lezione 10. Ereditarieta

Il linguaggio SQL: trigger. Versione elettronica: 04.7.SQL.trigger.pdf

Gestione delle tabelle

Stored Procedures. Massimo Mecella Dipartimento di Ingegneria informatica automatica e gestionale Antonio Ruberti Sapienza Università di Roma

Preparazione. Introduzione a MySQL: costruzione di una base di dati e gestione degli accessi. Accesso all area condivisa. Avvio Server MySQL

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

INTRODUZIONE. Data Base Management Systems evoluzione tecniche gestione dati

Linguaggio SQL. Structured Query Language

Транскрипт:

Tipi MULTISET: accesso Poiche non e previsto un ordine tra gli elementi un accesso diretto come quello visto per gli array non e possibile E necessario utilizzare funzioni ad hoc Tali funzioni possono comunque essere utilizzate anche per gli array 177 Tipi MULTISET: accesso Tali funzioni trasformano un valore di tipo collezione in una tabella La tabella puo poi essere acceduta come una qualunque altra tabella Vediamo una sola di queste funzioni UNNEST 178

Funzione UNNEST UNNEST(<espressione>) 179 Il tipo di <espressione> deve essere collezione Restituisce gli elementi contenuti in <espressione> in una tabella virtuale, <espressione> puo anche essere il risultato di una query In questo caso deve essere restituita una sola tupla di tipo collezione La tabella risultato puo essere utilizzata in modo analogo ad una tabella usuale nelle interrogazioni Non puo pero essere utilizzata nei comandi di manipolazione (INSERT, DELETE, UPDATE) Esempio: UNNEST in FROM CREATE TABLE Impiegati( imp# id_impiegato, nome VARCHAR(50), competenze VARCHAR(20) MULTISET); SELECT imp#, c FROM Impiegati I, UNNEST(I.competenze) c WHERE imp# = 2; Restituisce una tupla per ogni competenza dell impiegato 2 180 l.competenze rappresenta il valore del campo competenze per la generica tupla l acceduta C rappresenta una generica competenza dell impiegato I

Esempio: UNNEST in FROM Imp# 1 2 3 Nome Mario Rossi Luigi Verdi Gianni Bianchi Competenze MULTISET[ SQL, Java, C ] MULTISET[ Oracle, MYSQL, SQL ] MULTISET[ Oracle, SQL ] SELECT imp#, c FROM Impiegati I, UNNEST(I.competenze) c as Competenza WHERE imp# = 2; 181 Imp# 2 2 2 Competenza Oracle MYSQL SQL Esempio: UNNEST in FROM CREATE TABLE Impiegati( imp# id_impiegato, nome VARCHAR(50), competenze VARCHAR(20) MULTISET); SELECT * FROM UNNEST(SELECT competenze FROM Impiegati) c Errato perche la query non e scalare 182

Aggregazione per tipi collezione Sono state introdotte tre nuove funzioni di aggregazione per tipi collezione Tali funzioni possono essere utilizzate in modo analogo alle funzioni di aggregazioni gia note (COUNT, SUM, MAX, MIN, ecc) Le funzioni sono COLLECT FUSION INTERSECTION 183 COLLECT COLLECT Funzione di aggregazione che puo essere applicata a qualunque tipo di dato Dato un (multi-)insieme di valori S di un certo tipo T, corrispondenti ad un gruppo,produce un MULTISET su T, contenente tutti i valori in S In pratica,trasforma i valori di un gruppo in un multiset 184

Esempio: UNNEST in FROM Imp# 1 2 3 Nome Mario Rossi Luigi Verdi Gianni Bianchi Competenze MULTISET[ SQL, Java, C ] MULTISET[ Oracle, MYSQL, SQL ] MULTISET[ Oracle, SQL ] SELECT COLLECT(I.Nome) as Elenco_Impiegati FROM Impiegati I; Elenco_Impiegati MULTISET[ Mario Rossi, Luigi Verdi, Gianni Bianchi ] 185 FUSION FUSION Funzione di aggregazione che puo essere applicata ad attributi di tipo MULTISET Dato un (multi-)insieme di multiset S, corrispondenti ad un gruppo, restituisce l unione dei multiset in S Il numero di duplicati nel multiset risultato è la somma del numero di duplicati che occorrono in ogni multiset del gruppo 186

Esempio: UNNEST in FROM Imp# 1 2 3 Nome Mario Rossi Luigi Verdi Gianni Bianchi Competenze MULTISET[ SQL, Java, C ] MULTISET[ Oracle, MYSQL, SQL ] MULTISET[ Oracle, SQL ] SELECT FUSION(I.Competenze) as Competenze_tot FROM Impiegati I; Competenze_tot MULTISET[ SQL, SQL, SQL, Java, C, MYSQL] 187 INTERSECTION INTERSECTION Funzione di aggregazione che puo essere applicata ad attributi di tipo MULTISET Dato un (multi-)insieme di multiset S, corrispondenti ad un gruppo, restituisce l intersezione dei multiset in S Il numero di duplicati nel multiset risultato è il minimo del numero di duplicati che occorrono in ogni multiset del gruppo 188

Esempio: UNNEST in FROM Imp# 1 2 3 Nome Mario Rossi Luigi Verdi Gianni Bianchi Competenze MULTISET[ SQL, Java, C ] MULTISET[ Oracle, MYSQL, SQL ] MULTISET[ Oracle, SQL ] SELECT INTERSECTION(I.Competenze) as Competenze_tot FROM Impiegati I; Competenze_tot MULTISET[ SQL ] 189 Esempio con gruppi Imp# 1 2 3 Nome Mario Rossi Mario Rossi Gianni Bianchi Competenze MULTISET[ SQL, Java, C ] MULTISET[ Oracle, MYSQL, SQL ] MULTISET[ Oracle, SQL ] SELECT I.Nome As Nome, FUSION(I.Competenze) as Competenze_tot FROM Impiegati I GROUP BY Nome; Nome Mario Rossi Competenze_tot MULTISET[ SQL, SQL, Java, C, MySQL ] 190 Gianni Bianchi MULTISET[ Oracle, SQL ]

Casting per tipi collezione E possibile effettuare il casting di un tipo collezione in un altro tipo collezione se e solo se e possibile effettuare il cast tra il tipo degli elementi 191 Ereditarietà 192

Ereditarietà In SQL-2003, e prevista ereditarieta singola su tipi e su tabelle Ereditarieta di tipi Permette di definire relazioni di supertipo/sottotipo Permette il riuso di codice Aspetto intensionale Ereditarieta di tabelle Permette di definire relazioni tabella/sotto-tabella Permette di estendere interrogazioni ad insiemi di tabelle gerarchicamente organizzate Aspetto estensionale 193 Ereditarietà di tipi Un sottotipo eredita gli attributi, i metodi, ed i vincoli definiti per i suoi supertipi Il sottotipo può raffinare il supertipo con nuovi attributi e metodi Nel sottotipo è anche possibile ridefinire metodi ereditati 194

Ereditarietà di tipi Puo essere definita per ADT Ereditarietà singola CREATE TYPE <nome_tipo> UNDER <nome_supertipo> AS <definizione> [NOT] FINAL; il supertipo deve essere stato dichiarato con la clausola NOT FINAL 195 Ereditarietà di tipi Clausola FINAL: non si possono definire sottotipi Clausola NOT FINAL: si possono definire sottotipi la clausola NOT FINAL è obbligatoria se la dichiarazione non specifica una superclasse in caso contrario si può scegliere 196

Esempio CREATE TYPE t_veicolo AS (modello CHAR(20), n_licenza INTEGER, ultima_revisione DATE) METHOD prox_revisione( ) RETURNS DATE NOT FINAL; 197 Esempio CREATE TYPE t_camion UNDER t_veicolo AS (peso INTEGER) NOT FINAL; CREATE TYPE t_bus UNDER t_veicolo AS (n_posti INTEGER) NOT FINAL; 198

Metodi & ereditarietà CREATE TYPE t_persona AS (nome CHAR(20), id INTEGER, data_di_nascita DATE, indirizzo t_indirizzo) METHOD età() RETURNS INTEGER NOT FINAL; 199 CREATE TYPE t_insegnante UNDER t_persona AS (stipendio DECIMAL(9,2), data_assunzione DATE, corso t_corso) NOT FINAL; Metodi & ereditarietà I metodi sono ereditati dai sottotipi allo stesso modo degli attributi: CREATE TABLE Insegnanti OF t_insegnante; SELECT nome, I.età( ) FROM Insegnanti I WHERE stipendio > 3000; 200

Metodi & ereditarietà E possibile ridefinire un metodo ereditato non è possibile ridefinire gli attributi Ad esempio al tipo t_insegnante può essere associato un metodo età che restituisce l anzianità di servizio (overriding) 201 Esempio CREATE TYPE t_insegnante UNDER t_persona AS (stipendio DECIMAL(9,2), data_assunzione DATE, corso t_corso) OVERRIDING METHOD età() RETURNS INTEGER NOT FINAL; 202

Tipi non instanziabili La dichiarazioni di un tipo specifica se il tipo può essere instanziato (quindi puo avere istanze proprio) oppure no Il default è INSTANTIABLE CREATE TYPE <nome tipo> AS <lista definizione attributi> [{INSTANTIABLE NOT INSTANTIABLE}] {FINAL NOT FINAL} 203 Sostituibilità 204 Negli OODBMS vale il principio della sostituibilità Un istanza di un tipo può essere utilizzata ovunque ci si aspetti un istanza del suo supertipo Questo principio non vale negli attuali ORDBMS per garantire sostituibilità: E necessario invocare una opportuna funzione di CAST

Ereditarietà di tabelle 205 Poiche non vale il principio di sostituibilita, in SQL- 2003 non e possibile inserire un istanza di un sottotipo in una tabella tipata basata sul super-tipo Esempio CREATE TYPE T2 UNDER T1 CREATE TABLE Tab1 OF T1 Istanze di T2 non possono essere inserite in Tab1 Per gestite istanze di T1 e istanze di T2 e quindi necessario creare due tabelle tipate In questo modo pero il contenuto delle due tabelle e indipendente, benche i tipi su cui si basano sono collegati da una relazione di ereditarieta Ereditarieta di tabelle Per risolvere questo problema, in SQL-2003 e possibile definire ereditarieta tra tabelle tipate Condizione: se Tab2 e una sotto-tabella di Tab1, allora il tipo T2 di Tab2 deve essere un sotto-tipo del tipo T1, su cui e definita Tab1 206

Esempio CREATE TABLE persone OF t_persona; CREATE TABLE insegnanti of t_insegnante UNDER persone; E stata creata una gerarchia tra le tabelle persone e insegnanti Cio e possibile poiche t_insegnante e sotto-tipo di t_persona 207 Interrogazioni La gerarchia d ereditarietà definita sulle tabelle influenza i risultati delle interrogazioni Una interrogazione fatta su una tabella si propaga automaticamente alle sottotabelle Lo stesso vale per le operazioni di cancellazione e modifica mentre una operazione di inserimento coinvolge solo una specifica tabella se si vuole restringere l operazione alle istanze di una certa tabella: ONLY 208

Esempio nome id data_di_nascita indirizzo Smith 74 16/8/68 John 86 3/2/48 Persone nome id data_di_nascita indirizzo Allen 82 9/7/67 Mark 81 3/5/58 stipendio. 30ml 60ml Insegnanti 209 Esempio SELECT nome FROM Persone WHERE data_di_nascita > 1/1/1967; Il risultato sarà: Smith e Allen SELECT nome FROM ONLY Persone WHERE data_di_nascita > 1/1/1967; 210 Il risultato sarà: Smith

Esempio DELETE FROM Persone WHERE id > 80; Cancellerà John dalla tabella Persone e Allen e Mark dalla tabella Insegnanti 211