Corso di Informatica - UniBG · 2019-04-29 · Corso di Informatica –Dipartimento di Scienze...

49
Corso di Informatica Linguaggio SQL prima parte Anno Accademico 2018 - 2019

Transcript of Corso di Informatica - UniBG · 2019-04-29 · Corso di Informatica –Dipartimento di Scienze...

Page 1: Corso di Informatica - UniBG · 2019-04-29 · Corso di Informatica –Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi –Università di Bergamo 17 SELECT come

Corso di InformaticaLinguaggio SQL – prima parte

Anno Accademico 2018-2019

Page 2: Corso di Informatica - UniBG · 2019-04-29 · Corso di Informatica –Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi –Università di Bergamo 17 SELECT come

2Corso di Informatica – Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi – Università di Bergamo

Linguaggio SQL

(Structured Query Language)

Page 3: Corso di Informatica - UniBG · 2019-04-29 · Corso di Informatica –Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi –Università di Bergamo 17 SELECT come

3Corso di Informatica – Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi – Università di Bergamo

Un linguaggio per DBMS (DataBase Management System) deve

permettere di:

• definire e creare il database: DDL - Data Definition Language

• inserire, cancellare e modificare i dati: DML - Data Manipulation Language

• interrogare il database per estrarre informazioni: QL - Query Language

• SQL – Structured Query Language è il linguaggio standardizzato che

assolve a funzioni di DDL, DML e QL

– Portabile da un DBMS a un altro

– Utile e necessario anche con le query QBE di Access

– Query QBE di Access Codice SQL

– Codice SQL Query QBE di Access

Il linguaggio deve permettere di fare tutto questo facilmente ed essere basato su costrutti semplici e facili da imparare. Le sue caratteristiche, infine, devono essere standardizzate in modo che un utente, cambiando DBMS, non debba apprendere un nuovo linguaggio per usare la base dati.

Il linguaggio SQL

Page 4: Corso di Informatica - UniBG · 2019-04-29 · Corso di Informatica –Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi –Università di Bergamo 17 SELECT come

4Corso di Informatica – Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi – Università di Bergamo

Il database degli esempi (1)

Impiegati ( ID, Nome, Cognome, Residenza, Stipendio, Dipartimento )

Dipartimenti ( Codice, Descrizione, Sede, Manager )

1 N

Impiegato

ID {PK}

Nome

Cognome

Residenza

Stipendio

Dipartimento

Codice {PK}

Descrizione

Sede

1N Comprendere

Coordinare

Page 5: Corso di Informatica - UniBG · 2019-04-29 · Corso di Informatica –Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi –Università di Bergamo 17 SELECT come

5Corso di Informatica – Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi – Università di Bergamo

Il database degli esempi (2)

Impiegati

Dipartimenti

Page 6: Corso di Informatica - UniBG · 2019-04-29 · Corso di Informatica –Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi –Università di Bergamo 17 SELECT come

6Corso di Informatica – Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi – Università di Bergamo

SQL un esempio di query

Nome, Cognome, Stipendio e sede di lavoro dei dipendenti con

retribuzione superiore a 50000 euro

SELECT Nome, Cognome, Stipendio, Sede

FROM Impiegati INNER JOIN Dipartimenti ON

Impiegati.Dipartimento = Dipartimenti.Codice

WHERE Stipendio > 50000;

Page 7: Corso di Informatica - UniBG · 2019-04-29 · Corso di Informatica –Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi –Università di Bergamo 17 SELECT come

7Corso di Informatica – Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi – Università di Bergamo

Caratteristiche generali di SQL (1)

• Linguaggio standard per la gestione di data base relazionali

• Linguaggio dichiarativo:

– si dichiara cosa si vuole ottenere e non come ottenerlo

• Estensione dell’algebra relazionale: calcoli, ordinamenti, raggruppamenti

• Visione tabellare dei dati:

– opera su gruppi di righe o sull'intera tabella, non su una riga per volta

• Identificatori:

– nomi di tabelle e di colonne di lunghezza massima di 18 caratteri

• Colonne specificate con la dot notation:

– NomeTabella.NomeColonna

– Obbligatoria solo in caso di omonimie

Page 8: Corso di Informatica - UniBG · 2019-04-29 · Corso di Informatica –Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi –Università di Bergamo 17 SELECT come

8Corso di Informatica – Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi – Università di Bergamo

Caratteristiche generali di SQL (2)

• Operatori aritmetici e relazionali

– + - * / ^ & > < = <= >= <> Between IN LIKE …

• Operatori logici:

– AND OR NOT XOR …

• Stringhe di caratteri delimitate con ' oppure "

• Date delimitate con # (Access)

• Assenza di informazioni, valore nullo: NULL

– Controllato con il predicato IS NULL

– Esempio: Dipartimento IS NULL

– Errore Dipartimento = NULL

• Tipi per i dati:

– INTEGER, DECIMAL, FLOAT, CHARACTER, DATE, TIME

Page 9: Corso di Informatica - UniBG · 2019-04-29 · Corso di Informatica –Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi –Università di Bergamo 17 SELECT come

9Corso di Informatica – Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi – Università di Bergamo

SQL come DDL e DML

Page 10: Corso di Informatica - UniBG · 2019-04-29 · Corso di Informatica –Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi –Università di Bergamo 17 SELECT come

10Corso di Informatica – Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi – Università di Bergamo

Definizione delle tabelle (1)

Creazione della tabella Impiegati

CREATE TABLE Impiegati (

ID smallint primary key,

Nome char(20) not null,

Cognome char(30) not null,

Residenza char(20) default '*** Manca Residenza',

Stipendio decimal(9,2),

Dipartimento char(5) references Dipartimenti(Codice)

);

Integrità

referenziale

Access fa uso di

interfacce grafiche

Page 11: Corso di Informatica - UniBG · 2019-04-29 · Corso di Informatica –Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi –Università di Bergamo 17 SELECT come

11Corso di Informatica – Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi – Università di Bergamo

Definizione delle tabelle (2)

Creazione della tabella Dipartimenti

CREATE TABLE Dipartimenti (

Codice char(5),

Descrizione char(20) not null,

Sede char(20),

Manager smallint,

Primary Key (Codice),

Unique (Descrizione),

Foreign Key (Manager) references Impiegati(ID)

On Delete set null

On Update cascade

);

Per cancellazioni

e variazioni di ID

Sconsigliato

Page 12: Corso di Informatica - UniBG · 2019-04-29 · Corso di Informatica –Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi –Università di Bergamo 17 SELECT come

12Corso di Informatica – Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi – Università di Bergamo

Cambiamento della struttura di una tabella

• Aggiunta del campo Nascita a Impiegati

• Eliminazione di Residenza da Impiegati

• La coppia di attributi: Cognome, Nome indicizzata e non duplicabile

• Eliminazione della tabella Impiegati

CREATE UNIQUE INDEX IndiceImpiegati

ON Impiegati(Cognome, Nome);

ALTER TABLE Impiegati

ADD Nascita date;

ALTER TABLE Impiegati

DROP Residenza;

DROP TABLE Impiegati;

Page 13: Corso di Informatica - UniBG · 2019-04-29 · Corso di Informatica –Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi –Università di Bergamo 17 SELECT come

13Corso di Informatica – Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi – Università di Bergamo

Manipolazione dei dati (1)

• Inserimento di un record nella tabella Impiegati

INSERT INTO Impiegati

(ID, Nome, Cognome, Residenza, Stipendio, Dipartimento)

VALUES(20,'Mario','Rossini','Caserta',31500,'Mag');

INSERT INTO Impiegati

VALUES(21,'Enrico','Rossetti','Bergamo',28800,'Prod');

• Inserimento di un record con campi mancanti:

INSERT INTO Impiegati (ID, Nome, Cognome, Stipendio)

VALUES(22,'Bruno','Locatelli',33000);

• Rossini (Matricola = 20) lavora in Produzione, non in magazzino:

UPDATE Impiegati

SET Dipartimento = 'Prod'

WHERE ID = 20;

Comando equivalente

Valori nulli nei

campi mancanti

Page 14: Corso di Informatica - UniBG · 2019-04-29 · Corso di Informatica –Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi –Università di Bergamo 17 SELECT come

14Corso di Informatica – Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi – Università di Bergamo

Manipolazione dei dati (2)

• Aumento del 5% ai dipendenti della Produzione

• Eliminazione del dipendente con ID = 20:

• Cancellazione di tutti i dipendenti del reparto R&S:

UPDATE Impiegati

SET Stipendio = Stipendio * 1.05

WHERE Dipartimento = 'Prod';

DELETE FROM Impiegati

WHERE ID = 20;

DELETE FROM Impiegati

WHERE Dipartimento = 'R&S';

UPDATE Impiegati SET Stipendio = Stipendio * 1.15;

DELETE FROM Impiegati;Effetto dei due comandi?

Page 15: Corso di Informatica - UniBG · 2019-04-29 · Corso di Informatica –Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi –Università di Bergamo 17 SELECT come

15Corso di Informatica – Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi – Università di Bergamo

SQL come QL

Page 16: Corso di Informatica - UniBG · 2019-04-29 · Corso di Informatica –Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi –Università di Bergamo 17 SELECT come

16Corso di Informatica – Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi – Università di Bergamo

Il comando Select

Per estrarre informazioni dal database si usa il comando SELECT.

SELECT ha la seguente sintassi base:

• Exp1, Exp2, … espressioni sui valori delle colonne (e non solo)

• Estensione delle interrogazioni dell’algebra relazionale

– Esecuzione di calcoli

– Ordinamenti

– Raggruppamenti

• SELECT significa: Visualizza, Mostra

• Formato libero, come tutti i comandi SQL termina con “;”

SELECT Exp1, Exp2, .. , ExpN

FROM Tabelle

WHERE Condizioni ;

Page 17: Corso di Informatica - UniBG · 2019-04-29 · Corso di Informatica –Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi –Università di Bergamo 17 SELECT come

17Corso di Informatica – Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi – Università di Bergamo

SELECT come Calcolatrice

• In alcuni DBMS, Access compreso, SELECT può essere usato senza altre

clausole, per visualizzare il valore di un’espressione

1. Area del rettangolo di lati 4 e 5

2. Ipotenusa di un triangolo rettangolo con cateti 3 e 4

Page 18: Corso di Informatica - UniBG · 2019-04-29 · Corso di Informatica –Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi –Università di Bergamo 17 SELECT come

18Corso di Informatica – Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi – Università di Bergamo

Le tavole di verità di AND, OR, ..

• La tabella Booleana contiene 4 righe con i valori delle grandezze booleane

A e B come nella figura

• Uso degli operatori logici AND, OR, XOR, EQV, IMP

1

0

V

Page 19: Corso di Informatica - UniBG · 2019-04-29 · Corso di Informatica –Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi –Università di Bergamo 17 SELECT come

19Corso di Informatica – Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi – Università di Bergamo

Interrogazioni su una sola tabella

Page 20: Corso di Informatica - UniBG · 2019-04-29 · Corso di Informatica –Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi –Università di Bergamo 17 SELECT come

20Corso di Informatica – Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi – Università di Bergamo

Interrogazioni su una sola tabella (1)

• Algebra relazionale: proiezioni e selezioni

• ID, Cognome e Nome dei dipendenti torinesi della produzione

• Tutti i dati dei dipendenti di Roma

SELECT ID, Cognome, Nome

FROM Impiegati

WHERE Dipartimento = 'Prod' AND Residenza ='Torino';

