Basi di Dati: Corso di laboratorio

Documenti analoghi
Basi di Dati: Corso di laboratorio

Basi di Dati: Corso di laboratorio

Basi di Dati: Corso di laboratorio

Basi di Dati: Corso di laboratorio

Operazioni. Lezione 8. Operazioni Relazionali. Operazioni insiemistiche Intersezione: Operazioni insiemistiche Unione:

Basi di dati - Laboratorio

SQL Matteo Magnani, Danilo Montesi Università di Bologna SQL. SQL come Data Manipulation Language - (SELECT FROM WHERE ORDER BY)

Algebra relazionale. Algebra relazionale. Operatori dell algebra relazionale. Operatori dell algebra relazionale. Algebra relazionale.

SQL - Structured Query Language

Left Join, Right Join, Full Join

Laboratorio di Basi di Dati IV esercitazione 17 aprile 2007

Lezione 6. Algebra e Calcolo Relazionale

Principi di Progettazione del Software a.a Il linguaggio SQL. Il Linguaggio SQL

Basi di Dati: Corso di laboratorio

Basi di Dati: Corso di laboratorio

Laboratorio di Basi di Dati e Web

Basi di Dati: Corso di laboratorio

SQL. SQL: "storia. Sviluppato nella metà degli anni settanta (1974) presso il laboratorio di ricerca IBM di S.Josè. Dal 1983 ca. "standard di fatto"

Structured Query Language

Corso di Informatica Medica

Operazioni Relazionali. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto san giovanni

Basi di Dati. Esercitazione 2: Interrogazioni in SQL. K. Donno - Interrogazioni in SQL

IL LINGUAGGIO SQL LE BASI

Database parte 2. Database azienda

Gestione di basi di dati relazionali con SQL (parte I) Linguaggi per basi di dati

Sommario. Introduzione... 13

Interrogazioni. L istruzione base per le interrogazioni è select

SQL - Sottointerrogazioni correlate

D B M G. Linguaggio SQL: fondamenti. Operatori insiemistici. Operatore UNION Operatore INTERSECT Operatore EXCEPT

REGISTRO DELLE LEZIONI

Modulo 2 Data Base 3

Linguaggio SQL: fondamenti D B M G

Informatica Grafica. Basi di dati parte 2

(Lezione SQL 3) Barbara Di Camillo Dipartimento di Ingegneria dell Informazione. Università degli Studi di Padova

Lezione 5. Algebra relazionale

Dati una relazione r(x) e un sottoinsieme Y di X, la proiezione di r su Y si indica con

Operatori aggregati. Operatori aggregati. Interrogazioni con raggruppamento. Interrogazioni con raggruppamento

Informatica II Basi di Dati (07/08) Parte 2. 4 Accesso ai dati di un DB. Accesso ai dati di un DB. Accesso ai dati di un DB

Il linguaggio SQL: DML di base. Versione elettronica: 04.2.SQL.DMLbase.pdf

Interrogare una base di dati: algebra relazionale e SQL. Savino Castagnozzi Giorgio Macauda Michele Meomartino Salvatore Picerno Massimiliano Sartor

Il linguaggio SQL: DML di base

Linguaggio SQL: fondamenti

Interrogazioni complesse. SQL avanzato 1

Parte III. L algebra relazionale

Interrogazioni di tipo insiemistico. Select. Interrogazioni di tipo insiemistico. Interrogazioni nidificate

Gestione e Analisi dei Dati. Lezione 2 Vincoli su attributo Selezioni semplici su una tabella

Basi di Dati. Dettagli e Approfondimenti

SQL QUERY: Le interrogazioni del database

Join esplicito. SELECT con join esplicito, sintassi. Ulteriore estensione: join naturale (meno diffuso) Outer join. Join esterno: "outer join"

Corso sul linguaggio SQL

Laboratorio di Basi di dati/web/mm e Basi di dati per Bioinformatica

Docente: Alberto Belussi e Carlo Combi. Lezione 4

Parte III L algebra relazionale

Linguaggi per Basi di Dati - 1. Algebra Relazionale. Algebra Relazionale. Linguaggi per Basi di Dati - 2. Operatori Insiemistici.

Laboratorio di Basi di dati & Basi di dati per Bioinformatica

Laboratorio di Basi di dati

SQL. Argomenti della lezione. Join esplicito. Interrogazioni complesse in SQL join esplicito outer join operatori aggregati interrogazioni nidificate

La gestione delle interrogazioni

Operazioni su insiemi: unione, intersezione e differenza

