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

Documenti analoghi
Figlio Maria. Luigi. Olga Filippo Andrea Aldo Figlio Franco Olga Filippo Andrea Aldo

Il linguaggio SQL - Interrogazioni -

SQL: "storia" 31/05/2006 2

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

Idoneita Informatica. Sistemi per la gestione di basi di Dati

SQL /10/2016 Basi di dati - SQL 1

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

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

Informatica CL Fisioterapisti. Informatica Medica Sistemi per la gestione di basi di Dati

SQL Matteo Magnani, Danilo Montesi Università di Bologna SQL. SQL come Data Manipulation Language - Funzioni Aggregate e GROUP BY

SQL Esempi /10/2017 Basi di dati - SQL 1

SQL Esempi. 24/10-7/11/2016 Basi di dati - SQL 1

SQL. SQL: una visione panoramica. SQL: "storia" Definizione dei dati

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

Interrogazioni su più tabelle. Interrogazioni su più tabelle. Clausola where. Interrogazioni su più tabelle

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

Operatori aggregati: COUNT

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

SQL. Storia un po piu in dettaglio. SQL: "storia" Tre livelli per SQL-2. Standard, dialetti, mercato

SQL. Domini. Domini elementari (predefiniti) Domini definiti dall utente (semplici, ma riutilizzabili)

Corso sul linguaggio SQL

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

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

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"

Corso di Basi di Dati

SQL :Structured Query Language: SELECT (I)

Basi di dati. SQL: concetti base

Aggiornamenti e Interrogazioni

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

Interrogazioni semplici

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

Esercizi di Informatica Documentale

Structured Query Language

Il formato di base di un interrogazione in SQL è: SELECT R i1.c 1, R i2.c 2,..., R in.c n FROM R 1, R 2,..., R k WHERE F;

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

Trasparenze rielaborate da Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, 1999 Capitolo 4: SQL-2, seconda parte.

SQL - Structured Query Language

Basi di Dati: Corso di laboratorio

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

Interrogazioni in SQL SQL. Interrogazioni in SQL. Sintassi. Significato dell interrogazione. Notazione

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

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

3 SQL : Interrogazioni

Corso sul linguaggio SQL

QL (Query Language) Alice Pavarani

SQL. Metodologie informatiche per le discipline umanistiche. SQL Database. SQL = Structured Query Language Linguaggio di Interrogazione Strutturato

Linguaggi per basi di dati e SQL

Linguaggi per basi di dati. Linguaggi per basi di dati e SQL. Linguaggi di interrogazione per basi di dati relazionali. Linguaggi di interrogazione

Algebra Relazionale. Dario Allegra Data Management 1 1

SQL. Domini. Domini elementari (predefiniti) Domini definiti dall utente (semplici, ma riutilizzabili)

BASE DI DATI. Concetti trattati: Funzioni aggregate Raggruppamenti Nidificazione Viste. Informatica Umanistica Università di Pisa

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

Prof. Alberto Postiglione Dipartimento di Scienze della Comunicazione Università degli Studi di Salerno

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

Basi di Dati: Corso di laboratorio

Corso di Basi di Dati A.A. 2015/2016

IL LINGUAGGIO SQL LE BASI

Tabelle esempio: Impiegato/Dipartimento

SQL. Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, SQL. Definizione dei dati in SQL. SQL: "storia" Domini

Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, SQL. Definizione dei dati in SQL. SQL: "storia" Domini. CREATE TABLE, esempio

SQL. Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, SQL. Definizione dei dati in SQL. SQL: "storia" Domini

E. Giunchiglia Basi di dati 1 (trasparenze basate su Atzeni, Ceri, Paraboschi, Torlone: Basi di dati, Capitolo 4) SQL SQL. Definizione dei dati in SQL

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

SQl come DML. Angelo Chianese,, Vincenzo Moscato, Antonio Picariello,, Lucio Sansone