SELECT *

FROM Impiegati

WHERE Residenza =‘Roma';

SELECT * FROM Impiegati WHERE Residenza =‘Roma';

Formato libero!

Page 21: Corso di Informatica - UniBG · 2019-04-29 · Corso di Informatica –Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi –Università di Bergamo 17 SELECT come

21Corso di Informatica – Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi – Università di Bergamo

Interrogazioni su una sola tabella (2)

• DISTINCT per non avere righe duplicate

SELECT Residenza

FROM Impiegati;

SELECT ALL Residenza

FROM Impiegati;

SELECT DISTINCT Residenza

FROM Impiegati;

Forme equivalenti

Page 22: Corso di Informatica - UniBG · 2019-04-29 · Corso di Informatica –Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi –Università di Bergamo 17 SELECT come

22Corso di Informatica – Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi – Università di Bergamo

Interrogazioni su una sola tabella (3)

• Ridenominazione dei campi: AS (AS obbligatorio in SELECT)

• Esecuzione di calcoli sui campi

SELECT ID AS Matricola, Cognome, Nome

FROM Impiegati

WHERE Dipartimento = 'Prod' AND Residenza ='Torino';

SELECT Cognome, Nome, Stipendio AS Attuale,

Stipendio*1.05 AS Nuovo

FROM Impiegati

WHERE Dipartimento ='Mag';

Page 23: Corso di Informatica - UniBG · 2019-04-29 · Corso di Informatica –Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi –Università di Bergamo 17 SELECT come

23Corso di Informatica – Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi – Università di Bergamo

Interrogazioni parametriche

• Interrogazioni parametriche (con Access)

SELECT Cognome, Nome, Residenza, Stipendio

FROM Impiegati

WHERE Stipendio >= [Retribuzione minima?];

Page 24: Corso di Informatica - UniBG · 2019-04-29 · Corso di Informatica –Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi –Università di Bergamo 17 SELECT come

24Corso di Informatica – Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi – Università di Bergamo

Ricerca di valori nulli: IS NULL

• Ricerca di valori mancanti: IS NULL

SELECT ID AS Matricola, Cognome, Nome

FROM Impiegati

WHERE Dipartimento IS NULL;

SELECT ID AS Matricola, Cognome, Nome

FROM Impiegati

WHERE Dipartimento = NULL;

SELECT ID AS Matricola, Cognome, Nome

FROM Impiegati

WHERE Dipartimento = “”;

Da evitare:

Page 25: Corso di Informatica - UniBG · 2019-04-29 · Corso di Informatica –Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi –Università di Bergamo 17 SELECT come

25Corso di Informatica – Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi – Università di Bergamo

Proiezioni e Selezioni con SQL

• Proiezioni: SELECT ElencoColonne

• Proiezione di Impiegati su Cognome, Nome, ID

• Selezioni: WHERE CondizioneDiSelezione

• Selezione di Impiegati per Stipendio < 31000

• DISTINCT garantisce l’assenza di righe duplicate

SELECT *

FROM Impiegati

WHERE Stipendio < 31000;

SELECT Cognome, Nome, ID

FROM Impiegati;Ci sono righe duplicate?

Ci sono righe duplicate?

Page 26: Corso di Informatica - UniBG · 2019-04-29 · Corso di Informatica –Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi –Università di Bergamo 17 SELECT come

26Corso di Informatica – Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi – Università di Bergamo

Esercizi

Scrivere i comandi SQL per ottenere:

1. L’elenco con i nomi di tutti i reparti

2. L’elenco dei prodotti (con Descrizione e Prezzo) di un reparto del quale si conosce

il codice. (Query parametrica)

3. L’elenco dei prodotti (CodProdotto, Descrizione e Prezzo) di prezzo compreso tra

100 e 200.

4. CodProdotto, Prezzo e CodReparto di un prodotto del quale si conosce la

descrizione.