SQL /10/2016 Basi di dati - SQL 1

Join (naturale) Join. Join. Join

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

ALGEBRA RELAZIONALE. L algebra relazionale

Interrogazioni nidificate

SQL. Università degli Studi di Salerno. Corso di Laurea in Scienze della Comunicazione Informatica generale (matr. Dispari) Docente: Angela Peduto

ALGEBRA'RELAZIONALE'

Le implementazioni nei vari DBMS relazionali commerciali

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

REGISTRO DELLE LEZIONI

Alessandra Raffaetà. Esercizio: Cinema

S.I.T. PER LA VALUTAZIONE E GESTIONE DEL TERRITORIO Corso di Laurea Magistrale in Scienze Ambientali. Alessandra Raffaetà

E possibile ordinare le righe del risultato di una interrogazione attraverso la clausola order by, a chiusura di una interrogazione.

Algebra Relazionale.

Tipi di operatori. Gli operatori dell algebra relazionale sono classificabili nelle seguenti categorie:

Corso di Laurea in Ingegneria Informatica Fondamenti di Informatica II Modulo Basi di dati a.a

Algebra relazionale: operazioni

Corso sul linguaggio SQL

Prova Scritta di Basi di Dati

Operatori di base. σ F (r) = {t t r. F(t) = true} SELEZIONE σ F (r)

Vincoli interrelazionali

SQL: ALTRE FORME DI JOIN, FUNZIONI AGGREGATIVE, ESPRESSIONI. Patrizio Dazzi a.a

Interrogazioni in SQL SQL. Interrogazioni in SQL. Cenni sull implementazione

Laboratorio di Basi di Dati

Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, SQL

Algebra Relazionale. T. Catarci, M. Scannapieco, Corso di Basi di Dati, A.A. 2008/2009, Sapienza Università di Roma

Microsoft Access. Relazioni e query SQL. Domenico Fabio Savo

SQL e algebra relazionale

Corso sul linguaggio SQL

Linguaggi di interrogazione. linguaggi interrogazione 1

Il theta-join, espresso come prodotto cartesiano seguito da una selezione, è il tipo di join operativamente più generale. Infatti:

Modulo 8 I data base Unità 5 Le Query

ALGEBRA RELAZIONALE. Linguaggi di interrogazione relazionale

QL (Query Language) Alice Pavarani

Lezione 7 SQL (II) Basi di dati bis Docente Mauro Minenna Pag.1

ALGEBRA RELAZIONALE. DB -Algebra Relazionale 1

Scopo Laboratorio di Informatica

Transcript:

Basi di Dati: Corso di laboratorio Lezione 4 Raffaella Gentilini 1 / 27

Sommario 1 Join di Tabelle 2 3 2 / 27

Lo Statement JOIN Join espliciti di tabelle nella clausola FROM In SQL e possibile scrivere operazioni esplicite di join nella clausola FROM del comando SELECT, mediante lo statement JOIN si possono specificare esplicitamente diversi tipi di join: CROSS JOIN INNER JOIN LEFT OUTER JOIN RIGHT OUTER JOIN FULL OUTER JOIN NATURAL JOIN 3 / 27

In algebra relazionale, il join naturale e un operatore che collega dati in relazioni diverse, sulla base di valori uguali in attributi con lo stesso nome Il join naturale R 1 R 2 puo essere introdotto esplicitamente nella clausola FROM del comando SELECT utilizzando 1 il costrutto NATURAL [INNER] JOIN: SELECT FROM R 1 NATURAL [INNER] JOIN R 2 2 il costrutto [INNER] JOIN + USING: SELECT FROM R 1 [INNER] JOIN R 2 USING <attributi> Lo statement USING permette di eliminare le colonne duplicate nel risultato 4 / 27

Esempio (I) Si considerino le tabelle insegnante e corso illustrate di seguito: id insegnante cognome nome 3 Donato Rocco 2 Bella Donatella 7 Pupo Pino 10 Moreno Mario id corso id insegnante titolo 1 3 Circuiti 2 2 Programmazione 3 Algoritmi 10 Logica 5 / 27

Esempio (II) Example (join naturale di insegnante e corso) Il join naturale delle tabelle corso e insegnante si puo ottenere usando indifferentemente uno dei seguenti comandi: SELECT FROM insegnate NATURAL JOIN corso; SELECT FROM insegnate NATURAL INNER JOIN corso; SELECT FROM insegnate JOIN corso USING (id insegnante); SELECT FROM insegnate INNER JOIN corso USING (id insegnante); e produce il risultato: id insegnante cognome nome id corso titolo 3 Donato Rocco 1 Circuiti 2 Bella Donatella 2 Programmazione 6 / 27

