Vous êtes sur la page 1sur 18

Compte rendu du TP N1 INF2108

Exercice 1 : Pizzeria


1) Récupérons le fichier envoyer par l’enseignant et exécutons-le.
2) Rédigeons les requêtes suivantes en SQL :
a. Trouvons toutes les pizzerias fréquentées par au moins une personne de moins de 18
ans.
SELECT DISTINCT pizzeria FROM "client" AS cl, "frequente" AS fr WHERE
cl.age<18 AND fr.nom=fr.nom;

b. Trouver les noms des clientes qui mangent soit la « mexicaine », soit
la « végétarienne », soit les deux à la fois.

SELECT c.nom FROM "client" AS c, "mange" AS m WHERE (m.pizza='mexicaine'


OR m.pizza='végétarienne')
AND c.genre='femme' AND c.nom=m.nom;
c. Trouver les noms des clientes qui mangent à la fois la « mexicaine »
et la « végétarienne ».

SELECT DISTINCT c.nom FROM "client" AS c, "mange" AS m WHERE


m.pizza='mexicaine' AND c.nom IN (
SELECT c.nom FROM "client" AS c, "mange" AS m WHERE m.
pizza='végétarienne' AND c.genre='femme' AND c.nom=m.nom);

d. Trouver toutes les pizzerias qui servent au moins une pizza que
Moussa mange pour moins de 5000 F.

SELECT DISTINCT s.pizzeria FROM "sert" AS s , "mange" AS m WHERE


m.nom='Moussa'AND s.pizza=m.pizza AND s.prix <5000;
e. Lister toutes les pizzerias qui sont fréquentées par soit uniquement
des femmes, soit uniquement des hommes.

SELECT DISTINCT f.pizzeria FROM "frequente" AS f WHERE f.pizzeria NOT IN (


SELECT f.pizzeria FROM "frequente" AS f , "client" AS c
WHERE c.genre='femme' AND c.nom=f.nom
INTERSECT SELECT f.pizzeria FROM "frequente" AS f , "client" AS c
WHERE c.genre='homme' AND c.nom=f.nom
)
f. Pour chaque client, lister toutes les pizzas que la personne mange qui
ne sont servies par aucune pizzeria que la personne fréquente. Le
résultat doit être des couples (nom client, pizza).

SELECT DISTINCT f.nom, m.pizza FROM frequente AS f, mange AS m, sert AS s


WHERE f.nom=m.nom AND f.pizzeria = s.pizzeria AND s.pizza <> m.pizza;

g. Trouver les noms des clients qui fréquentent uniquement des pizzerias
qui servent au moins une pizza qu’ils mangent.

SELECT DISTINCT f.nom, m.pizza FROM frequente AS f, mange AS m, sert AS s


WHERE f.nom=m.nom AND f.pizzeria = s.pizzeria AND s.pizza = m.pizza;
h. Trouver les noms des clients qui fréquentent toutes les pizzerias qui
servent au moins une pizza qu’ils mangent.

SELECT DISTINCT f.nom, m.pizza FROM frequente AS f, mange AS m, sert AS s


WHERE f.nom=m.nom
AND f.pizzeria = s.pizzeria
AND s.pizza = m.pizza;
i. Lister la pizzeria servant la pizza « fromage » la moins chère. Au cas
où il en aurait plusieurs, renvoyez toutes les pizzerias concernées.

SELECT pizzeria FROM "sert" WHERE prix = (


SELECT MIN(prix) AS p FROM "sert" AS s
WHERE pizza='fromage')

Exercice 2 : Entreprise


1- Récupérons le fichier « entreprise.sql » envoyé par l’enseignant et
exécutez-le .
2- Rédigez les requêtes suivantes en sql
a. Lister les noms de tous les employés du département 5 qui travaillent plus de 40
heures sur le projet 'EDM'.
SELECT e.nom FROM employe AS e
WHERE e.numdept=5 AND e.nmle IN (
SELECT nmle FROM travaille_sur AS ts,projet AS p
WHERE ts.nbheures>40
AND ts.nump= p.nump
AND p.nomp='EDM');

b. Dressez la liste des noms de tous les employés qui ont une personne
à charge avec le même prénom qu’eux-mêmes.

SELECT e.nom FROM employe AS e, personne_a_charge AS pac


WHERE e.nmle=pac.nmle AND e.prenom=pac.prenom;

c. Trouver les noms de tous les employés qui sont directement


supervisés par 'Marie Camara'.

SELECT e.nom FROM employe AS e


WHERE e.nmlesuperviseur IN
(SELECT e.nmle FROM employe AS e WHERE e.prenom='Marie'
AND e.nom='CAMARA');
d. Pour chaque projet, lister le nom du projet et le nombre d'heures total
(effectué par tous les employés) sur ce projet.

SELECT p.nomp, SUM(nbheures) AS nbheures FROM projet AS p, travaille_sur


AS ts
WHERE p.nump=ts.nump GROUP BY p.nump;

e. Retrouver les noms de tous les employés qui travaillent sur chaque
projet.

SELECT e.nom, e.prenom, p.nomp FROM travaille_sur AS ts, employe AS e,


projet AS p
WHERE e.nmle=ts.nmle
AND ts.nump=p.nump;
f. Retrouver les noms de tous les employés qui ne travaillent pas sur un
projet.

