Vous êtes sur la page 1sur 3

CREATE TABLE Club(

numClub NUMBER(8) CONSTRAINT PK_Club PRIMARY KEY,


nomClub VARCHAR2(70),
adresse VARCHAr2(70));

CREATE TABLE Adherent(


numAdherent NUMBER(8) CONSTRAINT PK_Adherent PRIMARY KEY,
nomAdh VARCHAR2(70),
genreAdh CHAR CONSTRAINT CHK_genreAdh CHECK(genreAdh IN('F','M')),
datNaiss DATE,
numClub NUMBER(8),
CONSTRAINT FK_Adherent_Club FOREIGN KEY(numClub) REFERENCES Club(numClub));

CREATE TABLE Course(


numCourse NUMBER(8) CONSTRAINT PK_Course PRIMARY KEY,
dateCourse DATE,
lieu VARCHAR2(70),
numClub NUMBER(8),
CONSTRAINT FK_Course_Club FOREIGN KEY(numClub) REFERENCES Club(numClub));

CREATE TABLE Inscription(


numCourse NUMBER(8) ,
numParticipant NUMBER(8),
datInscri DATE,
coutInscri NUMBER,
CONSTRAINT PK_Inscription PRIMARY KEY(numCourse,numParticipant,datInscri),
CONSTRAINT FK_Inscrip_Course FOREIGN KEY(numCourse) REFERENCES Course(numCourse),
CONSTRAINT FK_Inscrip_Adherent FOREIGN KEY(numParticipant) REFERENCES
aDHERENT(numAdherent));

INSERT INTO Club VALUES(101,'Sport et Loisir','Tunis');


INSERT INTO Adherent VALUES(1,'foulen','F','15/03/2007',101);
INSERT INTO Course VALUES(5, '11/03/2023','Ariana',101);
INSERT INTO Inscription VALUES(5,1,'07/03/2023',15.35);

--Afficher les noms des clubs qui comptent un nombre d'adhérents supérieur à 100.

SELECT A.nomClub
FROM Club A
where(SELECT COUNT(*)
FROM Adherent
WHERE numClub=A.numClub)>100;

--Afficher les noms des adhérents qui ont participé à des courses, de deux manières
--différentes : en utilisant la jointure, en utilisant les sous-requêtes. Eliminer
les
--doublons lors de l'affichage.

SELECT DISTINCT a.nomAdh


FROM Adherent a, Inscription b
WHERE a.numAdherent=b.numParticipant;

SELECT DISTINCT nomAdh


FROM Adherent
WHERE numAdherent =ANY (SELECT numParticipant FROM Inscription);
SELECT DISTINCT nomAdh
FROM Adherent
WHERE numAdherent IN (SELECT numParticipant FROM Inscription);
SELECT DISTINCT a.nomAdh
FROM Adherent a
WHERE EXISTS
(SELECT * FROM Inscription WHERE a.numAdherent = numParticipant);

--Calculer et Afficher la totalité des frais d'inscription de la course numéro


4530.

SELECT SUM(coutInscri) AS "coût de la course"


FROM Inscription
where numCourse=5;

--Afficher les couples de numéros de courses programmées à la même date, et


afficher
--cette date.

SELECT a.numCourse, b.numCourse, b.dateCourse


FROM Course a, Course b
WHERE a.dateCourse=b.dateCourse
AND a.numCourse<b.numCourse;

--Afficher les adhérents qui n'ont pas participé aux courses du dernier mois.
SELECT a.*
FROM Adherent A
WHERE a.numAdherent NOT IN
(SELECT b.numParticipant FROM Inscription b,Course c
WHERE b.numCourse=c.numCourse AND (SYSDATE-c.dateCourse)<30);

--Afficher la proportion d'adhérents féminins et la proportion d'adhérents


masculins
--(en une même requête) en utilisant des alias de colonnes d'affichages.

SELECT ((SELECT COUNT(*) FROM Adherent WHERE genreAdh='F')/(SELECT COUNT(*) FROM


Adherent)*100)AS propF
, ((SELECT COUNT(*) FROM Adherent WHERE genreAdh='M')/(SELECT COUNT(*) FROM
Adherent)*100)AS propM
FROM DUAL;

--Exercice 2

CREATE TABLE Emp(


noemp NUMBER(8) CONSTRAINT PK_Emp PRIMARY KEY,
nom....,
......,
nosupr NUMBER(8),
CONSTRAINT FK_Emp_Emp FOREIGN KEY(nosupr) REFERENCES Emp(noemp),
titre ....,
nodept NUMBER(4),
salaire NUMBER);

CREATE TABLE Dept(


nodept NUMBER(4) CONSTRAINT PK_Dept PRIMARY KEY,
nom .....);

ALTER TABLE Emp ADD CONSTRAINT FK_Emp_Dept FOREIGN KEY(nodept) REFERENCES


Dept(nodept);
a
1, ......,NULL, ...
2,.......,NULL....
a.noemp a.nosupr
3,........, 1,.....
4,........, 2,...

--Rechercher le nom et le titre des employés du departement 31 qui ont un titre que
l'on ne trouve
--pas dans le département 32.

SELECT nom, titre FROM Emp WHERE nodept=31 AND titre NOT IN(SELECT titre FROm Emp
WHERE nodept=32);
--Rechercher le nom, le titre et le salaire des employés qui ont le même titre et
le même salaire
--que audevil.

SELECT nom,titre, salaire FROM Emp WHERE titre,salaire IN(SELECT titre,salaire FROM
Emp WHERE nom='Audevil');

--Rechercher le nom, le salaire et le numéro de département des employés qui


gagnent plus
--qu'au moins un employé du département 31, classés par numéro de département et
salaire.

SELECT nom,salaire, nodept FROM Emp WHERE salaire>ANY(SELECT salaire FROM Emp WHERE
nodept=31)
ORDER BY nodept ASC,salaire ASC;

--Rechercher le nom, le salaire et le numéro de département des employés qui


gagnent plus
--que tous les employés du département 31, classés par numéro de département et
salaire.

SELECT nom,salaire, nodept FROM Emp WHERE salaire>ALL(SELECT salaire FROM Emp WHERE
nodept=31)
ORDER BY nodept ASC,salaire ASC;

-- Rechercher le nom et le salaire des employés qui gagnent plus que leur patron,
et le nom et
--le salaire de leur patron.

SELECT a.nom,a.salaire FROM Emp a, Emp b


WHERE a.salaire > b.salaire
AND a.nosupr=b.noemp;

SELECT a.nom, a.salaire


FROM Emp a
WHERE a.salaire>(SELECT salaire FROM Emp WHERE a.nosupr=noemp);

SELECT A,B
FROM
MINUS
SELECT A,B
FROM

Vous aimerez peut-être aussi