Basi di Dati: Corso di laboratorio

Documenti analoghi
Basi di Dati: Corso di laboratorio

Basi di Dati: Corso di laboratorio

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

Structured Query Language

Structured. Language. Basi di Dati. Introduzione. DDL: Data Definition Language. Tipi di dato. Query. Modifica dei Dati

Caratteristiche dei linguaggi per Database

Basi di Dati: Corso di laboratorio

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

SQL quick reference. piccolo manuale di riferimento dei principali comandi SQL (prof. Claudio Maccherani, Perugia, 2013)

Alessandra Raffaetà. Esercizio: Cinema

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

Manuale SQL. Manuale SQL - 1 -

Linguaggio SQL seconda parte

SQL - Structured Query Language

SQL - Sottointerrogazioni correlate

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

Interrogazioni nidificate

Basi di Dati: Corso di laboratorio

Esercitazione: Interrogazioni SQL

SELECT s.nome, e.data Studenti s, Esami e WHERE e.materia = 'BD' AND e.voto = 30 AND e.matricola = s.matricola

Il linguaggio SQL: le basi

SQL - Sottointerrogazioni

Interrogazioni nidificate

Operatori aggregati: COUNT

ESERCITAZIONI ACCESS

Interrogare una base di dati: Algebra relazionale e SQL. Alessandro Bardine Alessandro Ciaramella Vincenzo Galella Rudy Manganelli

SQL: Structured Query Language. T. Catarci, M. Scannapieco, Corso di Basi di Dati, A.A. 2008/2009, Sapienza Università di Roma

Linguaggio SQL. studenti matricola nome cognome citta anno 11 marco bini bologna laura sicuro rimini 1984 esami codice

DATABASE PER IL WEB. Programmazione Web 1

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

MODULO 2. Query normali e parametriche Query di:

Sommario. Introduzione... 13

Elena Baralis 2007 Politecnico di Torino 1

SQL (STRUCTURED QUERY LANGUAGE)

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

Algebra relazionale: operazioni

Il linguaggio SQL: raggruppamenti

Data Management Software. Il linguaggio SQL. Query Innestate. Paolo Avallone Sr Consulting IT Specialist DB2, Data Management 10 Settembre 2003

Domande utili alla preparazione dell orale di Informatica all Esame di Stato

Esempio di database relazionale con l utilizzo del prodotto MySQL

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

<Nome Tabella>.<attributo>

Lezione 6. Algebra e Calcolo Relazionale

SQL e algebra relazionale

SQL QUERY: Le interrogazioni del database

BASI DATI: algebra relazionale

PROGETTAZIONE DI DATABASE Linguaggio SQL

Il linguaggio SQL: raggruppamenti. Versione elettronica: SQLb-gruppi.pdf

Corso di Access. Prerequisiti. Modulo L2 A (Access) Le query

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

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

Database Lezione 1. Sommario. - Introduzione - Tabelle e chiave primaria - Query - Calcoli ed alias - Ordinamento

I.I.S. G. COSSALI - ORZINUOVI DATABASE. Marzo 2017 Prof. Dario Tomasoni 1

Basi di Dati Corso di Laura in Informatica Umanistica

3 SQL : Interrogazioni

Esercitazione 3 SQL 2

Microsoft Access. Microsoft Access. Maurizio Rebaudengo, Paolo Garza 1. Microsoft Access. Creazione base di dati. Apertura di una base dati

Oracle Database 10g: Introduction to SQL - LVC

Corso di Basi di Dati

Database Lezione 2. Sommario. - Progettazione di un database - Join - Valore NULL - Operatori aggregati

Capitolo 4. SQL: il linguaggio di interrogazione. Originato da SEQUEL-XRM e System-R ( ) dell IBM

Transcript:

Basi di Dati: Corso di laboratorio Lezione 3 Raffaella Gentilini 1 / 52

Sommario 1 Il DML di SQL: Interrogazione di una BD 2 / 52

Data Manipulation Language (DML) Istruzioni del DML Le istruzioni del DML di SQL sono: Modifica INSERT: Inserisce nuove tuple nel DB UPDATE : Cancella tuple dal DB DELETE : Modifica tuple nel DB Interrogazione SELECT: Esegue interrogazioni (query) sul DB 3 / 52

