SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.

Slides:



Advertisements
Presentazioni simili
Interrogazioni Semplici Le operazioni di interrogazione vengono specificate per mezzo dellistruzione select select ListaAttributi from ListaTabelle [where.
Advertisements

TIPI STANDARD DI SQL BOOLEAN Valori: vero, falso CHAR(n)
Soluzione Esercitazione 4 Blocco slides cap04-III.
Structured Query Language
Structured Query Language (SQL) Presentazione 13.1 Informatica Generale (Prof. Luca A. Ludovico)
SQL92 e XQuery1.0 a confronto1 SQL92 E XQUERY1.0 A CONFRONTO Università degli Studi di Modena e Reggio Emilia Facoltà di Ingegneria - Sede di Modena Corso.
DML – Data Manipulation Language
Esercitazioni del Corso di Sistemi Informativi Marina Mongiello
Esercitazioni del Corso di Sistemi Informativi Marina Mongiello
G. Mecca – – Università della Basilicata Basi di Dati SQL-92 Concetti Avanzati versione 2.0 Questo lavoro è concesso in uso secondo i termini.
G. Mecca – – Università della Basilicata Basi di Dati SQL-92 Dettagli e Approfondimenti versione 2.0 Questo lavoro è concesso in uso secondo.
Basi di Dati prof. A. Longheu
SQL.
19/01/2014 Viste. 19/01/2014 Viste Le Viste Logiche o Viste o View possono essere definite come delle tabelle virtuali, i cui dati sono riaggregazioni.
Istruzione SELECT (versione base)
1 Corso di Laurea in Biotecnologie Informatica (Basi di Dati) SQL: Data Manipulation Language (DML) Anno Accademico 2009/2010 Da: Atzeni, Ceri, Paraboschi,
Laboratorio di Basi di Dati Introduzione ad Access 2ª Parte.
Maurizio Lenzerini Domenico Lembo Laurea in Ingegneria Informatica - Università di Roma "La Sapienza" Corso di Basi di Dati - A.A. 2003/2004 Prima Esercitazione.
Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, 1999
SQL: Lezione 7 Nataliya Rassadko
SQL Per la modifica di basi di dati
SQL Per la definizione di basi di dati SQL per definire ed amministrare Ogni utente puo definire una base di dati di cui diventa lamministratore potendo.
SQL :Structured Query Language: SELECT (II)
Esercitazione.
Algebra Relazionale Linguaggio procedurale, cioè le operazioni vengono descritte attraverso la descrizione della sequenza di azioni da compiere per ottenere.
Duplicati Lalgebra relazionale non ammette duplicati, SQL li ammette. Quindi select Città from Persona where Cognome= Rossi estrae una lista di città in.
Manipolazione dei dati I comandi SQL che permettono di modificare il contenuto di una base di dati sono insertdeleteupdate insert ha la seguente sintassi:
SELECT STATEMENT Clausola WHERE permette di limitare il numero di record da estrarre SELECT */ [DISTINCT] colonna/ espressione [alias],… FROM table [WHERE.
Viste. Cosè una vista? è possibile creare un subset logico di dati o una combinazione di dati una vista è una tabella logica basata su una tabella o su.
Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, Capitolo 4:SQL 16/10/2002.
Basi di dati Claudia Raibulet
SQL: Structured Query Language
E. Giunchiglia Basi di dati 1 (trasparenze basate su Atzeni, Ceri, Paraboschi, Torlone: Basi di dati, Capitolo 4) SQL 05/10/2004.
Corso di INFORMATICA anno scolastico 2009/10 Linguaggio SQL OPERATORI INSIEMISTICI IN SQL Siano due tabelle: GiochiSolitari(CodiceGioco, NomeGioco, PrezzoGioco)
Corso di INFORMATICA anno scolastico 2009/10 Linguaggio SQL IDENTIFICATORI di tabelle e attributi: stringhe di lunghezza max 18 caratteri, composte da.
1 Il Linguaggio SQL Il Linguaggio SQL Prof. Lorenzo Vita, Ing. Luigi Testa.
Basi di Dati e Sistemi Informativi
Basi di Dati e Sistemi Informativi Il Linguaggio SQL Home page del corso:
SQL.
Basi di dati - Modelli e linguaggi di interrogazione- Paolo Atzeni, Stefano Ceri, Stefano Paraboschi, Riccardo Torlone Copyright © The McGraw-Hill.
Sistemi Informativi Insieme di “strutture” in grado di acquisire, elaborare, trasmettere ed archiviare informazioni in genere ad uso di un’organizzazione.
Informatica II – Basi di Dati (07/08) – Parte 2 Gianluca Torta Dipartimento di Informatica dell’Università di Torino
SQL Interrogazioni. 2 Interrogazioni in SQL Non esiste un SQL standard (vari dialetti) Formulazione di interrogazioni (query) è parte del Data Manipulation.
SEFOC – SETTORE FORMAZIONE CONTINUA DEL PERSONALE CORSO MYSQL AVANZATO ROBERTO PENNOLINO – CARMELO MASSIMO PRIOLO PALERMO – 07 | 06 | 2011.
Basi di dati I Prof.ssa Rosalba Giugno Prof. Alfredo Pulvirenti SQL :Structured Query Language: SELECT (IV) SQL (Slide tratte in parte da da Atzeni, Ceri,
Esercitazione 7.
Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le.
Algebra relazionale (III). Esempi di Interrogazioni: 3 Trovare matricola e nome dei capi i cui impiegati guadagnano tutti più di Tutti gli impiegati?
1 Basi di Dati S tructured Q uery L anguage Appunti Matteo Longhi.
Interrogazioni (parte 2)
SQL (III) Data Definition Language/ Data Manipulation Language.
Interrogazioni Le interrogazioni in SQL sono formulate in modo dichiarativo specificando cioè cosa si vuole ottenere e non come lo si vuole ottenere. L’interrogazione.
Basi di dati I Prof.ssa Rosalba Giugno Prof. Alfredo Pulvirenti SQL :Structured Query Language: SELECT (III) SQL (Slide tratte in parte da da Atzeni, Ceri,
Vincoli Interrelazionali Per i vincoli visti l’inserimento di un valore che li viola viene semplicemente impedito. In caso di vincoli di integrità referenziale,
Vincoli interrelazionali
Raggruppamenti e target list scorretta select padre, avg(f.reddito), p.reddito from persone f join paternita on figlio = nome join persone p on padre =
Prof. Lorenzo Vita, Ing. Luigi Testa
Interrogazioni Le interrogazioni in SQL sono formulate in modo dichiarativo specificando cioè cosa si vuole ottenere e non come lo si vuole ottenere. L’interrogazione.
Funzionalità del DBMS relazionale l Funzioni per –definizione della base di dati –inserimento / rimozione /aggiornamento di informazioni deve soddisfare.
Approfondimenti SQL.
Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso:
Linguaggio SQL prima parte Linguaggio SQL prima parte A. Lorenzi, E. Cavalli INFORMATICA PER SISTEMI INFORMATIVI AZIENDALI Copyright © Istituto Italiano.
SQL Linguaggio per l’interrogazione di una base dati.
E. Tinelli SQL come linguaggio di manipolazione dei dati 1 DML – Data Manipulation Language.
Linguaggio SQL. Linguaggi per database La diffusione del modello relazionale ha favorito l’uso prevalente di linguaggi non procedurali: in questo modo.
Esercizi SQL Group by. CREATE TABLE dipendente (codDip CHAR(8) NOT NULL UNIQUE PRIMARY KEY, cognome CHAR(60) NOT NULL, nome CHAR(60) NOT NULL, stipendio.
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Transcript della presentazione:

SQL, esempi 30/10/2014Basi di dati SQL1

30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo character(20) NOT NULL, cfu numeric NOT NULL) CREATE TABLE esami( corso numeric REFERENCES corsi (codice), studente numeric REFERENCES studenti (matricola), data date NOT NULL, voto numeric NOT NULL, PRIMARY KEY (corso, studente)) La chiave primaria viene definita come NOT NULL anche se non lo specifichiamo (in Postgres)

30/10/2014Basi di dati SQL3 DDL, in pratica In molti sistemi si utilizzano strumenti diversi dal codice SQL per definire lo schema della base di dati Vediamo (per un esempio su cui lavoreremo)

30/10/2014Basi di dati SQL4 SQL, operazioni sui dati interrogazione: SELECT modifica: INSERT, DELETE, UPDATE

30/10/2014Basi di dati SQL5 NomeEtà Persone Reddito Andrea27 Maria55 Anna50 Filippo26 Luigi50 Franco60 Olga30 Sergio85 Luisa75 Aldo Madre Maternità Figlio Luisa Anna Maria Luisa Maria Olga Filippo Andrea Aldo Luigi Padre Paternità Figlio Luigi Franco Sergio Olga Filippo Andrea Aldo Franco

30/10/2014Basi di dati SQL6 Istruzione SELECT (versione base) SELECT ListaAttributi FROM ListaTabelle [ WHERE Condizione ] "target list" clausola FROM clausola WHERE

30/10/2014Basi di dati SQL7 Intuitivamente SELECT ListaAttributi FROM ListaTabelle [ WHERE Condizione ] Prodotto cartesiano di ListaTabelle Selezione su Condizione Proiezione su ListaAttributi

30/10/2014Basi di dati SQL8 Selezione, proiezione e join Le persone che guadagnano più di 20, mostrando anche il padre e il reddito PROJ Nome,Padre, Reddito (paternita JOIN Figlio =Nome SEL Reddito>20 (persone)) select nome, padre, reddito from persone, paternita where figlio = nome and reddito > 20

30/10/2014Basi di dati SQL9 Selezione e proiezione Nome e reddito delle persone con meno di trenta anni PROJ Nome, Reddito ( SEL Eta<30 (Persone)) select nome, reddito from persone where eta < 30

30/10/2014Basi di dati SQL10 Selezione, senza proiezione Nome, età e reddito delle persone con meno di trenta anni SEL Eta<30 (Persone) select * from persone where eta < 30

30/10/2014Basi di dati SQL11 Proiezione, senza selezione Nome e reddito di tutte le persone PROJ Nome, Reddito (Persone) select nome, reddito from persone

30/10/2014Basi di dati SQL12 Proiezione, con ridenominazione Nome e reddito di tutte le persone REN Anni  Eta (PROJ Nome, Eta (Persone)) select nome, eta as anni from persone

30/10/2014Basi di dati SQL13 Espressioni nella target list select Reddito/12 as redditoMensile from Persone

30/10/2014Basi di dati SQL14 Condizione complessa select * from persone where reddito > 25 and (eta 60)

30/10/2014Basi di dati SQL15 Condizione “LIKE” Le persone che hanno un nome che inizia per 'A' e ha una 'd' come terza lettera select * from persone where nome like 'A_d%'

30/10/2014Basi di dati SQL16 CognomeFilialeEtàMatricola NeriMilano BruniMilano NULL 9553 Impiegati SEL (Età > 40) OR (Età IS NULL) (Impiegati) RossiRoma RossiRoma NeriMilano BruniMilano NULL 9553 Gestione dei valori nulli Gli impiegati la cui età è o potrebbe essere maggiore di 40

30/10/2014Basi di dati SQL17 select cognome, filiale from impiegati select distinct cognome, filiale from impiegati Proiezione, attenzione

30/10/2014Basi di dati SQL18 NomeEtà Persone Reddito Andrea27 Maria55 Anna50 Filippo26 Luigi50 Franco60 Olga30 Sergio85 Luisa75 Aldo Madre Maternità Figlio Luisa Anna Maria Luisa Maria Olga Filippo Andrea Aldo Luigi Padre Paternità Figlio Luigi Franco Sergio Olga Filippo Andrea Aldo Franco

30/10/2014Basi di dati SQL19 Selezione, proiezione e join I padri di persone che guadagnano più di 20 PROJ Padre (paternita JOIN Figlio =Nome SEL Reddito>20 (persone)) select distinct padre from persone, paternita where figlio = nome and reddito > 20

30/10/2014Basi di dati SQL20 Le persone che guadagnano più dei rispettivi padri; mostrare nome, reddito e reddito del padre PROJ Nome, Reddito, RP (SEL Reddito>RP (REN NP,EP,RP  Nome,Eta,Reddito (persone) JOIN NP=Padre (paternita JOIN Figlio =Nome persone))) select f.nome, f.reddito, p.reddito from persone p, paternita, persone f where p.nome = padre and figlio = f.nome and f.reddito > p.reddito

30/10/2014Basi di dati SQL21 SELECT, con ridenominazione del risultato select figlio, f.reddito as reddito, p.reddito as redditoPadre from persone p, paternita, persone f where p.nome = padre and figlio = f.nome and f.reddito > p.reddito

30/10/2014Basi di dati SQL22 Join esplicito Padre e madre di ogni persona select paternita.figlio,padre, madre from maternita, paternita where paternita.figlio = maternita.figlio select madre, paternita.figlio, padre from maternita join paternita on paternita.figlio = maternita.figlio

30/10/2014Basi di dati SQL23 Le persone che guadagnano più dei rispettivi padri; mostrare nome, reddito e reddito del padre select f.nome, f.reddito, p.reddito from persone p, paternita, persone f where p.nome = padre and figlio = f.nome and f.reddito > p.reddito select f.nome, f.reddito, p.reddito from (persone p join paternita on p.nome = padre) join persone f on figlio = f.nome where f.reddito > p.reddito

30/10/2014Basi di dati SQL24 Join esterno: "outer join" Padre e, se nota, madre di ogni persona select paternita.figlio, padre, madre from paternita left join maternita on paternita.figlio = maternita.figlio select paternita.figlio, padre, madre from paternita left outer join maternita on paternita.figlio = maternita.figlio outer e' opzionale

30/10/2014Basi di dati SQL25 Ordinamento del risultato Nome e reddito delle persone con meno di trenta anni in ordine alfabetico select nome, reddito from persone where eta < 30 order by nome

30/10/2014Basi di dati SQL26 Unione select A, B from R union select A, B from S select A, B from R union all select A, B from S

30/10/2014Basi di dati SQL27 Notazione posizionale! select padre, figlio from paternita union select madre, figlio from maternita

30/10/2014Basi di dati SQL28 Luisa Anna Maria Luisa Maria Olga Filippo Andrea Aldo Luigi Figlio Luigi Franco Sergio Olga Filippo Andrea Aldo Franco Luisa Anna Maria Luisa Maria Olga Filippo Andrea Aldo Luigi PadreFiglio Luigi Franco Sergio Olga Filippo Andrea Aldo Franco

30/10/2014Basi di dati SQL29 Notazione posizionale, 2 select padre, figlio from paternita union select figlio, madre from maternita NO! select padre, figlio from paternita union select madre, figlio from maternita OK

30/10/2014Basi di dati SQL30 Notazione posizionale, 3 Anche con le ridenominazioni non cambia niente: select padre as genitore, figlio from paternita union select figlio, madre as genitore from maternita Corretta: select padre as genitore, figlio from paternita union select madre as genitore, figlio from maternita

30/10/2014Basi di dati SQL31 Differenza select Nome from Impiegato except select Cognome as Nome from Impiegato

30/10/2014Basi di dati SQL32 Intersezione select Nome from Impiegato intersect select Cognome as Nome from Impiegato

30/10/2014Basi di dati SQL33 Operatori aggregati: COUNT Il numero di figli di Franco select count(*) as NumFigliDiFranco from Paternita where Padre = 'Franco'

30/10/2014Basi di dati SQL34 COUNT DISTINCT select count(*) from persone select count(reddito) from persone select count(distinct reddito) from persone

30/10/2014Basi di dati SQL35 Altri operatori aggregati SUM, AVG, MAX, MIN Media dei redditi dei figli di Franco select avg(reddito) from persone join paternita on nome=figlio where padre='Franco'

30/10/2014Basi di dati SQL36 Operatori aggregati e valori nulli select avg(reddito) as redditomedio from persone

30/10/2014Basi di dati SQL37 Operatori aggregati e target list un’interrogazione scorretta: select nome, max(reddito) from persone di chi sarebbe il nome? La target list deve essere omogenea select min(eta), avg(reddito) from persone

30/10/2014Basi di dati SQL38 Il numero di figli di ciascun padre select Padre, count(*) AS NumFigli from paternita group by Padre Operatori aggregati e raggruppamenti

30/10/2014Basi di dati SQL39 Condizioni sui gruppi I padri i cui figli hanno un reddito medio maggiore di 25; mostrare padre e reddito medio dei figli select padre, avg(f.reddito) from persone f join paternita on figlio = nome group by padre having avg(f.reddito) > 25

30/10/2014Basi di dati SQL40 Interrogazioni nidificate (nested query o subquery)

30/10/2014Basi di dati SQL41 Massimo e nidificazione La persona (o le persone) con il reddito massimo select * from persone where reddito = (select max(reddito) from persone)

30/10/2014Basi di dati SQL42 nome e reddito del padre di Franco select Nome, Reddito from Persone, Paternita where Nome = Padre and Figlio = 'Franco' select Nome, Reddito from Persone where Nome = (select Padre from Paternita where Figlio = 'Franco')

30/10/2014Basi di dati SQL43 Nome e reddito dei padri di persone che guadagnano più di 20 select distinct P.Nome, P.Reddito from Persone P, Paternita, Persone F where P.Nome = Padre and Figlio = F.Nome and F.Reddito > 20 select Nome, Reddito from Persone where Nome in (select Padre from Paternita where Figlio = any (select Nome from Persone where Reddito > 20)) notare la distinct

30/10/2014Basi di dati SQL44 Nome e reddito dei padri di persone che guadagnano più di 20 select distinct P.Nome, P.Reddito from Persone P, Paternita, Persone F where P.Nome = Padre and Figlio = F.Nome and F.Reddito > 20 select Nome, Reddito from Persone where Nome in (select Padre from Paternita, Persone where Figlio = Nome and Reddito > 20)

30/10/2014Basi di dati SQL45 Nome e reddito dei padri di persone che guadagnano più di 20, con indicazione del reddito del figlio select distinct P.Nome, P.Reddito, F.Reddito from Persone P, Paternita, Persone F where P.Nome = Padre and Figlio = F.Nome and F.Reddito > 20 select Nome, Reddito, ???? from Persone where Nome in (select Padre from Paternita where Figlio = any (select Nome from Persone where Reddito > 20))

30/10/2014Basi di dati SQL46 Le persone che hanno almeno un figlio select * from Persone where exists (select * from Paternita where Padre = Nome) or exists (select * from Maternita where Madre = Nome)

30/10/2014Basi di dati SQL47 I padri i cui figli guadagnano tutti più di 20 select distinct Padre from Paternita Z where not exists ( select * from Paternita W, Persone where W.Padre = Z.Padre and W.Figlio = Nome and Reddito <= 20)

select distinct padre from paternita p1 where padre NOT IN (select padre from paternita p2 join persone on figlio = nome where reddito < 40 ) 30/10/2014Basi di dati SQL48

30/10/2014Basi di dati SQL49 I padri i cui figli guadagnano tutti più di 20 select distinct Padre from Paternita where not exists ( select * from Persone where Figlio = Nome and Reddito <= 20) NO!!!

30/10/2014Basi di dati SQL50 Disgiunzione e unione (ma non sempre) select * from Persone where Reddito > 30 union select F.* from Persone F, Paternita, Persone P where F.Nome = Figlio and Padre = P.Nome and P.Reddito > 30 select * from Persone F where Reddito > 30 or exists (select * from Paternita, Persone P where F.Nome = Figlio and Padre = P.Nome and P.Reddito > 30)

30/10/2014Basi di dati SQL51 Differenza e nidificazione select Nome from Impiegato except select Cognome as Nome from Impiegato select Nome from Impiegato I where not exists (select * from Impiegato where Cognome = I.Nome)

30/10/2014Basi di dati SQL52 Operazioni di aggiornamento

30/10/2014Basi di dati SQL53 INSERT INTO Persone VALUES ('Mario',25,52) INSERT INTO Persone(Nome, Reddito, Eta) VALUES('Pino’,52,23) INSERT INTO Persone(Nome, Reddito) VALUES('Lino',55) INSERT INTO Persone ( Nome ) SELECT Padre FROM Paternita WHERE Padre NOT IN (SELECT Nome FROM Persone)

30/10/2014Basi di dati SQL54 Eliminazione di ennuple DELETE FROM Tabella [ WHERE Condizione ]

30/10/2014Basi di dati SQL55 DELETE FROM Persone WHERE Eta < 35 DELETE FROM Paternita WHERE Figlio NOT in (SELECT Nome FROM Persone) DELETE FROM Paternita

30/10/2014Basi di dati SQL56 Modifica di ennuple UPDATE NomeTabella SET Attributo = < Espressione | SELECT … | NULL | DEFAULT > [ WHERE Condizione ]

30/10/2014Basi di dati SQL57 UPDATE Persone SET Reddito = 45 WHERE Nome = 'Piero' UPDATE Persone SET Reddito = Reddito * 1.1 WHERE Eta < 30