5. Tutti i dati di un prodotto del quale si conosce il codice.

6. CodProdotto, Descrizione e Prezzo dei prodotti di prezzo minore di 250 e che sono

venduti in uno dei tre reparti di codice: “Rep1”, “Rep2”, “Rep3”

7. CodProdotto, Descrizione e Prezzo dei prodotti il cui nome comincia per “A”.

Reparti ( CodReparto, NomeReparto )

Prodotti ( CodProdotto, Descrizione, Prezzo, CodReparto )

Page 27: Corso di Informatica - UniBG · 2019-04-29 · Corso di Informatica –Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi –Università di Bergamo 17 SELECT come

27Corso di Informatica – Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi – Università di Bergamo

Interrogazioni su più tabelle

Page 28: Corso di Informatica - UniBG · 2019-04-29 · Corso di Informatica –Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi –Università di Bergamo 17 SELECT come

28Corso di Informatica – Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi – Università di Bergamo

JOIN ed SQL

• Per capire come agisce SELECT con più tabelle usiamo :

• Componiamo Madri e Padri per ottenere:

– Prodotto Cartesiano

– Equi Join

– Left Join

– Right Join

Page 29: Corso di Informatica - UniBG · 2019-04-29 · Corso di Informatica –Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi –Università di Bergamo 17 SELECT come

29Corso di Informatica – Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi – Università di Bergamo

Prodotto Cartesiano

Dati privi di valore

informativo

Page 30: Corso di Informatica - UniBG · 2019-04-29 · Corso di Informatica –Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi –Università di Bergamo 17 SELECT come

30Corso di Informatica – Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi – Università di Bergamo

Equi Join: due sintassi

AS opzionale

Sintassi usata

da Access

Page 31: Corso di Informatica - UniBG · 2019-04-29 · Corso di Informatica –Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi –Università di Bergamo 17 SELECT come

31Corso di Informatica – Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi – Università di Bergamo

Left Join: tutte le madri

Valori Nulli

Page 32: Corso di Informatica - UniBG · 2019-04-29 · Corso di Informatica –Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi –Università di Bergamo 17 SELECT come

32Corso di Informatica – Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi – Università di Bergamo

Right Join: tutti i padri

Valori Nulli

Page 33: Corso di Informatica - UniBG · 2019-04-29 · Corso di Informatica –Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi –Università di Bergamo 17 SELECT come

33Corso di Informatica – Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi – Università di Bergamo

Osservazioni sul Join

• EQUI JOIN: selezione delle righe del prodotto cartesiano

• NATURAL JOIN: in Access non c’è

SELECT Madre, M.Figlio AS Figlio, Padre

FROM Madri M INNER JOIN Padri P ON M.Figlio = P.Figlio;

• Partecipano al JOIN solo le righe con corrispondenti: alcune spariscono

• LEFT JOIN: le madri senza corrispondenti padri

Select Madre From Madri M LEFT Join Padri P ON …

Where P.Figlio IS NULL;

• RIGHT JOIN: i padri senza corrispondenti madri

Select Padre From Madri M RIGHT Join Padri P …

WHERE M.Figlio IS NULL;

• FULL JOIN: in Access non c’è (serve a poco o nulla)

(SELECT … LEFT JOIN … ) UNION (SELECT … RIGHT JOIN … );

Page 34: Corso di Informatica - UniBG · 2019-04-29 · Corso di Informatica –Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi –Università di Bergamo 17 SELECT come

34Corso di Informatica – Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi – Università di Bergamo

Esempi di interrogazioni

Page 35: Corso di Informatica - UniBG · 2019-04-29 · Corso di Informatica –Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi –Università di Bergamo 17 SELECT come

35Corso di Informatica – Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi – Università di Bergamo

Esempi (1)

• Elenco dei dipendenti che lavorano in un dipartimento di Roma, con Cognome,

Nome e descrizione del dipartimento

Congiunte le due tabelle, si opera una selezione per Sede = “Roma” e una