Data Manipulation Language (DML) Istruzioni del DML Le istruzioni del DML di SQL sono: Modifica INSERT: Inserisce nuove tuple nel DB UPDATE : Cancella tuple dal DB DELETE : Modifica tuple nel DB Interrogazione SELECT: Esegue interrogazioni (query) sul DB 4 / 52

L Istruzione SELECT Sintassi generale del comando SELECT SELECT [ ALL DISTINCT ] { <espressione> [ AS <nome> ] } [,... ] FROM <nome tab> [ [ AS ]<alias> ] [ WHERE <predicato> ] [ GROUP BY <espressione> [,... ] ] [ HAVING <predicato> ] [ { UNION INTERSECT EXCEPT [ ALL ]}<richiesta> ] [ ORDER BY <espressione> [ ASC DESC ] [,... ] ] L istruzione SELECT e composta da 7 clausole, di cui 5 opzionali. 5 / 52

L Istruzione SELECT Sintassi generale del comando SELECT SELECT [ ALL DISTINCT ] { <espressione> [ AS <nome> ] } [,... ] FROM <nome tab> [ [ AS ]<alias> ] [ WHERE <predicato> ] [ GROUP BY <espressione> [,... ] ] [ HAVING <predicato> ] [ { UNION INTERSECT EXCEPT [ ALL ]}<richiesta> ] [ ORDER BY <espressione> [ ASC DESC ] [,... ] ] Clausola SELECT Permette di specificare gli attributi che devono apparire nel risultato della query. 6 / 52

L Istruzione SELECT Sintassi generale del comando SELECT SELECT [ ALL DISTINCT ] { <espressione> [ AS <nome> ] } [,... ] FROM <nome tab> [ [ AS ]<alias> ] [ WHERE <predicato> ] [ GROUP BY <espressione> [,... ] ] [ HAVING <predicato> ] [ { UNION INTERSECT EXCEPT [ ALL ]}<richiesta> ] [ ORDER BY <espressione> [ ASC DESC ] [,... ] ] Clausola FROM Specifica tabelle (/e) su cui viene posta la query. 7 / 52

L Istruzione SELECT Sintassi generale del comando SELECT SELECT [ ALL DISTINCT ] { <espressione> [ AS <nome> ] } [,... ] FROM <nome tab> [ [ AS ]<alias> ] [ WHERE <predicato> ] [ GROUP BY <espressione> [,... ] ] [ HAVING <predicato> ] [ { UNION INTERSECT EXCEPT [ ALL ]}<richiesta> ] [ ORDER BY <espressione> [ ASC DESC ] [,... ] ] Clausola WHERE Permette di filtrare le tuple in base alla specifica di condizioni da soddisfare. 8 / 52

L Istruzione SELECT Sintassi generale del comando SELECT SELECT [ ALL DISTINCT ] { <espressione> [ AS <nome> ] } [,... ] FROM <nome tab> [ [ AS ]<alias> ] [ WHERE <predicato> ] [ GROUP BY <espressione> [,... ] ] [ HAVING <predicato> ] [ { UNION INTERSECT EXCEPT [ ALL ]}<richiesta> ] [ ORDER BY <espressione> [ ASC DESC ] [,... ] ] Clausola GROUP BY Permette di definire dei gruppi. 9 / 52

L Istruzione SELECT Sintassi generale del comando SELECT SELECT [ ALL DISTINCT ] { <espressione> [ AS <nome> ] } [,... ] FROM <nome tab> [ [ AS ]<alias> ] [ WHERE <predicato> ] [ GROUP BY <espressione> [,... ] ] [ HAVING <predicato> ] [ { UNION INTERSECT EXCEPT [ ALL ]}<richiesta> ] [ ORDER BY <espressione> [ ASC DESC ] [,... ] ] Clausola UNION, INTERSECT, EXCEPT Permette di effettuare operazioni insiemistiche sui risultati della query. 10 / 52

L Istruzione SELECT Sintassi generale del comando SELECT SELECT [ ALL DISTINCT ] { <espressione> [ AS <nome> ] } [,... ] FROM <nome tab> [ [ AS ]<alias> ] [ WHERE <predicato> ] [ GROUP BY <espressione> [,... ] ] [ HAVING <predicato> ] [ { UNION INTERSECT EXCEPT [ ALL ]}<richiesta> ] [ ORDER BY <espressione> [ ASC DESC ] [,... ] ] Clausola ORDER BY Permette di ordinare le tuple del risultato della query. 11 / 52

