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

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

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

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"

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

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

Corso di Basi di Dati

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

SQL e algebra relazionale

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

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

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

Interpretazione delle query nidificate

Queries su più tabelle

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

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

SQL /10/2016 Basi di dati - SQL 1

QL (Query Language) Alice Pavarani

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

Select From Where...

Manuale Comandi SQL SQL. Sito per esercitarsi (on line) SQL

Linguaggio SQL seconda parte

Interrogazioni semplici

SQL: le funzioni di aggregazione

Basi di dati - Laboratorio

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

Manuale SQL. Manuale SQL - 1 -

Structured Query Language

SQL - Structured Query Language

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

Basi di Dati: Corso di laboratorio

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

Informatica Grafica. Basi di dati parte 2

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

Corso di Informatica Medica

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

Appunti dalle lezioni. Sistemi informativi e basi di dati. Il modello relazionale. SQL come DCL Utilizzo di un DBMS Reale.

IL LINGUAGGIO SQL LE BASI

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

Caratteristiche dei linguaggi per Database

Laboratorio di Basi di Dati

Gestione delle informazioni. Tot. h 10. Base di Dati. Tot. h 56. Grafica in C# - Laboratorio- Tot. h 40. Dipartimento Informatica Materia Informatica

<Nome Tabella>.<attributo>

Basi di Dati: Corso di laboratorio

Basi di Dati. Concetti Avanzati

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

Corso di. Basi di Dati I. 9. Esercitazioni in SQL: Check, asserzioni, viste

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

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

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

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

Linguaggi per basi di dati e SQL

Corso di Informatica Linguaggio SQL prima parte

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

Monday, January 24, 2011 SQL

SQL: "storia" 31/05/2006 2

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

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

Database parte 2. Database azienda

SQL - Sottointerrogazioni correlate

Basi di Dati: Corso di laboratorio

SQL - Structured Query Language

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

Lezioni di Laboratorio sui Data Base

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

Fondamenti di Informatica A. A / 1 9

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

SQL. SQL come Data Manipulation Language - Inserimento, cancellazione e aggiornamento di righe

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

Sistemi di Elaborazione delle Informazioni

Interrogazioni complesse. SQL avanzato 1

La progettazione logica

Il linguaggio SQL - Interrogazioni -

Sommario. Introduzione... 13

Archivi e basi di dati - ing. M. Cossentino. Settore. Traccia 1. Traccia 200. Settore non polarizzato

Linguaggio SQL: fondamenti D B M G

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

Informatica. Sintassi. Interrogazioni in SQL. Significato dell interrogazione. Tabella Impiegato. Basi di dati parte 4 SQL

Tabelle esempio: Impiegato/Dipartimento

V. Moriggia Modelli di Base Dati. Modelli di Base Dati. a.a. 2001/

Sistemi di Elaborazione delle Informazioni

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

Operatori aggregati: COUNT

Corso di. Basi di Dati I. 8. Esercitazioni in SQL: Interrogazioni nidificate

Basi di Dati: Corso di laboratorio

Laboratorio di Basi di Dati

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

Basi di Dati: Corso di laboratorio

5.0- Le operazioni. Introduzione. OPERAZIONI INSIEMISTICHE Notazione Classica. Basi di Dati per la gestione dell Informazione

SQL DDL. Create database. Alter database. Drop database

Basi di Dati. Dettagli e Approfondimenti SQL-92 25/02/2004. Dettagli e Approfondimenti. DDL: Tabelle. DML: Aggiornamenti.

ESERCITAZIONI ACCESS

BASI di DATI. SQL: concetti fondamentali

Basi di Dati SQL-92. Dettagli e Approfondimenti

Idoneita Informatica. Sistemi per la gestione di basi di Dati

Basi di Dati SQL-92. Dettagli e Approfondimenti

SQL: Concetti Base -Prima Parte-

Transcript:

SQl come DML Angelo Chianese,, Vincenzo Moscato, Antonio Picariello,, Lucio Sansone Basi di dati per la gestione dell'informazione 2/ed McGraw-Hill Capitolo 5 Appunti dalle lezioni SQL come DDL Sistemi informativi e basi di dati La Progettazione Concettuale SQL come DML Il modello relazionale La Progettazione Logica SQL come DCL Utilizzo di un DBMS Reale La Progettazione Fisica Strumenti CASE Forme normali Programmazione Transazioni e tecnologie di supporto Basi di dati direzionali Basi di dati distribuite 2 AA 2010-2011, Basi di Dati, Prof. Antonio d Acierno, dacierno.a@isa.cnr.it SQL come DML

Data Manipulation Language (DML) Inserire dati Modificare dati Cancellare dati Estrarre dati SQL I sistemi commerciali spesso offrono una serie di strumenti che estendono le funzionalità definite a livello di standard. 3 AA 2010-2011, Basi di Dati, Prof. Antonio d Acierno, dacierno.a@isa.cnr.it SQL come DML Inserimento di Righe Prima forma: insert into NomeTab [(Lista)] values (Valori) Dipartimento(Codice: Codice:char char(4),nome: (4),Nome:varchar varchar(20)) Insert into Dipartimento values( aaa aaa, Amministrazione Amministrazione ) Insert into Dipartimento(Codice,Nome) values( aaa aaa, Amministrazione Amministrazione ) Insert into Diparttimento(Codice) values ( cccc cccc ) Insert into Diparttimento(Codice,Nome) values ( dddd dddd,null) 4 AA 2010-2011, Basi di Dati, Prof. Antonio d Acierno, dacierno.a@isa.cnr.it SQL come DML

Modifica di Righe update NomeTabella set Attr=< =<Espr null default> {,Attr Attr=< =<Espr null default>} [where Condizione] Dipartimento(Codice:char char(4),nome: (4),Nome:varchar varchar(20)) Update Dipartimento Set Nome = Amministrazione Amministrazione Update Dipartimento Set Nome = Amministrazione Amministrazione where Codice = aaaa aaaa Update Dipartimento Set Nome = Sconosciuto Sconosciuto where Nome is Null UPDATE prodotto SET prezzo = prezzo * 1.10 5 AA 2010-2011, Basi di Dati, Prof. Antonio d Acierno, dacierno.a@isa.cnr.it SQL come DML Cancellazione Righe delete from NomeTab [where Condizione] Dipartimento(Codice:char char(4),nome: (4),Nome:varchar varchar(20)) Delete from Dipartimento where Nome is Null Se la condizione where manca allora la tabella viene svuotata. delete from Dipartimento Invece: drop table Dipartimento elimina la tabella 6 AA 2010-2011, Basi di Dati, Prof. Antonio d Acierno, dacierno.a@isa.cnr.it SQL come DML

Interrogazioni (Query Query) SQL esprime le interrogazioni in modo dichiarativo attraverso il comando select. L interrogazione è poi automaticamente tradotta in termini procedurali e poi eseguita. Esistono vari modi per formulare una stessa query. L utente, tipicamente, non ha bisogno di preoccuparsi dell efficienza della query formulata quanto della sua leggibilità e modificabilità. 7 AA 2010-2011, Basi di Dati, Prof. Antonio d Acierno, dacierno.a@isa.cnr.it SQL come DML Query Sintassi (quasi) generale Select <elenco attributi> From <elenco tabella> [Where <condizione>] [Group by <attributi di raggruppamento>] [Having <condizione di raggruppamento>] [Order by <elenco attributi>] From Where Group By Having Select Order By 8 AA 2010-2011, Basi di Dati, Prof. Antonio d Acierno, dacierno.a@isa.cnr.it SQL come DML