Basi di Dati: Corso di laboratorio

SQL e algebra relazionale

Parte III. L algebra relazionale

Basi di Dati: Corso di laboratorio

Parte IV Il linguaggio SQL

Linguaggio SQL seconda parte

Basi di dati. SQL :Structured Query Language: SELECT (I) Prof.ssa Rosalba Giugno

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

Informatica Grafica. Basi di dati parte 2

Parte III L algebra relazionale

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

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

Operatori derivati dagli insiemi. Algebra Relazionale. Unione. Operatori derivati dagli insiemi

Queries su più tabelle

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

Corso di Informatica Linguaggio SQL prima parte

Corso di Basi di Dati

Unità 4.2 Selezione e proiezione

D B M G. Linguaggio SQL: fondamenti. Istruzione SELECT: fondamenti. Elena Baralis 2007 Politecnico di Torino 1. Struttura di base

Interrogazioni in SQL SQL1 1

Esercitazione: Interrogazioni SQL

BASE DI DATI. Concetti trattati: Funzioni aggregate Raggruppamenti Nidificazione Viste. Informatica Umanistica Università di Pisa

Elementi di Informatica LB Basi di Dati. Anno accademico 2007/2008 Prof. Stefano Contadini

Laboratorio di. Docenti: Alberto Belussi e Carlo Combi

SISTEMI INFORMATIVI E TELEMEDICINA INFORMATICA MEDICA. 3. Panoramica su SQL Prof. Mauro Giacomini

SQL. Il nome sta per Structured Query Language Le interrogazioni SQL sono dichiarative

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

Lezioni di Laboratorio sui Data Base

Database parte 2. Database azienda

Corso di Informatica Medica

Transcript:

SQL SQL come Data Manipulation Language - (SELECT FROM WHERE ORDER BY)

Esempio 1 Madre Maternita Figlio Nome Eta Andrea 27 Aldo 25 Maria 55 Anna 50 Filippo 26 50 60 Olga 30 Sergio 85 Luisa 75 Persone Reddito 21 15 42 35 30 40 20 41 35 87 Padre Sergio Paternita Luisa Luisa Anna Anna Maria Maria Figlio Olga Filippo Andrea Aldo Maria Olga Filippo Andrea Aldo 2

Interrogazione semplice Nome e Reddito delle persone con meno di 30 anni. Nome Eta Andrea 27 Aldo 25 Maria 55 Anna 50 Filippo 26 50 60 Olga 30 Sergio 85 Luisa 75 Persone Reddito 21 15 42 35 30 40 20 41 35 87 3

Interrogazione semplice Attributi su cui proiettare il risultato Nome e Reddito delle persone con meno di 30 anni. Tabella/e da utilizzare Condizione Nome Eta Andrea 27 Aldo 25 Maria 55 Anna 50 Filippo 26 50 60 Olga 30 Sergio 85 Luisa 75 Persone Reddito 21 15 42 35 30 40 20 41 35 87 4

Interrogazione semplice (SQL e algebra) SELECT Nome, Reddito FROM Persone WHERE Eta < 30 Target list Clausola From Clausola Where π Nome, Reddito (σ Eta < 30 (Persone)) 5

Interrogazione semplice (SQL e algebra) Si esegue il prodotto cartesiano delle tabelle coinvolte (in questo caso, essendoci solo una tabella, il p.c. non viene effettuato). Si selezionano le righe (tuple) sulla base del predicato della clausola Where. Si proietta sugli attributi della target list. SELECT Nome, Reddito FROM Persone WHERE Eta < 30 Target list Clausola From Clausola Where 6

Prodotto cartesiano SELECT Nome, Reddito FROM Persone WHERE Eta < 30 Nome Eta Andrea 27 Aldo 25 Maria 55 Anna 50 Filippo 26 50 60 Olga 30 Sergio 85 Luisa 75 Persone Reddito 21 15 42 35 30 40 20 41 35 87 7

