Vous êtes sur la page 1sur 4

Institut Supérieur de Documentation Cours BD (1ère année SI+GEID+LDBA) Institut Supérieur de Documentation Cours BD (1ère année SI+GEID+LDBA)

3) Créer la table Facture sachant que :


Correction de la série d’exercices de SQL
NumFact est un nombre entier codé sur 8 octets et affiché sur 10 chiffres
DateFact: ce champ est de type date, obligatoire (ne doit pas rester vide)
Exercice n°1: #NumClient est un nombre entier codé sur 4 octets et affiché sur 6 chiffres, obligatoire
Soit le schéma relationnel suivant : (ne doit pas rester vide)
Client (NumClient, NomCl, PrénomClient, TéléphoneCl) Montant : réel s'affichant sur 4 chiffres avant la virgule et 3 chiffres après la virgule,
Facture (NumFact, DateFact, #NumClient, Montant, Remise) obligatoire (ne doit pas rester vide)
Remise : réel
1) Créer la table Client sachant que :
NumClient est un nombre entier codé sur 4 octets et affiché sur 6 chiffres Réponse:
NomCl est un texte de taille maximale 20 caractères , obligatoire (ne doit pas rester vide) CREATE TABLE Facture (
PrénomClient est un texte de taille maximale 20 caractères, obligatoire (ne doit pas NumFact BigInt(10),
rester vide) DateFact Date Not NULL,
TéléphoneCl est un nombre entier codé sur 4 octets, affiché sur 8 chiffres #NumClient Int(6) Not NULL,
Montant Float(7,3) Not NULL,
Réponse: Remise Float,
CREATE TABLE Client ( PRIMARY KEY (NumFact),
NumClient Int(6), FOREIGN KEY (#NumClient) REFERENCES Client (NumClient));
NomCl Char (20) Not NULL,
PrénomClient Char (20) Not NULL,
TéléphoneCl Int(8), 4) Supprimer la table Client :
PRIMARY KEY (NumClient)); DROP TABLE Client ;

2) Modifier la structure de la table Client comme suit:


Ajouter un champ nommé Adresse de type texte de taille maximale 30 caractères
Modifier la taille maximale du nom et du prénom du client (nouvelle taille: 30 caractères)
tout en renommant NomCl par Nomclient
Supprimer le champ TéléphoneCL

Réponse:
ALTER TABLE Client
ADD Adresse CHAR(30),
CHANGE NomCl NomClient Char(30),
MODIFY PrénomCientl CHAR(30),
DROP COLUMN TéléphoneCL;

-1- -2-
Institut Supérieur de Documentation Cours BD (1ère année SI+GEID+LDBA) Institut Supérieur de Documentation Cours BD (1ère année SI+GEID+LDBA)
Exercice n°2: 3) Insérer l’enregistrement ('S22', 'F12', '2015-10-23',1,NULL) dans la table "Projeter" :
Soit le schéma relationnel suivant:
Salle (CodeS, NomS, Adresse, Capacité) Remarque:
Film (CodeF, Titre, DateF, Type, Réalisateur) MySQL5.5 stocke une date au format AAAA-MM-JJ (Année-Mois-Jour) et met une date entre
Projeter (#CodeS, #CodeF, DateProjection, NuméroProjection, NombreSpectateurs) deux apostrophes (comme une chaîne de caractères). Exemple: '2014-12-21'

1) Création de la table "Salle" : Réponse 1:


CodeS est un texte de taille maximale 3 caractères, obligatoire (ne doit pas rester vide) INSERT INTO Projeter VALUES ('S22', 'F12', '2015-10-23',1,NULL) ;
NomS est un texte de taille maximale 10 caractères, unique (deux salles ne peuvent pas
avoir le même nom) et obligatoire (ne doit pas rester vide) Réponse 2: On peut aussi insérer comme suit:
Adresse est un texte de taille maximale 20 caractères, obligatoire (ne doit pas rester INSERT INTO Projeter(NuméroProjection, DateProjection, #CodeF, #CodeS)
vide) VALUES (1, '2015-10-23','F12', 'S22') ;
Capacité est un entier codé sur 2 octets
4) Modifier le nom et la capacité de la salle de code 'S21'. Les nouvelles valeurs sont: 'Le

Réponse: colisée' et 300:

CREATE TABLE Salle (


CodeS Char (3), Réponse:

NomS Char (10) UNIQUE NOT NULL, UPDATE Salle

Adresse Char (20) NOT NULL, SET NomS='Le Colisée',

Capacité SmallInt, SET Capacité=300,

PRIMARY KEY (CodeS)); WHERE CodeS='S21';

