Vous êtes sur la page 1sur 6

Correction

Exercice 1
²²²²²²²

Ecrire le script de création de ce schéma relationnel avec les règles de gestion suivantes :
- Les clés primaires.
- Quantité a une valeur strictement positive.

Exercice 2
Soit le modèle relationnel suivant relatif à la gestion des notes annuelles d'une promotion d'étudiants :
ETUDIANT(NEtudiant int, Nom varchar(30),Prenom varchar(30))
MATIERE(CodeMat int , LibelleMat varchar(30), CoeffMat int)
EVALUER(NEtudiant int, CodeMat int, DateE date, Note float,)

1. Créer la base de données avec les clés primaire et étrangère.


2. Ajouter la colonne date de naissance dans Etudiant : DateN.
3. Ajouter la colonne Groupe : Groupe not null.
4. Ajouter la contrainte unique pour les deux attributs (NEtudiant, CodeMat).
5. Ajouter une contrainte, valeur entre 0 et 20 pour la note.
6. Ajouter 3 insertions pour chaque table.
7. Afficher tous les étudiants avec une colonne Age calculé automatiquement à partir de DateN.
8. Ajouter une colonne Age calculé automatiquement à partir de DateN.

Exercice 3
Voilà le schéma de la base de données :

1. Créer une base de données ANALYSES


2. Créer la table CLIENT en précisant la clé primaire
3. Modifier les colonnes cpclient et villeclient pour qu'elles n'acceptent pas une valeur nulle.

1
Correction

4. Modifier les colonnes Nom pour qu'elle prenne la valeur 'Anonyme' par défaut.
5. Créer la table Echantillon en précisant la clé primaire qui commence de 10 et s'incrémente
automatiquement de 1, codeclient est la clé étrangère vers la table Client.
6. Créer la table Typeanalyse en précisant de clé primaire.
7. Ajouter une contrainte ck_prixTypeAnalyse qui impose de saisir un prixTypeAnalyse dans la
table Typeanalyse qui doit être entre 100 et 1000.
8. Créer la table Realiser en précisant que le couple (codeEchantillon,refTypeAnalyse) est une
clé primaire, en même temps, codeEchantillon est une clé étrangère vers la table Echantillon
et refTypeAnalyse est clé étrangère vers la table TypeAnalyse.
9. Supprimer la colonne rue de la table Client.

Exercice 4
Soit le schéma relationnel suivant :

INDIVIDU(N_IDENTIFICATION int primary key,#N_LOGEMENT int,NOM


varchar(30),PRENOM varchar(30),DATE_DE_NAISSANCE date,N_TELEPHONE
varchar(30))