Selezione SELECT Nome, Reddito FROM Persone WHERE Eta < 30 Nome Eta Andrea 27 Aldo 25 Maria 55 Anna 50 Filippo 26 50 60 Olga 30 Sergio 85 Luisa 75 Persone Reddito 21 15 42 35 30 40 20 41 35 87 8

Proiezione SELECT Nome, Reddito FROM Persone WHERE Eta < 30 Nome Eta Andrea 27 Aldo 25 Maria 55 Anna 50 Filippo 26 50 60 Olga 30 Sergio 85 Luisa 75 Persone Reddito 21 15 42 35 30 40 20 41 35 87 9

Risultato Nome SELECT Nome, Reddito Andrea 21 FROM Persone Aldo 15 WHERE Eta < 30 Filippo 30 Reddito 10

SELECT: abbreviazioni SELECT * FROM Persone Tutti gli attributi Se manca il WHERE, equivalente a: WHERE true 11

Nome Cognome Mario Rossi Carlo Bianchi Giuseppe Verdi Neri Carlo Rossi Lorenzo Lanzi Paola Borroni Marco Impiegato Dipartimento Dipart Amministrazione Produzione Amministrazione Distribuzione Direzione Direzione Amministrazione Produzione Nome Amministrazione Produzione Distribuzione Direzione Ricerca Ufficio Stipendio 10 45 20 36 20 40 16 45 14 80 7 73 75 40 20 46 Indirizzo Citta Via Tito Livio Piazza Lavater Via Segre Via Tito Livio Via Morone Milano Torino Roma Milano 12 Milano

Target list: selezione senza proiezione select * from Impiegato where Cognome = 'Rossi (σ Cognome=Rossi (Impiegato)) Nome Cognome Dipart Ufficio Stipendio Mario Rossi Amministrazione 10 45 Carlo Rossi Direzione 14 80 13

Target List: selezione con proiezione select Nome, Cognome, Stipendio from Impiegato where Cognome = 'Rossi π Nome, Cognome, Stipendio (σ Cognome=Rossi (Impiegato)) Nome Mario Carlo Cognome Rossi Rossi Stipendio 45 80 14

Target List: proiezione senza selezione select Nome, Cognome from Impiegato π Nome, Cognome (Impiegato)) Nome Mario Carlo Giuseppe Carlo Lorenzo Paola Marco Cognome Rossi Bianchi Verdi Neri Rossi Lanzi Borroni 15

Target List: proiezione con/senza duplicati select Cognome from Impiegato select distinct Cognome from Impiegato Cognome Rossi Bianchi Verdi Neri Rossi Lanzi Borroni Cognome Rossi Bianchi Verdi Neri Lanzi Borroni 16

Target List: espressioni select Stipendio/12 AS StipendioMensile from Impiegato where Cognome = Bianchi StipendioMensile 3.00 17

Clausola Where: disgiunzione select Nome, Cognome from Impiegato where Dipart = Amministrazione OR Dipart = Produzione Nome Mario Carlo Giuseppe Paola Marco Cognome Rossi Bianchi Verdi Borroni 18

Clausola Where: condizione complessa select Nome from Impiegato where Cognome= Rossi AND (Dipart = Amministrazione OR Dipart = Produzione ) Nome Mario 19

select * Clausola Where: operatore IN from Impiegato where Cognome = Rossi AND Dipart IN ( Amministrazione, Produzione ) Nome Mario 20

Clausola Where: operatore LIKE un carattere qualsiasi select * from Impiegato where Cognome LIKE _o%i stringa qualsiasi Nome Cognome Dipart Ufficio Stipendio Mario Rossi Amministrazione 10 45 Carlo Rossi Direzione 14 80 Paola Borroni Amministrazione 75 40 21