2) Création de la table "Projeter": 5) Effacer la capacité de la salle de code 'S23' (mettre à jour à NULL):
#CodeS est un texte de taille maximale 3 caractères
#CodeF est un texte de taille maximale 3 caractères Réponse:
DateProjection est de type date UPDATE Salle
NuméroProjection est un entier codé sur 1 octet SET Capacité=NULL
NombreSpectateurs est un entier codé sur 2 octets, s’affichant sur 3 caractères WHERE CodeS='S23';

Réponse:
6) Augmenter de 100 les capacités des salles dont le code varie entre 'S21' et 'S23':
CREATE TABLE Projeter (
#CodeS Char (3),
Réponse:
#CodeF Char (3),
DateProjection Date, UPDATE Salle
NuméroProjection Tinyint, SET Capacité=Capacité+100
NombreSpectateurs SmallInt(3), WHERE CodeS BETWEEN 'S21' AND 'S23';
PRIMARY KEY (#CodeS, #CodeF, DateProjection, NuméroProjection),
FOREIGN KEY (#CodeS) REFERENCES Salle (CodeS),
FOREIGN KEY (#CodeF) REFERENCES Film(CodeF));

-3- -4-
Institut Supérieur de Documentation Cours BD (1ère année SI+GEID+LDBA) Institut Supérieur de Documentation Cours BD (1ère année SI+GEID+LDBA)
7) Supprimer toutes les projections du film 'F99' effectuées durant le mois de janvier 2015 dans 11)Donner le nombre de films projetés par salle :
la salle 'S13':
Réponse:
Réponse: SELECT #CodeS, Count (#CodeF) As NombreDeFilms
DELETE FROM Projeter
FROM Projeter GROUP BY #CodeS;
WHERE #CodeF='F99'
12) Donner le nombre total de spectateurs par salle et par film:
AND # CodeS='S13'
AND DateProjection BETWEEN '2015-01-01' AND '2015-01-31';
Réponse:
SELECT #CodeS, #CodeF, SUM (NombreSpectateurs) As NombreDeSpectateurs
8) Donner les noms des salles ayant accueilli moins de 50 spectateurs dans une projection:
FROM Projeter
GROUP BY #CodeS, #CodeF;
Réponse:
SELECT NomS
FROM Salle, Projeter
WHERE CodeS = #CodeS
AND NombreSpectateurs < 50;

9) Donner les codes des films réalisés durant l’année 2006:

Réponse:
SELECT CodeF
FROM Film
WHERE DateF Between '2006-01-01' AND '2006-12-31';

10) Donner toutes les informations sur les salles dont la capacité est vide est dont l'adresse est
soit 'Tunis', soit 'Bizerte', soit 'Sousse':

Réponse:
SELECT *
FROM SALLE
WHERE Capacité IS NULL
AND Adresse IN ('Tunis', 'Bizerte', 'Sousse');

-5- -6-
Institut Supérieur de Documentation Cours BD (1ère année SI+GEID+LDBA) Institut Supérieur de Documentation Cours BD (1ère année SI+GEID+LDBA)
Exercice n°3 : 5) Donner la meilleure remise par ouvrage :
Soit le schéma relationnel suivant:
Ouvrage (NO, Titre, AnneeEdition, Prix) Réponse:
Distributeur (ND, Nom, Ville) SELECT #NO, MAX (Remise) As MeilleureRemise
Offrir (#NO, #ND, Remise) FROM Offrir
GROUP BY #NO;
1) Donner les noms des distributeurs de 'Tunis' :
6) Donner les moyennes des remises par titre d'ouvrage dans le cas où cette moyenne est
supérieure ou égale à 20% (0,2):
Réponse:
SELECT Nom
Réponse:
FROM Distributeur
SELECT Titre, AVG (Remise) As RemiseMoyenne
WHERE Ville = 'Tunis';
FROM Ouvrage, Offrir
WHERE NO =#NO
2) Donner les titres des ouvrages offerts par des distributeurs de 'Tunis':
GROUP BY Titre
HAVING AVG (Remise)>=0.2; (ou bien HAVING RemiseMoyenne >=0.2)
Réponse:
SELECT Titre
FROM Distributeur, Ouvrage, Offrir
WHERE ND =#ND
AND NO =#NO
AND Ville = 'Tunis';

3) Donner les ouvrages édités en 2007 :

Réponse:
SELECT NO
FROM Ouvrage
WHERE AnnéeEdition = 2007;

4) Donner le nombre global d'ouvrages

Réponse:
SELECT Count(*) As NBROuvrages
FROM Ouvrage;

-7- -8-

Vous aimerez peut-être aussi