Query Esempio: studente (Matricola ( Matricola,Nome, Cognome) CREATE TABLE studente ( matricola character(4) NOT NULL, cognome character varying(20), nome character varying(20), CONSTRAINT pk_studente PRIMARY KEY (matricola( matricola) ) INSERT INTO studente(matricola, cognome, nome) VALUES ('aaaa aaaa', 'Paolino', 'Paperino').. INSERT INTO studente(matricola, cognome, nome) VALUES ( bbbb ( bbbb', Rossi, Mario') 9 AA 2010-2011, Basi di Dati, Prof. Antonio d Acierno, dacierno.a@isa.cnr.it SQL come DML From Where Group By Having Select Order By select Cognome from Studente Matricola Cognome Nome aaaa Paolino Paperino bbbb Rossi Mario cccc Bianchi Mario dddd Bianchi Giuseppe eeee Rossi Vincenzo ffff Esposito Gennaro Cognome Paolino Rossi Bianchi Bianchi Rossi Esposito 10 AA 2010-2011, Basi di Dati, Prof. Antonio d Acierno, dacierno.a@isa.cnr.it SQL come DML

From Where Group By Having Select Order By select Cognome as Surname from Studente Matricola Cognome Nome aaaa Paolino Paperino bbbb Rossi Mario cccc Bianchi Mario dddd Bianchi Giuseppe eeee Rossi Vincenzo ffff Esposito Gennaro Surname Paolino Rossi Bianchi Bianchi Rossi Esposito 11 AA 2010-2011, Basi di Dati, Prof. Antonio d Acierno, dacierno.a@isa.cnr.it SQL come DML From Where Group By Having Select Order By select Cognome as Surname,, Nome from Studente Matricola Cognome Nome aaaa Paolino Paperino bbbb Rossi Mario cccc Bianchi Mario dddd Bianchi Giuseppe eeee Rossi Vincenzo ffff Esposito Gennaro Surname Paolino Rossi Bianchi Bianchi Rossi Esposito Nome Paperino Mario Mario Giuseppe Vincenzo Gennaro 12 AA 2010-2011, Basi di Dati, Prof. Antonio d Acierno, dacierno.a@isa.cnr.it SQL come DML

From Where Group By Having Select Order By select * from Impiegato Matricola Cognome Nome aaaa Paolino Paperino bbbb Rossi Mario cccc Bianchi Mario dddd Bianchi Giuseppe eeee Rossi Vincenzo ffff Esposito Gennaro Matricola Cognome Nome aaaa Paolino Paperino bbbb Rossi Mario cccc Bianchi Mario dddd Bianchi Giuseppe eeee Rossi Vincenzo ffff Esposito Gennaro 13 AA 2010-2011, Basi di Dati, Prof. Antonio d Acierno, dacierno.a@isa.cnr.it SQL come DML From Where Group By Having Select Order By select * from Impiegato where Cognome= Bianchi Bianchi Matricola Cognome Nome aaaa Paolino Paperino bbbb Rossi Mario cccc Bianchi Mario dddd Bianchi Giuseppe eeee Rossi Vincenzo ffff Esposito Gennaro Matricola Cognome Nome cccc Bianchi Mario dddd Bianchi Giuseppe select Stipendio/12 as StipMens from Impiegato where cognome= Rossi Rossi 14 AA 2010-2011, Basi di Dati, Prof. Antonio d Acierno, dacierno.a@isa.cnr.it SQL come DML

From Where Group By Having Select Order By E possibile usare connettivi logici (and, or, not) ed espressioni di confronto. select nome, cognome from Impiegato where ufficio=20 and dipartimento= DIS DIS select nome, cognome from Impiegato where ufficio=20 or dipartimento= DIS DIS select nome from Impiegato where cognome = Rossi Rossi and (ufficio=20 or dipartimento= DIS DIS ) 15 AA 2010-2011, Basi di Dati, Prof. Antonio d Acierno, dacierno.a@isa.cnr.it SQL come DML From Where Group By Having Select Order By Operatore LIKE E usato nel confronto di stringhe e si appoggia su due caratteri speciali: _ (indica un qualsiasi carattere) % (indica una stringa, anche vuota) select nome from Impiegato where cognome like _o%i _o%i Ritornerà tutti nomi di Impiegato il cui cognome ha una o in seconda posizione e termina per i (Rossi, Doncelli, Loi). 16 AA 2010-2011, Basi di Dati, Prof. Antonio d Acierno, dacierno.a@isa.cnr.it SQL come DML

From Where Group By Having Select Order By Valori Null Where Stipendio > 40 è soddisfatta dalle righe in cui Stipendio e e noto e maggiore di 40. Per i valori nulli si usa Stipendio is null: where stipendio is null where stipendio is not null Not V F U F V U O r V U F V V V V U V U U F V U F a n d V U F V V U F U U U F F F F F 17 AA 2010-2011, Basi di Dati, Prof. Antonio d Acierno, dacierno.a@isa.cnr.it SQL come DML SQL vs Relazione come Insieme Abbiamo detto che il risultato del select è una relazione. Questo non è del tutto vero, in quanto tale risultato potrebbe avere righe uguali. Ciò è dovuto a ragioni di efficienza, perché eliminare i duplicati può essere costoso in termini di tempo e deve essere espressamente richiesto. select distinct Città from... 18 AA 2010-2011, Basi di Dati, Prof. Antonio d Acierno, dacierno.a@isa.cnr.it SQL come DML

From Where Group By Having Select Order By Impiegato(Matricola Matricola,, Cognome, Nome, Dipartimento.Dipartimento(Nome)) Dipartimento(Nome Nome, Citta) select * from Impiegato, Dipartimento select * from Impiegato CROSS JOIN Dipartimento 19 AA 2010-2011, Basi di Dati, Prof. Antonio d Acierno, dacierno.a@isa.cnr.it SQL come DML From Where Group By Having Select Order By 20 AA 2010-2011, Basi di Dati, Prof. Antonio d Acierno, dacierno.a@isa.cnr.it SQL come DML

From Where Group By Having Select Order By Nomi ambigui select nome from Impiegato, Dipartimento select Impiegato.nome from Impiegato, Dipartimento select I.nome, D.citta from Impiegato as I, Dipartimento as D 21 AA 2010-2011, Basi di Dati, Prof. Antonio d Acierno, dacierno.a@isa.cnr.it SQL come DML From Where Group By Having Select Order By select * from Impiegato as I, Dipartimento as D where I.Dipartimento =D.Nome 22 AA 2010-2011, Basi di Dati, Prof. Antonio d Acierno, dacierno.a@isa.cnr.it SQL come DML

From Where Group By Having Select Order By select * from Impiegato as I inner join Dipartimento as D on (I.Dipartimento( =D.Nome) 23 AA 2010-2011, Basi di Dati, Prof. Antonio d Acierno, dacierno.a@isa.cnr.it SQL come DML From Where Group By Having Select Order By Join from t1 tipojoin join t2 on condizione tipojoin inner, right (outer ( outer) left (outer outer) full (outer ( outer) 24 AA 2010-2011, Basi di Dati, Prof. Antonio d Acierno, dacierno.a@isa.cnr.it SQL come DML

From Where Group By Having Select Order By Con il join interno le righe coinvolte nel risultato sono in genere un sottoinsieme delle righe di ciascuna tabella, perché una riga della tabella R1 potrebbe non avere corrispondenze nella tabella R2 e viceversa. In alcune applicazioni potrebbe servire mantenere tutte le righe di qualcuna delle (tutte le) tabelle coinvolte, mettendo dei valori Null per indicare l l assenza di informazioni provenienti dall altra tabella. Outer Join Il join esterno mantiene tutte le righe della tabella di sinistra (left ( left), della tabella di destra (right) o di entrambe (full). 25 AA 2010-2011, Basi di Dati, Prof. Antonio d Acierno, dacierno.a@isa.cnr.it SQL come DML From Where Group By Having Select Order By 26 AA 2010-2011, Basi di Dati, Prof. Antonio d Acierno, dacierno.a@isa.cnr.it SQL come DML

From Where Group By Having Select Order By 27 AA 2010-2011, Basi di Dati, Prof. Antonio d Acierno, dacierno.a@isa.cnr.it SQL come DML From Where Group By Having Select Order By 28 AA 2010-2011, Basi di Dati, Prof. Antonio d Acierno, dacierno.a@isa.cnr.it SQL come DML

From Where Group By Having Select Order By Variabili usate nel FROM select I.nome,, D.nome, D.Citta from Impiegato as I, Dipartimento as D where I.Dipart = D.Nome In questo caso la variabile è da interpretarsi semplicemente come un ridenominazione. Utilizzando gli Alias è però possibile anche far riferimento a più esemplari della stessa tabella. In questo caso l interpretazione l è che, per ogni alias, si introducesse una variabile di tipo tabella che viene inizializzata con la tabella in questione. 29 AA 2010-2011, Basi di Dati, Prof. Antonio d Acierno, dacierno.a@isa.cnr.it SQL come DML Esempio Impiegato(Matricola Cognome Eta Stipendio) Supervisione(Capo Capo:Impiegato.Matricola Impiegato:Impiegato Impiegato.Matricola) Trovare il nome e lo stipendio degli impiegati che guadagnano più del proprio capo. Select I2.Nome,, I2.Stip from (Impiegato as I1 join Supervisione as S on (I1.Matricola=S.Capo)) join Impiegato as I2 on (I2.Matricola=S.Impiegato) where I2.Stipendio > I1.Stipendio Cognome Eta Stipendio Matricola Capo Impiegato Matricola Cognome Eta Stipendio 30 AA 2010-2011, Basi di Dati, Prof. Antonio d Acierno, dacierno.a@isa.cnr.it SQL come DML

Esempio 31 AA 2010-2011, Basi di Dati, Prof. Antonio d Acierno, dacierno.a@isa.cnr.it SQL come DML From Where Group By Having Select Order By Il risultato di una interrogazione è una relazione e come tale non è ordinata. Nelle applicazioni è comunque utile avere i risultati ordinati secondo una certa strategia. L ordinamento agisce prima del select Non è necessario ordinare su un attributo selezionato L ordinamento introduce, in molti casi, un certo overhead. select Matricola from Impiegato order by Cognome, Nome desc 32 AA 2010-2011, Basi di Dati, Prof. Antonio d Acierno, dacierno.a@isa.cnr.it SQL come DML

From Where Group By Having Select Order By Operatori Aggregati Agiscono non a livello di tupla ma a livello di relazione. count sum max min avg count (<* [distinct [ all] listaattributi) select count(all nome,cognome) from Impiegati 33 AA 2010-2011, Basi di Dati, Prof. Antonio d Acierno, dacierno.a@isa.cnr.it SQL come DML 34 AA 2010-2011, Basi di Dati, Prof. Antonio d Acierno, dacierno.a@isa.cnr.it SQL come DML

Operatori Aggregati (continua) <sum avg max min> ([distinct all] Attr) sum e avg richiedono che l l attributo sia numerico o di tipo intervallo temporale. max e min possono riferirsi a qualsiasi attributo sul cui dominio sia s definito un ordinamento. select max(stip Stip) from Impiegato where eta <35 errata select Matr, max(stip Stip) from Impiegato where eta <35 35 AA 2010-2011, Basi di Dati, Prof. Antonio d Acierno, dacierno.a@isa.cnr.it SQL come DML Interrogazioni con Raggruppamento In alcune applicazioni sorge l esigenza l di applicare gli operatori aggregati distintamente a sottoinsiemi di righe. Impiegati nome dipart Uff Stip Pippo dip1 1 10 Pluto dip2 2 15 Topolino dip3 3 12 Paperino dip1 4 11 Paperina dip2 5 10 select dipart, sum(stip) from Impiegati Group by dipart 36 AA 2010-2011, Basi di Dati, Prof. Antonio d Acierno, dacierno.a@isa.cnr.it SQL come DML

Interrogazioni con Raggruppamento Step 1: select dipart, Stip from Impiegati Step 2. Le righe della tabella ottenuta sono analizzate e raggruppate in sottoinsiemi in funzione dell attributo di group by. Step 3. Sui sottoinsiemi viene applicato l l operatore aggregato. 37 AA 2010-2011, Basi di Dati, Prof. Antonio d Acierno, dacierno.a@isa.cnr.it SQL come DML 38 AA 2010-2011, Basi di Dati, Prof. Antonio d Acierno, dacierno.a@isa.cnr.it SQL come DML

Interrogazioni con Raggruppamento select ufficio from impiegato group by dipart sintatticamente errata e priva di senso. select dipart, count (*), Citta from Impiegato I inner join dipartimento D on (I.dipart=D.nome) group by dipart sintatticamente errata ma significativa select dipart, count (*), Citta from Impiegato I inner join dipartimento D on (I.dipart=D.nome) group by dipart, citta 39 AA 2010-2011, Basi di Dati, Prof. Antonio d Acierno, dacierno.a@isa.cnr.it SQL come DML Predicati sui Gruppi La clausola group by consente di lavorare su sottoinsiemi. La clausola having consente di selezionare i sottoinsiemi. select dipart,, sum(stip Stip) from Impiegati groupby dipart having sum(stip Stip) >= 20 40 AA 2010-2011, Basi di Dati, Prof. Antonio d Acierno, dacierno.a@isa.cnr.it SQL come DML

41 AA 2010-2011, Basi di Dati, Prof. Antonio d Acierno, dacierno.a@isa.cnr.it SQL come DML Interrogazioni Insiemistiche union, intersect, execpt (minus minus) Possono essere solo al livello più esterno di una query, operando sul risultato di un select. Eseguono sempre una eliminazione di duplicati (se non si esplicita la keyword all). E richiesto che gli attributi siano compatibili. select cognome from Impiegati union all select nome from impiegati 42 AA 2010-2011, Basi di Dati, Prof. Antonio d Acierno, dacierno.a@isa.cnr.it SQL come DML

43 AA 2010-2011, Basi di Dati, Prof. Antonio d Acierno, dacierno.a@isa.cnr.it SQL come DML Interrogazioni Nidificate In SQL è possibile confrontare un valore con il risultato di un select. All, any select * from impiegato where Dipart = any ( select Nome from dipartimento where citta = topolinia ) select * from impiegato where Dipart <> all ( select Nome from dipartimento where citta = topolinia ) 44 AA 2010-2011, Basi di Dati, Prof. Antonio d Acierno, dacierno.a@isa.cnr.it SQL come DML

Interrogazioni Nidificate Impiegato(Matricola, Cognome,Stipendio) Trovare gli impiegati che guadagnano lo stipendio più alto Select * From Impiegato Where Stipendio = ( Select max(stipendio) From Impiegato) 45 AA 2010-2011, Basi di Dati, Prof. Antonio d Acierno, dacierno.a@isa.cnr.it SQL come DML Interpretazione L interrogazione nidificata è eseguita una sola volta prima di eseguire l interrogazione esterna. che sarà basata su un risultato temporaneo. L interrogazione interna può anche fare riferimento a quella esterna, rendendo questa interpretazione non più valida. Bisogna allora reinterpretare il tutto in termini di prodotto cartesiano di tabelle sul cui risultato si applicano le condizioni espresse nel l predicato where. Poiché il predicato where è a sua volta una interrogazione, questa dovrà essere valutata per ogni riga del prodotto stesso. 46 AA 2010-2011, Basi di Dati, Prof. Antonio d Acierno, dacierno.a@isa.cnr.it SQL come DML

Interpretazione Persona(CF,Cognome,Nome) Trovare gli omonimi Select distinct P1.* From Persona P1, Persona P2 where P1.nome = P2.nome and P1.cognome = P2.cognome and P1.CodFis <> P2.CodFis 47 AA 2010-2011, Basi di Dati, Prof. Antonio d Acierno, dacierno.a@isa.cnr.it SQL come DML select * from Persona P Inserimento di Righe (forma 2) insert into NomeTab [ListaAttributi ListaAttributi] <values (ListaValori ListaValori) SelectSQL> Esempio forma 1: insert into Dipartimento(Nome,Citta) values( prod prod, Milano Milano ) Esempio forma 2: insert into ProdottiMilanesi (select * from Prodotti where LuogoProd= Milano Milano ) 48 AA 2010-2011, Basi di Dati, Prof. Antonio d Acierno, dacierno.a@isa.cnr.it SQL come DML