Esercizio 1

Clienti(IDCliente, Cognome, Nome, Telefono Indirizzo, Città, Nazione) Destinazione(IDDestinaz, Denominazione, Moneta, Clima, Vaccinazioni) Pacchetti(IDPacchetto, Descrizione, Modalità, Durata_giorni, Prezzo, CodDestinaz(Destinazioni)) Acquisti(IDAcquisto, Data, CodPacchetto(Pacchetti), CodCliente(Clienti)

  1. Creare la vista che contiene l’identifiatore e la denomincazione delle destinazioni per cui è obbligatorio la vaccinazione antitifo

    CREATE VIEW vista1 AS(
    	SELECT IDDestinaz, Denominazione FROM Destinazinoe
    	WHERE Vaccinazioni LIKE '%antitifo%'
    );
    
  2. Aumentare del 10% il prezzo dei pacchetti con destinazione aventi come moneta il dollaro statunitense (USD)

    UPDATE Pacchetti SET Prezzo = Prezzo * 1.1
    WHERE CodDestinaz IN(
    	SELECT IDDestinaz FROM Destinazione WHERE Moneta = 'USD'
    );
    
  3. Aggiungere alla tabella Clienti l’attributo obbligatorio email.

    ALTER TABLE Clienti ADD COLUMN Email VARCHAR(40) NOT NULL;
    

Esercizio 2

  1. L’id dei clienti che hanno acquistato tutti i pacchetti offerti dall’agenzia di viaggio

    SELECT CodCliente FROM Acquisti
    GROUP BY IDCliente 
    HAVING COUNT(DISTINCT CodPacchetto) = (
    	SELECT COUNT(*) FROM Pacchetti	
    );
    
  2. L’id del pacchetto con prezzo massimo

    SELECT IDPacchetto FROM Pacchetti
    WHERE Prezzo >= ALL(SELECT Prezzo FROM Pacchetti)
    
  3. Per le persone che hanno acquistato almeno 4 pacchetti nel 2015, il loro nome e cognome ed il numero complessivo di pacchetti acquistati

    SELECT Nome, Cognome, COUNT(CodPacchetto)
    FROM CLIENTI JOIN Acquisti ON (IDCliente = CodCliente)
    WHERE IDCliente IN(
    	SELECT CodCliente FROM Acquisti
    	WHERE EXTRACT(YEAR FROM Data) = 2015
    	GROUP BY CodCliente
    	HAVING COUNT(CodPacchetto) >= 4
    )
    GROUP BY CodCliente, Nome, Cognome
    
  4. La denominazione delle destinazioni che sono comprese in pacchetti con modalità treno o nave ma non aereo

    SELECT Denominazione FROM Destinazioni 
    WHERE IDDestinaz IN 
    	(SELECT CodDestinaz FROM Pacchetti WHERE Modalità = 'Treno')
    UNION 
    SELECT Denominazione FROM Destinazioni 
    WHERE IDDestinaz IN 
    	(SELECT CodDestinaz FROM Pacchetti WHERE Modalità = 'Nave')
    EXCEPT
    SELECT Denominazione FROM Destinazioni 
    WHERE IDDestinaz IN 
    	(SELECT CodDestinaz FROM Pacchetti WHERE Modalità = 'Aereo')
    
  5. Il nome, cognome e telefono dei clienti che non hanno mai acquistato pacchetti di durata maggiore di 3 giorni

    SELECT Nome, Cognome, Telefono 
    FROM Clienti WHERE IDCliente NOT IN(
    	SELECT IDCliente 
    	FROM Acquisti JOIN Pacchetti ON (CodPacchetto = IDPacchetto)
    	WHERE Durata_giorni > 3
    );