0% ont trouvé ce document utile (0 vote)
2 vues2 pages

Tables SGBD avec intégrité référentielle

Transféré par

shiamanb.mariam
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats TXT, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
2 vues2 pages

Tables SGBD avec intégrité référentielle

Transféré par

shiamanb.mariam
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats TXT, PDF, TXT ou lisez en ligne sur Scribd

-- Création des tables avec intégrité référentielle

CREATE TABLE Departement (


DNO INT PRIMARY KEY,
DNOM VARCHAR(255),
DIR INT,
VILLE VARCHAR(255),
FOREIGN KEY (DIR) REFERENCES Employes(ENO)
);

CREATE TABLE Employes (


ENO INT PRIMARY KEY,
ENOM VARCHAR(255),
PROF VARCHAR(255),
DATEEMB DATE,
SAL DECIMAL(10, 2),
COMM DECIMAL(10, 2),
DNO INT,
FOREIGN KEY (DNO) REFERENCES Departement(DNO)
);

-- Insertion des données en exemple


INSERT INTO Departement (DNO, DNOM, DIR, VILLE) VALUES
(1, 'Commercial', 30, 'Dakar'),
(2, 'Production', -20, 'Thies'),
(3, 'Développement', 40, 'Saint Louis');

INSERT INTO Employes (ENO, ENOM, PROF, DATEEMB, SAL, COMM, DNO) VALUES
(10, 'Joseph.', 'Ingénieur', '2008-10-01', 4000.00, 3000.00, 3),
(20, 'Lamine', 'Technicien', '2008-10-01', 3000.00, 2000.00, 2),
(30, 'Salifou', 'Vendeur', '2002-05-01', 5000.00, 5000.00, 1),
(40, 'Fatou', 'Ingénieur', '2009-03-01', 5000.00, NULL, 3),
(50, 'Marième', 'Secrétaire', '2010-03-01', 7000.00, NULL, 1);

-- Exécution des requêtes demandées


-- Q1 : Donner les noms des directeurs des départements 1 et 3. Attention :
directeur n'est pas une profession!
SELECT ENOM
FROM Employes
WHERE ENO IN (SELECT DIR FROM Departement WHERE DNO IN (1, 3));

-- Q2 : Donner les noms des employés travaillant dans un département avec au moins
un ingénieur.
SELECT ENOM
FROM Employes
WHERE DNO IN (SELECT DNO FROM Employes WHERE PROF = 'Ingénieur');

-- Q3 : Donner le salaire et le nom des employés gagnant plus qu'un (au moins un)
ingénieur.
SELECT ENOM, SAL
FROM Employes
WHERE SAL > (SELECT MAX(SAL) FROM Employes WHERE PROF = 'Ingénieur');

-- Q4 : Donner le salaire et le nom des employés gagnant plus qu'un (au moins un)
ingénieur.
SELECT ENOM, SAL
FROM Employes
WHERE SAL > (SELECT MAX(SAL) FROM Employes WHERE PROF = 'Ingénieur');

-- Q5 : Donner le salaire et le nom des employés gagnant plus que tous les
ingénieurs.
SELECT ENOM, SAL
FROM Employes
WHERE SAL > ALL (SELECT SAL FROM Employes WHERE PROF = 'Ingénieur');

-- Q6 : Donner les noms des employés et les noms de leurs directeurs.


SELECT [Link] AS "Employé", [Link] AS "Département", [Link] AS "Directeur"
FROM Employes E
INNER JOIN Departement D ON [Link] = [Link]
LEFT JOIN Employes DIR ON [Link] = [Link];

-- Q7 : Trouver les noms des employés ayant le même directeur que Salifou FALL.
SELECT [Link]
FROM Employes E
INNER JOIN Departement D ON [Link] = [Link]
WHERE [Link] IN (SELECT DIR FROM Departement WHERE DNOM IN (SELECT DNOM FROM
Employes WHERE ENOM = 'Salifou'));

-- Q8 : Donner le nom et la date d'embauche des employés embauchés avant leur


directeur; donner également le nom et la date d'embauche de leur directeur.
SELECT [Link], [Link], [Link] AS "Département", [Link] AS "Directeur",
[Link] AS "Date embauche directeur"
FROM Employes E
INNER JOIN Departement D ON [Link] = [Link]
INNER JOIN Employes DIR ON [Link] = [Link]
WHERE [Link] < [Link];

-- Q9 : Donner les départements qui n'ont pas d'employés.


SELECT DNOM
FROM Departement
WHERE DNO NOT IN (SELECT DISTINCT DNO FROM Employes);

-- Q10 : Donner les noms des employés du département COMMERCIAL embauchés le même
jour qu'un employé du département PRODUCTION.
SELECT [Link]
FROM Employes E1, Employes E2
WHERE [Link] = (SELECT DNO FROM Departement WHERE DNOM = 'Commercial')
AND [Link] = (SELECT DNO FROM Departement WHERE DNOM = 'Production')
AND [Link] = [Link];

Vous aimerez peut-être aussi