SELECT [ ALL DISTINCT ] { <espressione> [ AS <nome> ] } [,... ] definisce le colonne nel risultato della query; 12 / 52

SELECT [ ALL DISTINCT ] { <espressione> [ AS <nome> ] } [,... ] definisce le colonne nel risultato della query; permette di operare un operazione di proiezione sulla tabella intermedia generata dal resto della query; 13 / 52

SELECT [ ALL DISTINCT ] { <espressione> [ AS <nome> ] } [,... ] definisce le colonne nel risultato della query; permette di operare un operazione di proiezione sulla tabella intermedia generata dal resto della query; la specifica esplicita degli attributi avviene elencando i suddetti in una lista, separati da virgola; 14 / 52

SELECT [ ALL DISTINCT ] { <espressione> [ AS <nome> ] } [,... ] definisce le colonne nel risultato della query; permette di operare un operazione di proiezione sulla tabella intermedia generata dal resto della query; la specifica esplicita degli attributi avviene elencando i suddetti in una lista, separati da virgola; permette anche di rinominare colonne e di generarne di nuove. 15 / 52

SELECT senza proiezione L operatore * SELECT [ ALL DISTINCT ] { <espressione> [ AS <nome> ] } [,... ] L operatore * permette di recuperare tutti gli attributi della tabella specificata nella clausola FROM 16 / 52

L operatore *: Esempio Si consideri lo schema relazionale visto nelle lezioni precedente: Example persona(id persona, codice fiscale, nome, cognome, data nascita) corso(id corso, id insegnante, sigla, crediti, descrizione) frequenza(id studente,id corso,voto): dove id studente ed id corso sono chiavi esterne su persona e corso SELECT * FROM persona; permette recupero dell intero contenuto di persona; equivale a: SELECT id persona, codice fiscale, nome, cognome, data nascita FROM persona; 17 / 52

Tabelle vs Relazioni Gli operatori DISTINCT e ALL SELECT [ ALL DISTINCT ] { <espressione> [ AS <nome> ] } [,... ] Il risultato di una query SQL puo contenere righe duplicate SELECT nome FROM persona WHERE cognome = Rossi nome Francesca Paolo Francesca 18 / 52

Tabelle vs Relazioni Gli operatori DISTINCT e ALL SELECT [ ALL DISTINCT ] { <espressione> [ AS <nome> ] } [,... ] Per eliminare le duplicazioni si usa l opzione DISTINCT nella clausola SELECT SELECT DISTINCT nome FROM persona WHERE cognome = Rossi nome Francesca Paolo ALL e opzione di default nella clausola SELECT 19 / 52

Espressioni nella clausola SELECT SELECT [ ALL DISTINCT ] { <espressione> [ AS <nome> ] } [,... ] La SELECT list puo contenere non solo attributi, ma anche espressioni: SELECT id studente, voto + 2 FROM frequenza WHERE id corso = 5 id studente 1 30 2 18 3 19...... Si noti che in questo caso la seconda colonna e priva di nome. 20 / 52

Espressioni nella clausola SELECT SELECT [ ALL DISTINCT ] { <espressione> [ AS <nome> ] } [,... ] Example L utilizzo dell operatore all interno di un espressione nella clausola SELECT permette di concatenare campi di tipo carattere SELECT cognome nome e\ nato il: data nascita FROM persona 21 / 52

Ridenominazione delle Colonne SELECT [ ALL DISTINCT ] { <espressione> [ AS <nome> ] } [,... ] L operatore AS Ad ogni elemento della SELECT list e possibile associare un nome a piacere. SELECT id studente, voto+2 AS voto calmierato FROM frequenza; La parola chiave AS puo anche essere omessa. SELECT id studente, voto+2 voto calmierato FROM frequenza; 22 / 52

FROM <nome tab> [ [ AS ]<alias> ] Specifica le tabelle su cui si pone la query; Costruisce la tabella intermedia a partire da una o piu tabelle, su cui operano le altre clausole (SELECT, WHERE... ) La tabella intermedia e il risultato del prodotto caresiano delle tabelle elencate; La sintassi data e semplificata (non include clausola esplicita di JOIN che vedremo nella prossima lezione). 23 / 52

Esempi Example 1 Selezionare tutti i corsi con un credito: SELECT FROM corsi WHERE crediti = 1; 2 Selezionare id, nome e cognome degli studenti: SELECT DISTINCT id studente, nome, cognome FROM WHERE persona, frequenza persona.id persona = frequanza.id studente; σ E (R 1 R 2 ) R 1 E R 2 : La query sopra realizza un equi-join! 24 / 52

