Vous êtes sur la page 1sur 4

-- Créer la table Voyage

CREATE TABLE Voyage (

numV Numeric(10) PRIMARY KEY CHECK (numV > 100),

villeDesV Varchar(20) NOT NULL,

dateDepV Date NOT NULL,

dateArrV Date NOT NULL,

tarifV Numeric(10, 2) DEFAULT 0

);

-- Créer la table Voyageur

CREATE TABLE Voyageur (

numPassV Numeric(11) PRIMARY KEY,

nomV Varchar(20) NOT NULL,

PrenomV Varchar(20) NOT NULL,

adrV Varchar(50),

dateNaisV Date

);

-- Créer la table Reservation

CREATE TABLE Reservation (

numV Numeric(10) PRIMARY KEY,

numPassV Numeric(11) PRIMARY KEY,

confirmation Numeric(1) NOT NULL

);

-- Insérer des données dans les tables

INSERT INTO Voyageur VALUES (110045, 'Tounsi', 'Kamel', 'Sfax', '1985-12-11');

INSERT INTO Voyageur VALUES (123457, 'Ben Salah', 'Sana', 'Tunis', '1987-07-23');

-- Ajoutez les autres lignes pour Voyageur

INSERT INTO Voyage VALUES (1001, 'Tripoli', '2020-02-13', '2020-02-13', 300);


INSERT INTO Voyage VALUES (1002, 'Beyrout', '2021-03-25', '2021-03-25', 600);

-- Ajoutez les autres lignes pour Voyage

INSERT INTO Reservation VALUES (1001, 110045, 1);

INSERT INTO Reservation VALUES (1001, 123457, 1);

-- Ajoutez les autres lignes pour Reservation

-- Requêtes demandées

-- 1) Modifier l'adresse de voyageur "Yahya Mouna" à "Tunis".

UPDATE Voyageur SET adrV = 'Tunis' WHERE nomV = 'Yahya' AND PrenomV = 'Mouna';

-- 2) Modifier la date de départ et d'arrivée du voyage 1002.

UPDATE Voyage SET dateDepV = '2021-03-29', dateArrV = '2021-03-29' WHERE numV = 1002;

-- 3) Supprimer les réservations non confirmées.

DELETE FROM Reservation WHERE confirmation = 0;

-- 4) Supprimer le voyageur dont son numéro de passeport est 200087.

DELETE FROM Voyageur WHERE numPassV = 200087;

-- 5) Afficher la liste de voyageurs dont le nom commence par "Y".

SELECT * FROM Voyageur WHERE nomV LIKE 'Y%';

-- 6) Afficher le prénom, nom et la date de naissance de tous les voyageurs.

SELECT PrenomV, nomV, dateNaisV FROM Voyageur;

-- 7) Afficher les noms, prénom et adresses des voyageurs qui sont originaires de (Tunis, Sfax,
Sousse), trier la liste par ordre croissant de numéro passeport.

SELECT nomV, PrenomV, adrV FROM Voyageur WHERE adrV IN ('Tunis', 'Sfax', 'Sousse') ORDER BY
numPassV ASC;
-- 8) Afficher la liste des voyageurs dont l'âge >25, trier la liste par ordre décroissant de date de
naissance.

SELECT * FROM Voyageur WHERE EXTRACT(YEAR FROM age(current_date, dateNaisV)) > 25 ORDER
BY dateNaisV DESC;

-- 9) Afficher la liste des voyageurs qui ont réservé pour un voyage à la ville de "Caire".

SELECT v.* FROM Voyageur v

JOIN Reservation r ON v.numPassV = r.numPassV

JOIN Voyage vv ON r.numV = vv.numV

WHERE vv.villeDesV = 'Caire';

-- 10) Afficher la liste de voyageurs qui ont confirmé leur voyage à "Beyrout".

SELECT v.* FROM Voyageur v

JOIN Reservation r ON v.numPassV = r.numPassV

JOIN Voyage vv ON r.numV = vv.numV

WHERE vv.villeDesV = 'Beyrout' AND r.confirmation = 1;

-- 11) Afficher la liste de voyageurs qui ont confirmé leur voyage à "Beyrout" et qui sont originaires de
"Sfax".

SELECT v.* FROM Voyageur v

JOIN Reservation r ON v.numPassV = r.numPassV

JOIN Voyage vv ON r.numV = vv.numV

WHERE vv.villeDesV = 'Beyrout' AND r.confirmation = 1 AND v.adrV = 'Sfax';

-- 12) Afficher la liste de voyageurs qui ont confirmé leurs voyages.

SELECT v.* FROM Voyageur v

JOIN Reservation r ON v.numPassV = r.numPassV

WHERE r.confirmation = 1;

-- 13) Afficher la date de naissance du plus vieux voyageur et celle du plus jeune.

SELECT MIN(dateNaisV) AS PlusJeune, MAX(dateNaisV) AS PlusVieux FROM Voyageur;


-- 14) Afficher le nombre des voyageurs qui ont réservé pour le voyage de "Caire".

SELECT COUNT(*) AS NombreVoyageurs FROM Reservation r

JOIN Voyage v ON r.numV = v.numV

WHERE v.villeDesV = 'Caire';

-- 15) Afficher la somme des tarifs ainsi que le nombre de voyageurs qui ont confirmé leur voyage
dont le numéro est 1001.

SELECT SUM(v.tarifV) AS SommeTarifs, COUNT(r.numPassV) AS NombreVoyageurs FROM Reservation


r

JOIN Voyage v ON r.numV = v.numV

WHERE r.confirmation = 1 AND v.numV = 1001;

-- 16) Afficher la liste des voyageurs dont l'âge est inférieur à celui du voyageur dont le numéro de
passeport est "213456".

SELECT * FROM Voyageur

WHERE EXTRACT(YEAR FROM age((SELECT dateNaisV FROM Voyageur WHERE numPassV = 213456),
dateNaisV)) > 0;

-- 17) Afficher les noms et les prénoms des voyageurs ayant la même adresse du voyageur dont le
nom est "Benzarti".

SELECT nomV, PrenomV FROM Voyageur

WHERE adrV = (SELECT adrV FROM Voyageur WHERE nomV = 'Benzarti');

Vous aimerez peut-être aussi