L operatore dell algebra relazionale di theta join R 1 exp R 2 σ exp (R 1 R 2 ) puo essere introdotto esplicitamente nella clausola FROM SELECT utilizzando: il costrutto [INNER] JOIN + ON: del comando SELECT FROM R 1 [INNER] JOIN R 2 ON <predicato> dove <predicato> e un espressione logica (come nella clausola WHERE). 7 / 27

Esempio Si considerino le tabelle persona e frequenta illustrate di seguito: Example id insegnante cognome nome 3 Donato Rocco 2 Bella Donatella 7 Pupo Pino 10 Moreno Mario id corso id insegnante titolo 1 3 Circuiti 2 2 Programmazione 3 Algoritmi 10 Logica 8 / 27

Esempio (II) Example Selezionare i corsi per cui e definito il corrispondente titolare del corso: utilizzando il costrutto INNER JOIN esplicitamente nella clausola FROM SELECT id corso, titolo FROM insegnante INNER JOIN corso ON insegnante.id insegnante = corso.id insegnante; oppure, data l equivalenza R 1 exp R 2 σ exp (R 1 R 2 ) SELECT id corso, titolo FROM insegnante, corso WHERE insegnante.id insegnante = corso.id insegnante; 9 / 27

CROSS JOIN Il costrutto CROSS JOIN nella clausola FROM L operazione di prodotto cartesiano nell algebra relazionale puo essere vista come un operazione di theta-join: R 1 R 2 R 1 true R 2 Le seguenti espressioni sono equivalenti in SQL: 1 SELECT FROM tabella1, tabella2; 2 SELECT FROM tabella1 CROSS JOIN tabella2; 3 SELECT FROM tabella1 JOIN tabella2 ON TRUE; 4 SELECT FROM tabella1 INNER JOIN tabella2 ON TRUE; 10 / 27

Il risultato del join tralascia le tuple di una relazione senza controparte nell altra Il join esterno prevede che tutte le tuple diano un contributo al risultato, estendendo con valori nulli le tuple che non hanno controparte Il join sinistro estende le tuple del primo operando Il join destro estende le tuple del secondo operando Il join completo le estende tutte 11 / 27

in SQL In SQL l operatore di outer join puo essere introdotto esplicitamente nella clausola FROM del comando SELECT utilizzando i costrutti: {LEFT RIGHT FULL}[OUTER]JOIN + ON <predicato> {LEFT RIGHT FULL}[OUTER]JOIN + USING <colonne> NATURAL{LEFT RIGHT FULL}[OUTER]JOIN 12 / 27

Sinistro in SQL Si considerino le tabelle insegnante e corso illustrate di seguito: id insegnante cognome nome 3 Donato Rocco 2 Bella Donatella 7 Pupo Pino 10 Moreno Mario id corso id insegnante titolo 1 3 Circuiti 2 2 Programmazione 3 Algoritmi 10 Logica 13 / 27

Sinistro in SQL Example (Join sinistro insegnante e corso) Il join esterno sinistro delle tabelle insegnante e corso: permette di preservare nel risultato gli insegnanti che non tengono alcun corso id insegnante cognome nome id corso titolo 3 Donato Rocco 1 Circuiti 2 Bella Donatella 2 Programmazione 7 Pupo Pino 10 Moreno Mario 14 / 27

Sinistro in SQL Example (Join sinistro insegnante e corso) puo essere realizzato in SQL mediante uno dei seguenti comandi: SELECT FROM insegnante NATURAL LEFT JOIN corso; SELECT FROM insegnante NATURAL LEFT OUTER JOIN corso; SELECT FROM insegnante LEFT JOIN corso USING (id insegnante); SELECT FROM insegnante LEFT OUTER JOIN corso USING (id insegnante); 15 / 27

Sinistro in SQL Example Se si usa uno dei due comandi: SELECT FROM insegnante LEFT JOIN corso ON insegnante.id insegnante = corso.id corso; SELECT FROM insegnante LEFT OUTER JOIN corso ON insegnante.id insegnante = corso.id corso; La colonna che mantiene gli id degli insegnanti appare duplicata nel risultato. 16 / 27

Destro in SQL Example (Join destro insegnante e corso) Il join esterno sinistro delle tabelle insegnante e corso: permette di preservare nel risultato i corsi per cui non e stato designato alcun titolare del corso id insegnante cognome nome id corso titolo 3 Donato Rocco 1 Circuiti 2 Bella Donatella 2 Programmazione 3 Algoritmi 7 Logica 17 / 27