Pseudonimi e Alias FROM <nome tab> [ [ AS ]<alias> ] Per chiarezza, ogni nome di colonna puo /deve essere scritto prefissandolo con il nome della tabella, si puo usare uno pseudonimo (alias) in luogo del nome di tabella: 25 / 52

Esempi Example SELECT f.id studente FROM frequenza AS f WHERE f.id corso = 7; Example SELECT corso.id corso FROM corso, frequenza WHERE corso.id corso = frequenza.id corso AND id studente = 7; 26 / 52

Esempi Example SELECT f.id studente FROM frequenza AS f WHERE frequenza.id corso = 7; Example wrong! SELECT corso.id corso FROM corso, frequenza WHERE corso.id corso = frequenza.id corso AND id studente = 7; 27 / 52

Esempi Il DML di SQL: Interrogazione di una BD Example (Self-Join e Alias) genitore figlio genitore figlio Giorgio Maria Milva Fabio Anna Paolo Fabio Anna Milva Luca Luca Genoveffa L uso di alias e forzato quando si deve eseguire una self-join: Chi sono i nonni di Luca? SELECT g 1.genitore AS nonno FROM genitore AS g 1, genitore AS g 2 WHERE g1.figlio = g 2.genitore AND g2.figlio = Luca ; 28 / 52

Ordinamento del risultato [ ORDER BY <espressione> [ ASC DESC ] [,... ] ] Per ordinare il risultato di una query secondo i valori di una o piu colonne: 29 / 52

Ordinamento del risultato [ ORDER BY <espressione> [ ASC DESC ] [,... ] ] Per ordinare il risultato di una query secondo i valori di una o piu colonne: si introduce la clausola ORDER BY, 30 / 52

Ordinamento del risultato [ ORDER BY <espressione> [ ASC DESC ] [,... ] ] Per ordinare il risultato di una query secondo i valori di una o piu colonne: si introduce la clausola ORDER BY, per ogni colonna si specifica se l ordinamento e per valori ascendenti (operatore ASC) o discendenti (operatore DESC) 31 / 52

Ordinamento del risultato [ ORDER BY <espressione> [ ASC DESC ] [,... ] ] Per ordinare il risultato di una query secondo i valori di una o piu colonne: si introduce la clausola ORDER BY, per ogni colonna si specifica se l ordinamento e per valori ascendenti (operatore ASC) o discendenti (operatore DESC) come nella clausola SELECT 32 / 52

Ordinamento del risultato: Esempio Example SELECT id persona, cognome, nome FROM persona ORDER BY cognome ASC, nome ASC; 33 / 52

Ordinamento del risultato: Esempio Example SELECT id persona, cognome, nome FROM persona ORDER BY cognome ASC, nome ASC; id persona cognome nome 19 Bianchi Francesco 2 Rossi Andrea 17 Rossi Emilio...... 34 / 52

[ WHERE <predicato> ] Permette di filtrare le tuple della tabella intermedia in base alla soddisfazione di un predicato Vine usata logica a tre valori: solo le tuple per cui il predicato e vero appaiono nel risultato. I predicati possono essere combinati usando gli operatori logici AND, OR, NOT. 35 / 52

Example 1 Persone di nome Giovanni nate prima del 1970: SELECT FROM persona WHERE nome = Giovanni AND data nascita <= 01/01/1970 ; 36 / 52

Predicati: [ WHERE <predicato> ] Un predicato e costituito da una formula logica su delle espressioni; Vedremo ora gli operatori e le funzioni piu comuni che possono essere utilizzati nella definizione di espressioni e predicati; In PostgreSQL i comandi \df e \do permettono di elencare la lista degli operatori e delle funzioni disponibili. 37 / 52

Operatori Logici Operatore Descrizione AND congiunzione logica OR disgiunzione logica NOT negazione logica...... 38 / 52

Operatori di Comparazione Operatore <x> = <y> <x>!= <y> o <x> <> <y> <x> < (<=,>,>=) <y> <a> BETWEEN <x> AND <y> <a> NOT BETWEEN <x> AND <y> <x> IS NULL <x> IS NOT NULL <x> IS DISTINCT FROM <y> <x> IS NOT DISTINCT FROM <y> Descrizione <x> e uguale a <y> <x> e diverso da <y> <x> e minore (minore o uguale, maggiore, maggiore uguale) a <y> equivale ad <a> >= <x> AND a<=y equivale ad <a> < <x> OR a>y vero se <x> ha valore NULL vero se il valore di <x> non e NULL <x> e diverso da <y>, supporta NULL <x> e uguale a <y>, supporta NULL 39 / 52

