Vous êtes sur la page 1sur 3

TD: 08

Partie A :
Table Visites:

 Ajouter les colonnes manquantes :

o n_conducteur VARCHAR(4) : Numéro de l'employé conducteur

o date_jour DATE : Date de la visite

o kilometres NUMBER : Kilométrage parcouru lors de la visite

 Définir les clés étrangères :

o CONSTRAINT fk_depl_chantier FOREIGN KEY(n_chantier) REFERENCES


Chantiers(n_chantier)

o CONSTRAINT fk_depl_vehicule FOREIGN KEY(n_vehicule) REFERENCES


Vehicules(n_vehicule)

o CONSTRAINT fk_depl_employe FOREIGN KEY(n_conducteur) REFERENCES


Employes(n_emp)

 Clé primaire : CONSTRAINT pk_visite PRIMARY KEY(n_chantier, n_vehicule, date_jour)

Table Transporter:

 Ajouter les colonnes :

o n_visite VARCHAR(10) : Numéro de la visite

o n_transporte VARCHAR(4) : Numéro de l'employé transporté

 Définir les clés étrangères :

o CONSTRAINT fk_transp_visite FOREIGN KEY(n_visite) REFERENCES Visites(n_chantier,


n_vehicule, date_jour)

o CONSTRAINT fk_transp_employe FOREIGN KEY(n_transporte) REFERENCES


Employes(n_emp)

 Clé primaire : CONSTRAINT pk_transporter PRIMARY KEY(n_visite, n_transporte)

Partie B
1. Conducteurs sur la route le 1/4/2008:

SELECT E.n_emp, E.nom_emp


FROM Visites V

INNER JOIN Employes E ON E.n_emp = V.n_conducteur

WHERE V.date_jour = '2008-04-01';

2. Passagers ayant visité un chantier le 1/4/2008:

SELECT E.n_emp, E.nom_emp

FROM Transporter T

INNER JOIN Employes E ON E.n_emp = T.n_transporte

INNER JOIN Visites V ON V.n_chantier = T.n_visite AND V.n_vehicule = T.n_visite

WHERE V.date_jour = '2008-04-01';

3. Employés n'ayant pas bougé le 1/4/2008:

SELECT E.n_emp, E.nom_emp

FROM Employes E

WHERE E.n_emp NOT IN (

SELECT V.n_conducteur FROM Visites V WHERE V.date_jour = '2008-04-01'

UNION

SELECT T.n_transporte FROM Transporter T

INNER JOIN Visites V ON V.n_chantier = T.n_visite AND V.n_vehicule = T.n_visite

WHERE V.date_jour = '2008-04-01'

);

4. Chantiers visités entre le 2 et le 3 du mois et nombre de visites:

SELECT C.n_chantier, C.nom_ch, COUNT(*) AS NbVisites

FROM Visites V

INNER JOIN Chantiers C ON C.n_chantier = V.n_chantier

WHERE V.date_jour BETWEEN '20XX-MM-02' AND '20XX-MM-03'

GROUP BY C.n_chantier, C.nom_ch

ORDER BY NbVisites DESC;


5. Chantiers les plus visités:

SELECT C.n_chantier, C.nom_ch, NbVisites

FROM (

SELECT C.n_chantier, C.nom_ch, COUNT(*) AS NbVisites

FROM Visites V

INNER JOIN Chantiers C ON C.n_chantier = V.n_chantier

WHERE V.date_jour BETWEEN '20XX-MM-02' AND '20XX-MM-03'

GROUP BY C.n_chantier, C.nom_ch

) AS T

WHERE NbVisites = (SELECT MAX(NbVisites) FROM T);

6. Nombre de visites des employés (conducteur et passager) pour un mois donné:

SELECT E.n

Vous aimerez peut-être aussi