Clausola Where: operatore BETWEEN select * from Impiegato where Stipendio BETWEEN 40 AND 45 Nome Cognome Dipart Ufficio Stipendio Mario Rossi Amministrazione 10 45 Giuseppe Verdi Amministrazione 20 40 Neri Distribuzione 16 45 Paola Borroni Amministrazione 75 40 22

Clausola Where: valori nulli Impiegati che hanno o potrebbero avere uno stipendio minore di 50 milioni Nome Cognome Dipart Ufficio Stipendio Mario Rossi Amministrazione 10 45 Carlo Rossi Direzione 14 80 Paola Borroni Amministrazione 75 null Imp 23

Clausola Where: valori nulli select * from Imp where Stipendio < 50 or Stipendio IS NULL Nome Cognome Dipart Ufficio Stipendio Mario Rossi Amministrazione 10 45 Paola Borroni Amministrazione 75 null 24

Join Il Join e un operatore fondamentale, in quanto permette di utilizzare congiuntamente le informazioni contenute in piu tabelle. In SQL un join si puo formulare utilizzando i costrutti visti finora (From Where), che permettono di compiere prodotti cartesiani e selezioni. Esistono anche operatori specifici. Ripassiamo la semantica del join. 25

Padre Figlio Join naturale Madre Figlio Sergio Luisa Maria Olga Luisa Filippo Anna Olga Andrea Anna Filippo Aldo Maria Andrea Maria Aldo Padre Figlio Madre Olga Anna Filippo Anna Andrea Maria Aldo Maria 26

Padre Figlio Left Outer Join Madre Figlio Sergio Luisa Maria Olga Luisa Filippo Anna Olga Andrea Anna Filippo Aldo Maria Andrea Maria Aldo Padre Figlio Madre Sergio null Olga Anna Filippo Anna Andrea Aldo Maria Maria 27

Padre Figlio Full Outer Join Madre Figlio Sergio Luisa Maria Olga Luisa Filippo Anna Olga Andrea Anna Filippo Aldo Maria Andrea Padre Figlio Madre Maria Aldo Sergio null Olga Anna Filippo Anna Andrea Maria Aldo Maria null null Maria Luisa Luisa 28

Join naturale Padre e Madre di ogni persona Paternita Maternita select Paternita.Figlio, Padre, Madre from Paternita, Maternita where Paternita.Figlio = Maternita.Figlio 29

Selezione, Proiezione e Join I padri di persone che guadagnano più di venti milioni π Padre (Paternita Figlio = Nome (σ Reddito>20 (Persone))) select distinct Padre from Paternita, Persone where Figlio = Nome AND Reddito > 20 30

Join di una relazione con se stessa (algebra) Le persone che guadagnano più dei rispettivi padri. Mostrare nome, reddito e reddito del padre π Nome, Reddito, RP (σ Reddito>RP (ρ NP,EP,RP Nome,Eta,Reddito (persone) (paternita persone))) Figlio = Nome NP=Padre 31

Join di una relazione con se stessa (algebra) π Nome, Reddito, RP (σ Reddito>RP (ρ NP,EP,RP Nome,Eta,Reddito (persone) (paternita persone))) Figlio = Nome NP=Padre Padre Figlio Nome Eta Reddito Sergio 60 20 Olga Olga 30 41 Filippo Filippo 26 30 Andrea Andrea 27 21 Aldo Aldo 25 15 32

Join di una relazione con se stessa (algebra) π Nome, Reddito, RP (σ Reddito>RP (ρ NP,EP,RP Nome,Eta,Reddito (persone) (paternita persone))) Figlio = Nome NP=Padre NP EP RP Padre Figlio Nome Eta Reddito Sergio 85 35 Sergio 60 20 50 40 Olga Olga 30 41 50 40 Filippo Filippo 26 30 60 20 Andrea Andrea 27 21 60 20 Aldo Aldo 25 15 33