LOGEMENT(N_LOGEMENT int primary key,#TYPE_LOGEMENT


varchar(30),#ID_QUARTIER int,NO int,RUE varchar(30),SUPERFICIE float,LOYER float)

QUARTIER(ID_QUARTIER int primary key,#ID_COMMUNE


int,LIBELLE_QUARTIER varchar(30))

TYPE_DE_LOGEMENT(TYPE_LOGEMENT varchar(30) primary


key,CHARGES_FORFAITAIRES varchar(30))

COMMUNE(ID_COMMUNE int primary key,NOM_COMMUNE


varchar(30),DISTANCE_AGENCE float ,NOMBRE_D_HABITANTS int)
Donnez les requêtes SQL permettant de réaliser les opérations suivantes :
1. Créer la base de données GestionLogement
2. Créer les cinq tables en désignant les clés primaires mais pas les clés étrangères.
3. Créer les contraintes permettant de préciser les clés étrangères avec suppression et
modification en cascade.
4. Modifier la colonne N_TELEPHONE de la table INDIVIDU pour qu’elle n’accepte pas la
valeur nulle.
5. Créer une contrainte df_Nom qui permet d’affecter ‘SansNom’ comme valeur par défaut à la
colonne Nom de la table INDIVIDU.
6. Créer une contrainte ck_dateNaissance sur la colonne DATE_DE_NAISSANCE qui empêche
la saisie d’une date postérieure à la date d’aujourd’hui ou si l’âge de l’individu n.
7. e dépasse pas 18 ans.
Supprimer la contrainte df_Nom que vous avez défini dans la question 5.

Exercice 5
Soit le schéma relationnel suivant :

2
Correction

Stagiaire(Code_Stgr int primary key,Nom_Stgr varchar(30),Prenom_Stgr


varchar(30),Date_Naissance date,Tel_Fixe varchar(30),Tel_Portable varchar(30),E_Mail
varchar(30), Code_Groupe varchar(30))

Groupe(Code_Groupe varchar(30) primary key,Annee int,Code_Filiere int)

Filiere(Code_Filiere int primary key identity(1,2),Libelle_Filiere varchar(30))

Module(Code_Module int primary key identity(2,2),Libelle_Module varchar(30))

Note(Code_Stgr int,Code_Module int,Note_1 float,Note_2 float,Note_3 float)

Créer les tables ci-dessus en précisant les clés primaires et les clés étrangères (Code_Module
et Code_Filière sont générés automatiquement par le système)

Ajouter les contraintes suivantes :


1. Année vaut 1 ou 2.
2. Tél_Fixe commence par 05 et Tél_Portable par 06, les deux ne peuvent pas dépasser
10 chiffres.
3. Note_1, Note_2 et Note_3 sont comprises entre 0 et 20, s’elles ne sont pas remplies elles
valent 0.
4. Ajouter une colonne Moyenne à la table Note qui vaut : (Note_1 + Note_2 + Note_3)/3
5. Insérer dans cette base de données 4 lignes par tables

Exercice 6
Soit le modèle relationnel suivant :
CLIENT (noclient int, nom varchar(30),prenom varchar(30),tel varchar(10), adresse
varchar(50),codepostal varchar(5))

CIRCUIT(nocircuit int, destination varchar(30),duree float)

VOYAGE(novoyage int,datev date,prix float,nbplacemax int,nocircuit int)

INSCRIPTION (noclient int, novoyage int,date_inscription date)

Donnez les requêtes SQL permettant de réaliser les opérations suivantes :


1. Créer les tables en spécifiant les clés primaires et étrangères et en respectant les règles
suivantes :
a. Le noclient de la table client commence de 1 est s’incrémente automatiquement de 1.
b. le numéro de téléphone contient 10 chiffres et doit être unique et le code postal contient 5
chiffres.
2. Introduire quelques données pour tester.
3. Afficher le nombre d'inscriptions entre le 11/02/2015 et 14/02/2015.
4. Afficher pour chaque client (nom du client), le numéro de voyage, la date d’inscription, la
date de voyage, le prix du voyage, la destination et la durée du voyage auquel il participe.

3
Correction

N.B : Cette requête utilise des jointures pour relier les données des tables INSCRIPTION, CLIENT,
VOYAGE et CIRCUIT. Le résultat sera une table qui comprend le nom du client, le numéro de voyage,
la date d'inscription, la date de voyage, le prix du voyage, la destination et la durée du voyage pour
chaque inscription.
5. Afficher pour chaque voyage (novoyage) le nombre de places libres restantes.
N.B : Cette requête produira un résultat qui affiche pour chaque voyage son numéro (novoyage) et le
nombre de places libres restantes (places_libres), en soustrayant le nombre d'inscriptions pour ce
voyage de la capacité maximale de voyage.
Indication : Utiliser une requête SQL qui joint les tables INSCRIPTION, VOYAGE et CIRCUIT et
utilise une fonction agrégée pour compter le nombre d'inscriptions pour chaque voyage.
6. Afficher pour chaque client (nom du client) le montant total qu’il a payé pour tous les
voyages auxquels il a participé.
N.B : Cette requête joint les tables INSCRIPTION, CLIENT et VOYAGE pour obtenir les
informations nécessaires. Elle utilise l'instruction GROUP BY pour regrouper les données par nom
de client, et la fonction SUM() pour calculer le total payé pour chaque client. Enfin, elle utilise
l'instruction ORDER BY pour trier les résultats par montant total décroissant.
7. Diminuer le prix de 10% et augmenter le nombre maximal de place de 20% pour les voyages
dont le nombre de participants est égal au nombre maximal de places.
N.B : Vous pouvez utiliser une requête UPDATE pour réaliser cette tâche. Vous devrez d'abord
trouver les voyages qui ont un nombre de participants égal au nombre maximal de places, puis mettre
à jour le prix et le nombre maximal de places en conséquence.
8. Supprimer les clients qui ne sont pas inscrit dans un voyage depuis 3 ans.
N.B : Cette requête utilise le sous-requête EXISTS pour vérifier si un client est inscrit dans un
voyage depuis moins de 3 ans. Si un client n'est pas inscrit dans un voyage depuis 3 ans, la condition
NOT EXISTS retourne TRUE et le client est supprimé.

Exercice 7
Soit le modèle relationnel suivant :
Ville(CodePostal ,NomVille varchar(30))

Cinema(NumCinema int,NomCinema varchar(30),RueCinema varchar(30),CodePostal int)

Salle(NumSalle int,Capacite int,NumCinema)

Film(NumFilm int,Titre varchar(50),Duree int,Producteur varchar(30))

Projection(NumFilm int,NumSalle int,DateP date,NbreEntree int)


Donnez les requêtes SQL permettant de réaliser les opérations suivantes :
1. Créer les tables avec les clés primaires et étrangères en respectant les règles suivantes :
 CodePostal doit contenir 5 caractères.
 La capacité doit être entre 30 et 100.
 La suppression et la modification en cascade
2. Introduire des données pour tester.
3. Afficher la liste des projections où le nombre d’entrées a dépassé 80% de la capacité de la
salle de projection.
4. Afficher le nombre de salles de cinéma par ville (nom ville).

4
Correction

N.B : Cette requête utilise des jointures pour lier les informations des tables Ville, Cinema et Salle, et
ensuite utilise la fonction COUNT pour compter le nombre de salles de cinéma par ville. Le résultat
est groupé par ville et le nom de la ville et le nombre de salles sont affichés dans le résultat.
5. Afficher la capacité totale de chaque cinéma (nom du cinéma).
6. Afficher le nombre de films projeté le 25/08/2011 par producteur.
7. Afficher pour chaque film (titre du film) le nombre de projections entre le 20/10/2011 et
25/10/2011.
8. Afficher pour chaque cinéma (nom du cinéma) le nombre de projections dont le nombre total
d’entrées dépasse 150.
9. Supprimer les films qui ne sont pas projetés depuis 3 ans.
10. Supprimer les cinémas qui contiennent au moins une salle non utilisée depuis 10 mois.
N.B : La requête ci-dessus utilise une jointure entre les tables Cinema et Salle. La jointure gauche
LEFT JOIN est utilisée pour obtenir les dernières projections pour chaque salle. Ensuite, la clause
WHERE est utilisée pour filtrer les cinémas qui contiennent au moins une salle non utilisée depuis 10
mois en comparant la date de la dernière projection avec la date actuelle. Finalement, la clause
DELETE est utilisée pour supprimer les cinémas qui remplissent cette condition.

Exercice 8
Soit le schéma relationnel suivant :

AGENCE(Num_Ag int,Nom_Ag varchar(30),Ville_Ag varchar(30))

CLIENT(Num_Cl int, Nom_Cl varchar(30),Prenom_Cl varchar(30),Ville_Cl varchar(30))

COMPTE(Num_Cp int,Num_Cl int,Num_Ag int,Solde float)

EMPRUNT(Num_Ep int,Num_Cl int,Num_Ag int,Montant float)

Créez toutes les tables avec les contraintes d’intégrité PK et FK, et ajouter un enregistrement
par table.
1. Ajouter une contraint strictement positif (>) pour Montant.
2. Modifier la valeur Null des Montants par la valeur 0
3. Modifier les villes des Clients en minuscule
4. Augmenter le solde de tous les clients habitant “Rabat” de “0,5%”
5. Afficher la Liste des clients dont le nom se termine par E et le quatrième caractère est un A.
6. Afficher la Liste des agences ayant des emprunts-clients.
7. Afficher la liste des clients ayant un emprunt à “Casa”
8. Afficher la liste des clients ayant un compte et un emprunt à “Casa”
9. Afficher la liste des clients ayant un emprunt à la ville où ils habitent.
10. Afficher la liste des clients ayant un compte et emprunt dans la même agence
11. Afficher l'emprunt moyenne des clients dans chaque agence
12. Afficher le totale emprunté par client
13. Afficher Le client qui a le moins des totaux emprunts
14. Afficher les clients ayant un compte dans toutes les agences de “Rabat”.
5
Correction

Exercice 9 : Gestion des utilisateurs


1- Sur la base de données dbTest, créer les 4 utilisateurs suivants :

2- Sur la base de données dbTest2, créer un utilisateur (user1, adresse ip 221.15.2.2), en


spécifiant l'adresse IP à partir duquel l'utilisateur peut se connecter à la base de données.
3- L'utilisateur "user5" peut se connecter à partir de n'importe quelle adresse IP du réseau
qui commence par 221.15.2.
4- Supprimer l’utilisateur user4 puis le créer une autre fois

5. Vérifier les utilisateurs qui existent sur votre serveur local.


6. Donner les privilèges suivants aux utilisateurs comme suit :
Créer avant tout les tables : Employees et Orders de la base de données dbTest
Utilisateur Privilèges
User1 « Select » sur tous les objets de la base de données « dbTest ».
User1 autoriser l'utilisateur user1 à accéder à la base de données depuis
l’adresse IP 192.160.2.1
User2 « INSERT » sur les tables Employees et Orders de la base de
données «dbTest»
User3 Tous les privilèges sur la base de données dbTest.

7. Vérifier les privilèges attribués à chacun de ces utilisateurs.

8. Connectez-vous à l’aide de l’utilisateur User15, après sa création sur la machine locale.

Il faut spécifier les droits

9. En utilisant l’utilisateur user15 créer une nouvelle table T3, puis afficher tous les champs de cette
table après son remplissage.

10. Reconnectez-vous avec le compte root.

Vous aimerez peut-être aussi