SELECT e.nom, e.prenom FROM employe AS e WHERE e.nmle NOT IN (


SELECT e.nmle FROM travaille_sur AS ts, employe AS e
WHERE e.nmle = ts.nmle);
g. Récupérer le salaire moyen de tous les employés de sexe féminin.

SELECT AVG(e.salaire) FROM employe AS e WHERE e.sexe='femme';

h. Trouver les noms et adresses de tous les employés qui travaillent sur
au moins un projet situé à Ségou, mais dont le département n'a pas
de représentation à Ségou.

select DISTINCT e.nom,e.adresse from employe as e,


representations_dept as rep,projet as p
where rep.ville='Ségou' and e.nmle IN (SELECT e.nmle
FROM travaille_sur AS ts, employe AS e
WHERE e.nmle = ts.nmle) AND rep.numdept
not in (select rep.numdept from representations_dept where
rep.ville='Ségou');

i. Dressez la liste des noms de famille de tous les chefs de département


qui n’ont aucune personne à charge.

SELECT DISTINCT e.nom, e.prenom FROM employe AS e, departement AS d


WHERE e.nmle=d.nmlechef AND e.nmle IN
(SELECT nmlechef FROM departement AS d, personne_a_charge AS pac
WHERE d.nmlechef<>
pac.nmle)

Exercice3
1. Créer une base de données et nommez-la gestion_personnel.

CREATE database gestion_personnel ;


/* Suppression des tables si elles existent */
drop table if exists Employe;
drop table if exists Departement;
drop table if exists Representations_Dept;
drop table if exists Travaille_Sur;
drop table if exists Projet;
drop table if exists Personne_A_Charge;

/* Création des schémas des tables */


create table Employe(nom_personne varchar(20) primary key, rue text, ville
text);
create table Travaille(nom_personne varchar(20), nom_entreprise varchar(20),
salaire integer);
create table Entreprise(nom_entreprise varchar(20),ville text);
create table Supervise(nom_personne varchar(20), nom_superviseur
varchar(20));

2. Récupérer les données du fichier « gestion_personnel.sql » pour peuplez votre


base de données.

3. Formulez en SQL les requêtes suivantes :


a) Trouvez les noms de tous les employés qui travaillent pour « Eco-
Bank ».

SELECT ts.nom_personne FROM travaille AS ts WHERE


ts.nom_entreprise='EcoBank'

b) Trouvez les noms et les villes de résidence de tous les employés qui
travaillent pour « EcoBank ».
SELECT e.ville,ts.nom_personne FROM travaille AS ts,employe AS e WHERE
ts.nom_entreprise='EcoBank' AND ts.nom_personne=e.nom_personne

c) Trouvez les noms, adresses et villes de résidence de tous les employés qui travailler
pour « EcoBank » et gagnent plus de 10 000 000 FCFA
par an.

SELECT e.nom_personne, e.rue,e.ville FROM travaille AS ts,employe AS e


WHERE (ts.nom_entreprise='EcoBank' AND (ts.salaire*12) >10000000) AND
ts.nom_personne=e.nom_personne

d) Trouvez les noms de tous les employés de cette base de données qui
vivent dans la même ville que l'entreprise pour laquelle ils travaillent.

SELECT DISTINCT e.nom_personne FROM employe AS e,entreprise AS ent


WHERE ent.ville=e.ville
e) Trouver les noms de tous les employés qui habitent dans la même
ville et dans la même que leurs gérants.

f) Trouvez les noms de tous les employés de cette base de données qui
ne travaillent pas « EcoBank ».

SELECT ts.nom_personne FROM travaille AS ts WHERE ts.nom_entreprise !


='EcoBank'

g) Trouvez les noms de tous les employés qui gagnent plus que tous les
employés de la caisse d’épargne « Kafo Jiginew ».

SELECT ts.nom_personne FROM travaille AS ts WHERE (ts.salaire>(select


Max(ts.salaire) FROM travaille AS ts where ts.nom_entreprise='Kafo Jiginew'))
h) Supposons que les entreprises soient situées dans plusieurs villes.
Trouver toutes les entreprises situées dans chaque ville dans laquelle la
caisse d’épargne « Kafo Jiginew » est située.

SELECT ent.nom_entreprise FROM entreprise AS ent WHERE ent.ville IN


(SELECT ent.ville FROM entreprise AS ent WHERE ent.nom_entreprise='Kafo
Jiginew')

i) Trouvez l'entreprise avec le plus grand nombre d'employés.

SELECT count(*), ts.nom_entreprise FROM travaille AS ts GROUP BY


ts.nom_entreprise
Le plus grand nombre d’employés est dans les entreprises Bank of Africa et
Ecobank.
j) Trouvez l'entreprise avec la plus petite masse salariale.

SELECT ts.nom_entreprise FROM travaille AS ts WHERE (ts.salaire <= (select


Min(ts.salaire) FROM travaille AS ts))

k) Trouvez les entreprises dont les employés gagnent un salaire plus élevé, en moyenne,
que le salaire moyen chez « Eco-Bank ».

SELECT DISTINCT ts.nom_entreprise FROM travaille AS ts WHERE (ts.salaire


>(select AVG(ts.salaire) FROM travaille AS ts where
ts.nom_entreprise='EcoBank'))

Vous aimerez peut-être aussi