Operatori di Comparazione Example 1 Corsi il cui numero di crediti e strettamente superiore a 2: SELECT FROM corso WHERE crediti > 2; 2 Corsi il cui numero di crediti e definito: SELECT FROM corso WHERE crediti IS NOT NULL; 3 Corsi il cui numero di crediti e compreso tra 2 e 3: SELECT FROM corso WHERE crediti BETWEEN 2 AND 3; 40 / 52

Operatori Matematici Operatore Descrizione <x> + <y> addizione <x> - <y> sottrazione <x> * <y> moltiplicazione <x> / <y> divisione <x> % <y> resto @( <x>) valore assoluto...... 41 / 52

Funzioni ed Operatori su Stringhe Operatore Descrizione <exp> <exp> concatenazione di stringhe CHAR LENGTH(<st>) Numero caratteri della stringa LOWER(<st>) converte caratteri stringa in minuscole UPPER(<st>) converte caratteri stringa in maiuscole...... 42 / 52

Funzioni ed Operatori su Stringhe Example 1 SELECT 2*3= 2 3; 2*3=6 2 SELECT CHAR LENGTH( Anna ); 4 3 SELECT LOWER( Anna ); anna 43 / 52

Funzioni ed Operatori di Corrispondenza di Pattern Operatore LIKE l operatore LIKE mediante le wildcard (un carattere arbitrario) e % (una stringa arbitraria), permette di esprimere dei pattern su stringa: Example Cognomi delle persone che finiscono con una i ed hanno una i in seconda posizione: SELECT cognome FROM persona WHERE cognome LIKE i%i ; 44 / 52

Operatore IN Il DML di SQL: Interrogazione di una BD L operatore IN permette di esprimere condizioni di appartenenza ad un insieme Example SELECT cognome FROM persona WHERE id persona IN (5,18,30); 45 / 52

Funzioni su Data/Ora Funzione Descrizione CURRENT TIME Ora corrente CURRENT DATE Data corrente CURRENT TIMESTAMP Data e ora corrente...... 46 / 52

Sommario A titolo di ricapitolazione, vediamo come quanto visto a lezione ci permette di definire in SQL gli operatori dell algebra relazionale: operatore di proiezione operatore di selezione operatore di prodotto cartesiano theta-join 47 / 52

Sommario Traduzione dell operatore di proiezione L operatore di proiezione Π (A1,...,A n)(relazione) si traduce in SQL come: SELECT DISTINCT A 1,..., A n FROM relazione; Example DISTINCT permette di eliminare tuple identiche nel risultato. Ottenere un elenco di cognomi delle persone: SELECT DISTINCT cognome FROM persona; 48 / 52

Sommario Traduzione dell operatore di selezione L operatore di selezione σ (predicato) (relazione) si traduce in SQL come: SELECT FROM relazione WHERE predicato; Example Selezionare i corsi con 2 crediti: SELECT FROM corso WHERE crediti = 2 ; 49 / 52

Sommario Traduzione dell operatore di prodotto cartesiano L operatore di prodotto cartesiano relazione 1 relazione 2 si puo tradurre in SQL mediante la query: SELECT FROM relazione 1, relazione 2 ; 50 / 52

Sommario Il DML di SQL: Interrogazione di una BD Traduzione dell operatore di theta-join L operatore di join: relazione 1 exp relazione 2 σ exp (relazione 1 relazione 2 ) si puo tradurre in SQL mediante la query: Example SELECT FROM relazione 1, relazione 2 WHERE exp; Produrre un elenco dei corsi con i relativi insegnanti, mediante un equi-join sulle tabelle persona e corso SELECT FROM persona, corso WHERE persona.id persona = corso.id insegnante; 51 / 52

Bibliografia Il DML di SQL: Interrogazione di una BD Bibliografia ed Approfondimenti R.A.Elmasri, S.B. Navathe. Sistemi di Basi di Dati Fondamenti: Capitolo 8 (8.4). Capitolo 6 (Data Manipulation) del manuale di PostgreSQL (http://www.postgresql.org/docs/manuals/) 52 / 52