Si consideri il seguente schema di base di dati relativa ad una azienda che effettua revisioni periodiche di caldaie:
Creare la tabella REVISIONE specificando gli opportuni vincoli di integrità e le opzioni per gestire l’integrit referenziale
CREATE TABLE REVISIONE(
CodM VARCHAR(8) REFERENCES MANUTENTORE(CodM)
ON UPDATE CASCADE
ON DELETE RESTRICT,
MatricolaC VARCHAR(8) REFERENCES CALDAIA(Matricola)
ON UPDATE CASCADE
ON DELETE RESTRICT,
Data DATE,
Esito CHAR,
PRIMARY KEY (CodM, MatricolaC, Data)
);
se viene modificata la matricola di una caldaia nella tabella CALDAIA o il codice di un manutentore nella tabella MANUTENTORE, tale modifica si propaga alla tabella REVISIONE. Per la clausola ON DELETE vale per entrambe le FK l’opzione di default, ovvero non viene permesso di cancellare le informazioni su un manutentore o su una caldaia se ci sono revisioni associate
Aggiungere alla tabella CALDAIA un attributo Azienda che indica il nome della azienda che produce la caldaia
ALTER TABLE CALDAIA ADD COLUMN Azienda VARCHAR(20);
Codice, nome e cognome dei manutentori che hanno revisionato soltanto caldaie con alimentazione a metano (attributo Alimentazione)
SELECT CodM, Nome, Cognome
FROM MANUTENTORE NATURAL JOIN REFVISIONE NATURAL JOIN CALDAIA
WHERE Alimentazione = 'Metano'
MINUS
SELECT CodM, Nome, Cognome
FROM MANUTENTORE NATURAL JOIN REVISIONE NATURAL JOIN CALDAIA
WHERE Alimentazione <> 'Metano';
Nome, cognome e numero totale di revisioni eseguite, per i manutentori che hanno eseguito un numero totale di revisioni maggiore di 500
SELECT Nome, Cognome, COUNT(*)
FROM MANUTENTORE NATURAL JOIN REVISIONE
GROUP BY CodM, Nome, Cognome
HAVING COUNT(*) > 500
Le caldaie fabbricate tra il 2015 e il 2016 che sono state revisionate sia da manutentori con cognome Gialli che Rossi ma non da manutentori con cognome Bianchi
SELECT Matricola
FROM CALDAIA NATURAL JOIN REVISIONE NATURAL JOIN MANUTENTORE
WHERE AnnoFabbricazione BETWEEN 2015 AND 2016
AND Cognome = 'Gialli'
INTERSECT
SELECT Matricola
FROM CALDAIA NATURAL JOIN REVISIONE NATURAL JOIN MANUTENTORE
WHERE AnnoFabbricazione BETWEEN 2015 AND 2016
AND Cognome = 'Rossi'
MINUS
SELECT Matricola
FROM CALDAIA NATURAL JOIN REVISIONE NATURAL JOIN MANUTENTORE
WHERE AnnoFabbricazione BETWEEN 2015 AND 2016
AND Cognome = 'Bianchi'
La matricola e il modello delle caldaie con alimentazione a gasolio che hanno avuto almeno una revisione negativa tra il 1 gennaio 2014 e il 31 gennaio 2016
SELECT Matricola, Modello
FROM CALDAIA NATURAL JOIN REVISIONE
WHERE Esito = 'N' AND Data >= '1/1/2014' DATE
AND Data <= '31/1/2016' DATE;