corso di informatica - unibg · 2019-04-29 · corso di informatica –dipartimento di scienze...
TRANSCRIPT
![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](https://reader030.vdocuments.pub/reader030/viewer/2022033122/5e31d42bd7086d2972057b92/html5/thumbnails/1.jpg)
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](https://reader030.vdocuments.pub/reader030/viewer/2022033122/5e31d42bd7086d2972057b92/html5/thumbnails/2.jpg)
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](https://reader030.vdocuments.pub/reader030/viewer/2022033122/5e31d42bd7086d2972057b92/html5/thumbnails/3.jpg)
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](https://reader030.vdocuments.pub/reader030/viewer/2022033122/5e31d42bd7086d2972057b92/html5/thumbnails/4.jpg)
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](https://reader030.vdocuments.pub/reader030/viewer/2022033122/5e31d42bd7086d2972057b92/html5/thumbnails/5.jpg)
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](https://reader030.vdocuments.pub/reader030/viewer/2022033122/5e31d42bd7086d2972057b92/html5/thumbnails/6.jpg)
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](https://reader030.vdocuments.pub/reader030/viewer/2022033122/5e31d42bd7086d2972057b92/html5/thumbnails/7.jpg)
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](https://reader030.vdocuments.pub/reader030/viewer/2022033122/5e31d42bd7086d2972057b92/html5/thumbnails/8.jpg)
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](https://reader030.vdocuments.pub/reader030/viewer/2022033122/5e31d42bd7086d2972057b92/html5/thumbnails/9.jpg)
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](https://reader030.vdocuments.pub/reader030/viewer/2022033122/5e31d42bd7086d2972057b92/html5/thumbnails/10.jpg)
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](https://reader030.vdocuments.pub/reader030/viewer/2022033122/5e31d42bd7086d2972057b92/html5/thumbnails/11.jpg)
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](https://reader030.vdocuments.pub/reader030/viewer/2022033122/5e31d42bd7086d2972057b92/html5/thumbnails/12.jpg)
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](https://reader030.vdocuments.pub/reader030/viewer/2022033122/5e31d42bd7086d2972057b92/html5/thumbnails/13.jpg)
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](https://reader030.vdocuments.pub/reader030/viewer/2022033122/5e31d42bd7086d2972057b92/html5/thumbnails/14.jpg)
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](https://reader030.vdocuments.pub/reader030/viewer/2022033122/5e31d42bd7086d2972057b92/html5/thumbnails/15.jpg)
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](https://reader030.vdocuments.pub/reader030/viewer/2022033122/5e31d42bd7086d2972057b92/html5/thumbnails/16.jpg)
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](https://reader030.vdocuments.pub/reader030/viewer/2022033122/5e31d42bd7086d2972057b92/html5/thumbnails/17.jpg)
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](https://reader030.vdocuments.pub/reader030/viewer/2022033122/5e31d42bd7086d2972057b92/html5/thumbnails/18.jpg)
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](https://reader030.vdocuments.pub/reader030/viewer/2022033122/5e31d42bd7086d2972057b92/html5/thumbnails/19.jpg)
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](https://reader030.vdocuments.pub/reader030/viewer/2022033122/5e31d42bd7086d2972057b92/html5/thumbnails/20.jpg)
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](https://reader030.vdocuments.pub/reader030/viewer/2022033122/5e31d42bd7086d2972057b92/html5/thumbnails/21.jpg)
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](https://reader030.vdocuments.pub/reader030/viewer/2022033122/5e31d42bd7086d2972057b92/html5/thumbnails/22.jpg)
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](https://reader030.vdocuments.pub/reader030/viewer/2022033122/5e31d42bd7086d2972057b92/html5/thumbnails/23.jpg)
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](https://reader030.vdocuments.pub/reader030/viewer/2022033122/5e31d42bd7086d2972057b92/html5/thumbnails/24.jpg)
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](https://reader030.vdocuments.pub/reader030/viewer/2022033122/5e31d42bd7086d2972057b92/html5/thumbnails/25.jpg)
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](https://reader030.vdocuments.pub/reader030/viewer/2022033122/5e31d42bd7086d2972057b92/html5/thumbnails/26.jpg)
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](https://reader030.vdocuments.pub/reader030/viewer/2022033122/5e31d42bd7086d2972057b92/html5/thumbnails/27.jpg)
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](https://reader030.vdocuments.pub/reader030/viewer/2022033122/5e31d42bd7086d2972057b92/html5/thumbnails/28.jpg)
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](https://reader030.vdocuments.pub/reader030/viewer/2022033122/5e31d42bd7086d2972057b92/html5/thumbnails/29.jpg)
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](https://reader030.vdocuments.pub/reader030/viewer/2022033122/5e31d42bd7086d2972057b92/html5/thumbnails/30.jpg)
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](https://reader030.vdocuments.pub/reader030/viewer/2022033122/5e31d42bd7086d2972057b92/html5/thumbnails/31.jpg)
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](https://reader030.vdocuments.pub/reader030/viewer/2022033122/5e31d42bd7086d2972057b92/html5/thumbnails/32.jpg)
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](https://reader030.vdocuments.pub/reader030/viewer/2022033122/5e31d42bd7086d2972057b92/html5/thumbnails/33.jpg)
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](https://reader030.vdocuments.pub/reader030/viewer/2022033122/5e31d42bd7086d2972057b92/html5/thumbnails/34.jpg)
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](https://reader030.vdocuments.pub/reader030/viewer/2022033122/5e31d42bd7086d2972057b92/html5/thumbnails/35.jpg)
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](https://reader030.vdocuments.pub/reader030/viewer/2022033122/5e31d42bd7086d2972057b92/html5/thumbnails/36.jpg)
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](https://reader030.vdocuments.pub/reader030/viewer/2022033122/5e31d42bd7086d2972057b92/html5/thumbnails/37.jpg)
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](https://reader030.vdocuments.pub/reader030/viewer/2022033122/5e31d42bd7086d2972057b92/html5/thumbnails/38.jpg)
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](https://reader030.vdocuments.pub/reader030/viewer/2022033122/5e31d42bd7086d2972057b92/html5/thumbnails/39.jpg)
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](https://reader030.vdocuments.pub/reader030/viewer/2022033122/5e31d42bd7086d2972057b92/html5/thumbnails/40.jpg)
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](https://reader030.vdocuments.pub/reader030/viewer/2022033122/5e31d42bd7086d2972057b92/html5/thumbnails/41.jpg)
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](https://reader030.vdocuments.pub/reader030/viewer/2022033122/5e31d42bd7086d2972057b92/html5/thumbnails/42.jpg)
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](https://reader030.vdocuments.pub/reader030/viewer/2022033122/5e31d42bd7086d2972057b92/html5/thumbnails/43.jpg)
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](https://reader030.vdocuments.pub/reader030/viewer/2022033122/5e31d42bd7086d2972057b92/html5/thumbnails/44.jpg)
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](https://reader030.vdocuments.pub/reader030/viewer/2022033122/5e31d42bd7086d2972057b92/html5/thumbnails/45.jpg)
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](https://reader030.vdocuments.pub/reader030/viewer/2022033122/5e31d42bd7086d2972057b92/html5/thumbnails/46.jpg)
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](https://reader030.vdocuments.pub/reader030/viewer/2022033122/5e31d42bd7086d2972057b92/html5/thumbnails/47.jpg)
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](https://reader030.vdocuments.pub/reader030/viewer/2022033122/5e31d42bd7086d2972057b92/html5/thumbnails/48.jpg)
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](https://reader030.vdocuments.pub/reader030/viewer/2022033122/5e31d42bd7086d2972057b92/html5/thumbnails/49.jpg)
49Corso di Informatica – Dipartimento di Scienze Aziendali, Economiche e Metodi quantitativi – Università di Bergamo
Linguaggio SQL1 - Fine
Grazie per la vostra attenzione