proiezione sui campi richiesti

Impiegati ( ID, Nome, Cognome, Residenza, Stipendio, Dipartimento )

Dipartimenti ( Codice, Descrizione, Sede, Manager )

SELECT Cognome, Nome, Descrizione

FROM Impiegati INNER JOIN Dipartimenti ON

Dipartimento = Codice

WHERE Sede = ‘Roma';

SELECT Cognome, Nome, Descrizione

FROM Impiegati, Dipartimenti

WHERE Dipartimento = Codice AND

Sede = ‘Roma';

Sintassi più elegante

Page 36: Corso di Informatica - UniBG · 2019-04-29 · Corso di Informatica –Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi –Università di Bergamo 17 SELECT come

36Corso di Informatica – Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi – Università di Bergamo

Esempi (1 bis)

Page 37: Corso di Informatica - UniBG · 2019-04-29 · Corso di Informatica –Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi –Università di Bergamo 17 SELECT come

37Corso di Informatica – Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi – Università di Bergamo

Esempi (2)

• Cognome, Nome, Stipendio e Descrizione del dipartimento dei dipendenti che

lavorano a Torino e hanno retribuzione superiore a 30000.

Congiunte le due tabelle, si opera una selezione per Sede = “Torino”, Stipendio

> 30000 e si esegue una proiezione sui campi richiesti

Impiegati ( ID, Nome, Cognome, Residenza, Stipendio, Dipartimento )

Dipartimenti ( Codice, Descrizione, Sede, Manager )

SELECT Cognome, Nome, Stipendio, Descrizione

FROM Impiegati INNER JOIN Dipartimenti ON

Dipartimento = Codice

WHERE Sede = ‘Torino‘ AND Stipendio > 30000;

Page 38: Corso di Informatica - UniBG · 2019-04-29 · Corso di Informatica –Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi –Università di Bergamo 17 SELECT come

38Corso di Informatica – Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi – Università di Bergamo

Esempi (3)

• Cognome, Nome, Residenza, Descrizione del dipartimento e Sede dei

dipendenti che lavorano in una città diversa da quella dove risiedono.

Congiunte le due tabelle, si opera una selezione per Residenza <> Sede e si

esegue una proiezione sui campi richiesti

Impiegati ( ID, Nome, Cognome, Residenza, Stipendio, Dipartimento )

Dipartimenti ( Codice, Descrizione, Sede, Manager )

SELECT Cognome, Nome, Residenza, Descrizione, Sede

FROM Impiegati, Dipartimenti

WHERE Dipartimento = Codice AND

Residenza <> Sede;

Page 39: Corso di Informatica - UniBG · 2019-04-29 · Corso di Informatica –Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi –Università di Bergamo 17 SELECT come

39Corso di Informatica – Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi – Università di Bergamo

Esempi (4)

• Dipartimenti senza dipendenti assegnati (con Descrizione e Sede)

Congiunte Dipartimenti e Impiegati con un LEFT JOIN si selezionano le

righe con valori nulli in corrispondenza del campo ID e si esegue una

proiezione …

Impiegati ( ID, Nome, Cognome, Residenza, Stipendio, Dipartimento )

Dipartimenti ( Codice, Descrizione, Sede, Manager )

SELECT Descrizione, Sede

FROM Dipartimenti LEFT JOIN Impiegati ON

Codice = Dipartimento

WHERE ID IS NULL;

Page 40: Corso di Informatica - UniBG · 2019-04-29 · Corso di Informatica –Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi –Università di Bergamo 17 SELECT come

40Corso di Informatica – Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi – Università di Bergamo

Esempi (5)

• ID, Nome e Cognome degli impiegati non assegnati ad alcun dipartimento

Si esegue una Selezione su Impiegati per Dipartimento a valori nulli e si

esegue una proiezione sui campi richiesti