Destro in SQL Example (Join destro insegnante e corso) puo essere realizzato in SQL mediante uno dei seguenti comandi: SELECT FROM insegnante NATURAL RIGHT JOIN corso; SELECT FROM insegnante NATURAL RIGHT OUTER JOIN corso; SELECT FROM insegnante RIGHT JOIN corso USING (id insegnante); SELECT FROM insegnante RIGHT OUTER JOIN corso USING (id insegnante); 18 / 27

Completo in SQL Example (Join completo insegnante e corso) Il join esterno completo delle tabelle insegnante e corso: permette di preservare nel risultato gli insegnanti che non tengono alcun corso ed i corsi non ancora assegnati ad alcun docente. id insegnante cognome nome id corso titolo 3 Donato Rocco 1 Circuiti 2 Bella Donatella 2 Programmazione 3 Algoritmi 7 Logica 7 Pupo Pino 10 Moreno Mario 19 / 27

Completo in SQL Example (Join completo insegnante e corso) puo essere realizzato in SQL mediante uno dei seguenti comandi: SELECT FROM insegnante NATURAL FULL JOIN corso; SELECT FROM insegnante NATURAL FULL OUTER JOIN corso; SELECT FROM insegnante FULL JOIN corso USING (id insegnante); SELECT FROM insegnante FULL OUTER JOIN corso USING (id insegnante); 20 / 27

Operazioni insiemistiche su tabelle L istruzione SELECT non permette di eseguire unione, intersezione e differenza di tabelle; Si puo pero combinare in modo opportuno i risultati di due istruzioni SELECT utilizzando la clausola: [ { UNION INTERSECT EXCEPT [ ALL ]}<richiesta> ] gli elementi delle SELECT list devono avere tipi compatibili e gli stessi nomi se si vogliono colonne con un intestazione definita; L ordine degli elementi e importante (notazione posizionale); Il risultato e di default privo di duplicati. Per ottenerli occorre aggiungere l opzione ALL: 21 / 27

Example A B C B Tabella S: 1 a 1 a 2 a 2 b 2 c 3 b Tabella R: 1 a 1 b 2 a 2 c 3 c 4 d SELECT A FROM R UNION SELECT C FROM S; Il risultato e : 1 2 3 4 22 / 27

Example A B C B Tabella S: 1 a 1 a 2 a 2 b 2 c 3 b Tabella R: 1 a 1 b 2 a 2 c 3 c 4 d SELECT A FROM R UNION SELECT C AS A FROM S; Il risultato e : A 1 2 3 4 23 / 27

Example A B C B Tabella S: 1 a 1 a 2 a Tabella R: 1 a 1 b 2 a SELECT B FROM R UNION ALL SELECT B FROM S; Il risultato e : B a a a a b a 24 / 27

Sommario (I) Sinassi del costrutto di Join Ricapitolando: e possibile definire esplicitamente una joined (intermediate) table nella clausola FROM del comando SELECT utilizzando una delle tre sinassi: 1 < tabella1> [{{RIGHT LEFT FULL}[OUTER]}] JOIN <tabella2> ON <predicato> [... ] 2 < tabella1> [{{RIGHT LEFT FULL}[OUTER]}] JOIN <tabella2> USING (<colonna> [,... ]) [... ] 3 < tabella1> NATURAL [{{RIGHT LEFT FULL}[OUTER]}] JOIN <tabella2> [... ] 25 / 27

Sommario Traduzione degli operatori insiemistici (II) L operatore insiemistico di unione relazione 1 relazione 2 si puo tradurre in SQL con: SELECT FROM relazione 1 UNION SELECT FROM relazione 2 ; L operatore insiemistico di intersezione relazione 1 relazione 2 si puo tradurre in SQL con: SELECT FROM relazione 1 INTERSECT SELECT FROM relazione 2 ; L operatore insiemistico di differenza relazione 1 \ relazione 2 si puo tradurre in SQL con: SELECT FROM relazione 1 EXCEPT SELECT FROM relazione 2 ; 26 / 27

Bibliografia Bibliografia ed Approfondimenti R.A.Elmasri, S.B. Navathe. Sistemi di Basi di Dati Fondamenti: Capitolo 8 Capitolo 6 (Data Manipulation) del manuale di PostgreSQL (http://www.postgresql.org/docs/manuals/) 27 / 27