Join di una relazione con se stessa (algebra) π Nome, Reddito, RP (σ Reddito>RP (ρ NP,EP,RP Nome,Eta,Reddito (persone) (paternita persone))) Figlio = Nome NP=Padre NP EP RP Padre Figlio Nome Eta Reddito Sergio 85 35 Sergio 60 20 50 40 Olga Olga 30 41 50 40 Filippo Filippo 26 30 60 20 Andrea Andrea 27 21 60 20 Aldo Aldo 25 15 34

Join di una relazione con se stessa (algebra) π Nome, Reddito, RP (σ Reddito>RP (ρ NP,EP,RP Nome,Eta,Reddito (persone) (paternita persone))) Figlio = Nome NP=Padre Nome Olga Andrea Reddito 41 21 RP 40 20 35

Join di una relazione con se stessa (SQL) Le persone che guadagnano più dei rispettivi padri. Mostrare nome, reddito e reddito del padre π Nome, Reddito, RP (σ Reddito>RP (ρ NP,EP,RP Nome,Eta,Reddito (persone) (paternita persone))) Figlio = Nome NP=Padre select F.Nome, F.Reddito, P.Reddito from Paternita, Persone P, Persone F where Figlio = F.Nome AND P.Nome=Padre AND F.Reddito > P.Reddito 36

Stessa cosa, con ridenominazione risultato Le persone che guadagnano più dei rispettivi padri. Mostrare nome, reddito e reddito del padre select Figlio, F.Reddito AS Reddito, P.Reddito AS RedditoPadre from Paternita, Persone P, Persone F where Figlio = F.Nome AND P.Nome=Padre AND F.Reddito > P.Reddito 37

Join Vediamo ora una sintassi specifica per il join. E possibile specificare il join interamente all interno della clausola From. Vari tipi di join possono essere formulati: Naturale (esplicito o implicito). Right outer join. Left outer join. Full outer join. 38

Join esplicito Padre e Madre di ogni persona Paternita Maternita select Paternita.Figlio, Padre, Madre from Paternita join Maternita on Paternita.Figlio = Maternita.Figlio 39

Join naturale implicito Padre e Madre di ogni persona Paternita Maternita select Paternita.Figlio, Padre, Madre from Paternita natural join Maternita 40

Left Outer Join esplicito Padre e, se nota, Madre di ogni persona Paternita Maternita Figlio = Nome LEFT select Paternita.Figlio, Padre, Madre from Paternita left join Maternita on Paternita.Figlio = Maternita.Figlio 41

Left Outer Join implicito Padre e, se nota, Madre di ogni persona Paternita Maternita LEFT select Paternita.Figlio, Padre, Madre from Paternita left natural join Maternita 42

Full Outer Join Padre e, se nota, Madre di ogni persona Paternita Maternita Figlio = Nome FULL select Paternita.Figlio, Padre, Madre from Paternita full join Maternita on Paternita.Figlio = Maternita.Figlio 43

Join esplicito con alias Nome cognome e città lavorativa di ogni impiegato select I.Nome, Cognome, Citta from Impiegato I join Dipartimento D on Dipart = D.Nome 44

Join esplicito con alias: risultato Nome Mario Carlo Giuseppe Carlo Lorenzo Paola Marco Cognome Rossi Bianchi Verdi Neri Rossi Lanzi Borroni Citta Milano Torino Milano Roma Milano Milano Milano Torino 45

Ordinamento del risultato A differenza del modello relazionale, in cui le tuple non sono ordinate, le righe di una tabella possono esserlo. Talvolta la possibilità di ordinare il risultato di un interrogazione è importante. Ad esempio, se si vogliono gli stipendi in ordine dal minore al maggiore. SQL mette a disposizione la clausola ORDER BY. 46

Ordinamento del risultato select Cognome, Nome, Stipendio from Impiegato where Dipartimento LIKE Amm% ORDER BY Stipendio DESC, Cognome ASC Cognome Nome Stipendio Rossi Borroni Mario Paola 45 40 Default Verdi Giuseppe 40 47