Impiegati ( ID, Nome, Cognome, Residenza, Stipendio, Dipartimento )

Dipartimenti ( Codice, Descrizione, Sede, Manager )

SELECT ID, Nome, Cognome

FROM Impiegati

WHERE Dipartimento IS NULL;

Page 41: Corso di Informatica - UniBG · 2019-04-29 · Corso di Informatica –Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi –Università di Bergamo 17 SELECT come

41Corso di Informatica – Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi – Università di Bergamo

Esempi (6)

• ID, Nome, Cognome, Stipendio, codice del dipartimento, oltre a ID, Nome e

Cognome del rispettivo capo per gli impiegati (non capi) che hanno una

retribuzione superiore a 40000 euro.

Per collegare un impiegato con i dati del rispettivo capo:

1. T1 = Impiegati JOIN Dipartimenti con Dipartimento = Codice

2. T2 = T1 JOIN Impiegati_1 con T1.Manager = Impiegati_1.ID

3. … questa è materia per sole selezioni e proiezioni …

Impiegati ( ID, Nome, Cognome, Residenza, Stipendio, Dipartimento )

Dipartimenti ( Codice, Descrizione, Sede, Manager )

Page 42: Corso di Informatica - UniBG · 2019-04-29 · Corso di Informatica –Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi –Università di Bergamo 17 SELECT come

42Corso di Informatica – Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi – Università di Bergamo

Esempi (6 bis)

1. T1 = Impiegati JOIN Dipartimenti con Dipartimento = Codice

2. T2 = T1 JOIN Impiegati_1 con T1.Manager = Impiegati_1.ID

3. … questa è materia per sole selezioni e proiezioni …

SELECT I.ID,I.Nome,I.Cognome,I.Stipendio,I.Dipartimento,

M.ID,M.Nome,M.Cognome

FROM Impiegati I, Dipartimenti D, Impiegati M

WHERE I.Dipartimento = D.Codice AND D.Manager = M.ID AND

I.Stipendio > 40000;

Page 43: Corso di Informatica - UniBG · 2019-04-29 · Corso di Informatica –Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi –Università di Bergamo 17 SELECT come

43Corso di Informatica – Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi – Università di Bergamo

Esempi (6 ter)

SELECT I.ID,I.Nome,I.Cognome,I.Stipendio,I.Dipartimento,

M.ID,M.Nome,M.Cognome

FROM Impiegati I, Dipartimenti D, Impiegati M

WHERE I.Dipartimento = D.Codice AND D.Manager = M.ID AND

I.Stipendio > 40000 AND I.ID <> M.ID;

Page 44: Corso di Informatica - UniBG · 2019-04-29 · Corso di Informatica –Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi –Università di Bergamo 17 SELECT come

44Corso di Informatica – Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi – Università di Bergamo

Esempi (7)

Oggetti (ID, Descrizione, Qta, ComponenteDi)

Oggetto

Comporre

Prodotto

Componente

Da quali parti è composta una camicia?

Page 45: Corso di Informatica - UniBG · 2019-04-29 · Corso di Informatica –Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi –Università di Bergamo 17 SELECT come

45Corso di Informatica – Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi – Università di Bergamo

• Non c’è una operazione di self join esplicita ma spesso, per esempio con le

tabelle derivate da associazioni ricorsive, serve congiungere una tabella con

se stessa, come succede per elencare le componenti di una camicia.

SELECT Parti.Descrizione AS Componente, Parti.Qta,

Composto.Descrizione AS Prodotto

FROM Oggetti AS Parti INNER JOIN Oggetti AS Composto ON

Parti.ComponenteDi = Composto.ID

WHERE Composto.Descrizione ='Camicia';

Oggetti (ID, Descrizione, Qta, ComponenteDi)

Esempi (7 bis)

Page 46: Corso di Informatica - UniBG · 2019-04-29 · Corso di Informatica –Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi –Università di Bergamo 17 SELECT come

46Corso di Informatica – Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi – Università di Bergamo

Esercizi (1)

Anagrafiche (KCodice, Nome, Indirizzo)

Movimenti (KNumero, Descrizione, Data, Importo, Codice)

Scrivere il comando SQL per ricavare le seguenti informazioni:

• Elenco delle anagrafiche con Indirizzo = ‘Milano’ (o scelto parametricamente)

• Elenco dei codici e dei nomi di tutte le anagrafiche

• Elenco di tutti i movimenti con Data e Importo

• Elenco di tutti i movimenti con i dati anagrafici ad essi relativi

• Elenco dei movimenti con Nome e Importo riferiti alle anagrafiche aventi un indirizzo

prefissato scelto parametricamente

• Elenco dei movimenti relativi a un codice prefissato

• Elenco con nome anagrafico e numero di registrazione dei movimenti

• Data dei movimenti, codice e indirizzo per i movimenti di importo superiore a 5000

• Numero di registrazione dei movimenti riferiti all’anagrafica con nome prefissato

• Nome anagrafico, Data e Importo dei movimenti riferiti a un indirizzo prefissato

• Descrizione, Data e Importo dei movimenti eseguiti nel 2011

• Elenco dei movimenti eseguiti nel 2011 da un soggetto di cui si conosce il nome

Page 47: Corso di Informatica - UniBG · 2019-04-29 · Corso di Informatica –Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi –Università di Bergamo 17 SELECT come

47Corso di Informatica – Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi – Università di Bergamo

Esercizi (2)

Riviste ( CodRiv, Titolo, Periodicità, Prezzo )

Abbonati ( CodAbb, Cognome, Indirizzo, Città )Abbonamenti ( ID, Data, CodRiv, CodAbb )

Scrivere il comando SQL per ricavare le seguenti informazioni:

• Titolo e prezzo dell’abbonamento di tutte le riviste

• Città di residenza degli abbonati a una rivista di cui si conosce il codice

• Cognome degli abbonati che hanno sottoscritto un abbonamento a una qualsiasi

rivista, nel primo trimestre dell’anno 2011

• Cognome e codice abbonato degli abbonati alla rivista Quattroruote

• Elenco degli abbonati di Milano

• Elenco delle riviste di prezzo inferiore a 50 euro

• Elenco degli abbonati di Milano alla rivista Quattroruote

• Elenco delle riviste senza abbonati

• Elenco degli abbonati che non hanno sottoscritto abbonamenti a riviste nel corso del

secondo semestre del 2011

• Titolo e prezzo delle riviste con periodicità trimestrale

• Cognome e indirizzo degli abbonati a riviste trimestrali

Page 48: Corso di Informatica - UniBG · 2019-04-29 · Corso di Informatica –Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi –Università di Bergamo 17 SELECT come

48Corso di Informatica – Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi – Università di Bergamo

Esercizi (3)

Scrivere il comando SQL per ricavare le seguenti informazioni:

1. Cognome e Nome degli studenti di Lingue

2. Matricola e Cognome degli studenti di Ingegneria che risiedono a Milano

3. Matricola degli studenti che risiedono a Torino

4. Cognome e residenza di tutti gli studenti

5. Matricola, Cognome e Nome di tutti gli studenti con cognome Rossi

6. Matricola, Cognome e Nome degli studenti che studiano in una città diversa da

quella dove risiedono

7. Elenco delle facoltà senza iscritti

8. Elenco degli studenti per i quali non è nota la facoltà di iscrizione

Facoltà ( CodFac, NomeFacoltà, Città )

Studente ( Matricola, Cognome, Nome, Residenza, CodFac )

Page 49: Corso di Informatica - UniBG · 2019-04-29 · Corso di Informatica –Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi –Università di Bergamo 17 SELECT come

49Corso di Informatica – Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi – Università di Bergamo

Linguaggio SQL1 - Fine

Grazie per la vostra attenzione