Vous êtes sur la page 1sur 7

EXERCICES DE CONSOLIDATION

EXERCICE 1
Soit la table suivante :
NomMed PrenomMed CodeMed NomHopital AdrHopital TelHopital
Ben Saleh Amine M10 Sahloul Sousse 73425001
Amari Lotfi M15 Charles Nicole Tunis 71236147
Kaibi Henda M27 Fatouma Bourguiba Monasir 73260871
1. Donner une description détaillée des colonnes de cette table.
2. En déduire le script SQL de création de cette table.

EXERCICE 2
Une compagnie aérienne gère ses données comme suit :
 Un avion a un numéro d’immatriculation et un type. Chaque type d’avion est décrit par son
nom, son poids, sa capacité et son rayon d’action.
 Un technicien de la compagnie a un nom, un matricule, une adresse, un numéro de téléphone,
un salaire et est expert sur un ou plusieurs types d’avions.
 Un pilote est décrit par les mêmes attributs qu’un technicien. De plus il doit passer un examen
médical annuel.
 Chaque avion doit également passer un certain nombre de tests de bon fonctionnement ; chaque
test a un numéro qui l’identifie, un nom et une valeur minimale (seuil à atteindre)
Ces données de la compagnie seront stoquées dans la base de données AirLineDb.
1. Elaborer le MCD correspondant à cette description
2. En déduire le MLD correspondant
3. Dégager les tables correspondantes à chaque table.
4. Ecrire les scripts SQL d’implémentation de cette base de données dans le SGBD MySQL.

EXERCICE 3
On souhaite créer une base de donnée concernant une entreprise. Une première étude a mis en
évidence trois relations. Pour chacune des relations, la clé est soulignée.
EMPLOYE(NumEmp, Nom, Prenom, Adresse, Telephone, Qualification)

SERVICE(NomService, Responsabe, Telephone)

PROJET(NomProjet, DateDeb, DateFin, NumEmp)

En considérant les possibilités offertes par ce schéma, répondre aux questions suivantes :
1. Un employé peut-il avoir plusieurs qualifications ?
2. Un employé peut-il faire plusieurs projets en même temps ?
3. Une personne peut-elle être responsable de plusieurs services ?
4. Un service peut-il avoir plusieurs responsables ?

ENSEIGNANT : M. ESSAM BENJAMIN P a g e 24 | 91


Leçon 7
LE LANGAGE DE MANIPULATION DES DONNEES
Objectif
Au terme de cette leçon, l’élève doit être capable d’écrire les requêtes SQL de manipulation des
données.
Introduction
Le Langage de Manipulation de Données(LMD) est la partie la plus spectaculaire du langage
SQL. Il comporte deux grandes classes de fonctions : l’extraction de données et la modification de
données.
L’extraction fait l’objet d’une seule commande : la requête SELECT, qui nous permet d’extraire
d’une base de données les données répondant à des questions que nous pourrions nous poser. Sa
forme est cependant d’une telle puissance et d’une telle richesse que son étude exigera la plus
grande partie de cette leçon.
La modification du contenu d’une base de données est simple en apparence : ajouter (INSERT),
supprimer(DELETE) et modifier (UPDATE) les lignes d’une table. Nous verrons cependant que la
prise en compte des contraintes d’intégrité nous amènera à considérer ces opérations avec
circonspection.
Le Langage de Manipulation de Données permet donc de : AFFICHER, INSERER, METTRE A JOUR,
SUPPRIMER des données dans les tables. Le
LMD est donc composé de 4 primitives :
 SELECT pour l'affichage des données des tables.
 INSERT pour l'insertion de données dans les tables.
 UPDATE pour la mise à jour des données.
 DELETE pour la suppression des données.

1. La commande « SELECT »
L'affichage des données d'une ou plusieurs tables se fait grâce au mot-clé SELECT.
La syntaxe de la commande SELECT en SQL est la suivante :

SELECT * | [DISTINCT | ALL] <attributs>


FROM <Nom_de_la_tables>
[WHERE <condition logique de niveau tuple>]
[GROUP BY <attributs>
[HAVING <condition logique de niveau groupe>]]
[ORDER BY <attributs>] ;

Notation (les éléments entre [ ] sont optionnels) :


 Le symbole "|" signifie "ou" ; ainsi on peut faire suivre le mot-clé SELECT par une * OU par
<attributs> précédé le cas échéant par DISTINCT ou ALL.
La clause SELECT décrit la relation résultat. <attributs> désigne :

ENSEIGNANT : M. ESSAM BENJAMIN P a g e 25 | 91


 Soit une liste d'attributs ;

 Soit une expression obtenue à l'aide des fonctions statistiques SUM (somme), AVG

(moyenne), COUNT (compte), MIN et MAX ;

 Soit une expression.

 Les mots-clés DISTINCT et ALL permettent respectivement d'éliminer ou de conserver les

doublons après une projection mise en œuvre par l'ordre SELECT suivi d'une liste d'attributs.

 La clause FROM désigne les relations concernées par la requête. Chaque nom de relation peut

être suivi d'un alias (variables synonymes pour chaque relation). Cet alias permet parfois des

économies d'écritures, mais il permet surtout de lever des ambiguïtés sur les noms d'attributs

(plusieurs relations qui possèdent le même nom d'attribut). Des exemples de définition d'alias

sont proposés dans la partie présentant des exercices corrigés.

 La clause WHERE, optionnelle, spécifie les critères de sélection. La condition logique de niveau

tuple est une expression logique spécifiant les prédicats de restriction ou de jointure à satisfaire

par la réponse. On peut également insérer dans la clause WHERE, une nouvelle instruction

SELECT (requête imbriquée) ce qui permet de travailler sur un ensemble de tuples restreints

par cette sélection.

Lorsque ces critères portent sur des fonctions de groupe, on utilise la clause HAVING.

 La clause GROUP BY partitionne la relation en groupes. La liste des attributs spécifiés dans

cette clause indique le critère de groupement.

 La clause ORDER BY permet de trier les résultats obtenus selon un tri ascendant (ASC) ou

descendant (DESC). On veillera à choisir des colonnes de tri présent dans les attributs du

SELECT.

1.1. La clause « SELECT » et la clause « FROM »


Les clauses SELECT et FROM sont liées. En effet, lors de chaque opération de sélection, le
mot-clé FROM permet d'identifier la ou les tables nécessaires à la construction du résultat de la
requête.
SELECT * FROM Voiture;

Cette instruction SQL permet d'afficher tous les tuples de la table VOITURE :

ENSEIGNANT : M. ESSAM BENJAMIN P a g e 26 | 91


Remarque : le symbole * dans la clause SELECT signifie qu'on désire récupérer TOUS les
champs de la table.

SELECT Marque FROM Voiture;

Cette instruction SQL permet d'afficher le contenu du champ « Marque » des


tuples de la table VOITURE :

Remarque : la requête ne porte que sur un seul champ, cela équivaut à une projection de la table
VOITURE sur ce champ. On peut ajouter autant d’attributs que l’on désire afficher.
SELECT DISTINCT Marque FROM Voiture;

Cette instruction SQL permet d'afficher le contenu du champ Marque des tuples
de la table VOITURE, sans répétition de Marque, c'est-à-dire sans doublon de
Marque.

1.2. Les prédicats


Une condition est appelée prédicat en SQL.
Un prédicat permet de comparer 2 expressions de valeurs :
 La première expression contenant des spécifications de colonnes est appelée terme ;
 La seconde expression contenant seulement des spécifications de constantes est appelée
constante.
Il existe une grande diversité de prédicats en SQL, on trouve en effet :
 Un prédicat de comparaison permettant de comparer un terme à une constante à l'aide des
opérateurs suivants :
 = égal
 <> ou ! = différent
 > plus grand que
 >= plus grand ou égal
 < plus petit que
 <= plus petit ou égal
Ces opérateurs sont valables pour les types NUMBER (NUMBER est un terme englobant les
types INTEGER et FLOAT désignant les nombres, ce type n'est cependant pas disponible pour tous
les SGBD), CHAR, VARCHAR, DATE et valent NULL si un des termes de la comparaison est NULL.
 Le prédicat d'intervalle BETWEEN permet de tester si la valeur d'un terme est comprise
entre la valeur de 2 constantes ;
 Le prédicat de comparaison de texte noté LIKE permet de tester si un terme de type chaîne
de caractères contient une ou plusieurs sous-chaînes (ce prédicat est donc réservé aux types
CHAR et VARCHAR). Le caractère % remplace une chaîne de caractères quelconque y
compris la chaîne vide, le caractère _ remplace n'importe quel caractère unique ;

ENSEIGNANT : M. ESSAM BENJAMIN P a g e 27 | 91


 Le prédicat de test de nullité qui permet de tester si un terme a une valeur convenue NULL,
signifiant que sa valeur est inconnue ou que le champ n'a pas été renseigné. Pour tester la
nullité, on utilise IS NULL, et la non nullité par IS NOT NULL ;
 Le prédicat d'appartenance noté IN qui permet de tester si la valeur d'un terme appartient
à une liste de valeurs constantes.

1.3. La clause « WHERE »


La clause WHERE spécifie une condition de sélection. Une condition de sélection définit un
critère qui, appliqué à un tuple, est vrai, faux ou inconnu (mettant en cause un attribut de valeur
NULL). Cette condition peut inclure des opérateurs booléens (AND, OR, NOT), des conditions
élémentaires et des parenthèses.
Les tableaux ci-après donnent les tables de vérité permettant de calculer les valeurs de vérité
d'une condition de sélection. Seuls les tuples satisfaisant la condition de sélection sont pris en
compte par la requête
Exemple

SELECT * FROM VOITURE

WHERE Puissance <= 6 AND Prix >= 20 000;

Cette instruction SQL permet d’affiche les tuples de la table VOITURE dont la Puissance
est inférieure ou égale à 6 chevaux et dont le prix est supérieur ou égal à 20 000 € :

AND : permet de vérifier TOUTES les conditions simultanément.


Exemple

SELECT * FROM VOITURE


WHERE Puissance <= 6 OR Prix >= 20 000;

Cette instruction SQL permet d’affiche les tuples de la table VOITURE dont la Puissance
est inférieure ou égale à 6 chevaux ou dont le prix est supérieur ou égal à 20 000 € :

OR : permet de vérifier AU MOINS UNE des conditions.


Exemple

SELECT * FROM VOITURE


WHERE NOT (Puissance =6);

Cette instruction SQL permet d’affiche les tuples de la table VOITURE dont la Puissance
n’est égale à 6 chevaux :

ENSEIGNANT : M. ESSAM BENJAMIN P a g e 28 | 91


NOT : permet de donner la négation de la condition.
Remarque : Les opérateurs logiques peuvent être combinés entre eux. Cependant, il faut veiller à
respecter un ordre de priorité. Ainsi, on trouve, du plus prioritaire au moins prioritaire : NOT,
AND, OR L'emploi de parenthèses est possible pour changer l'ordre d’évaluation ou rendre la
lecture plus facile.
Exemple : Prédicats divers :

SELECT * FROM VOITURE


WHERE Prix BETWEEN 25 000 AND 40 000;

Cette instruction SQL permet d’afficher les tuples de la table VOITURE dont le Prix est compris
entre 25 000€ et 40 000€ :

BETWEEN min AND max : permet de récupérer les données dont les valeurs sont comprises entre
min et max (bornes incluses).
SELECT * FROM VOITURE

WHERE Marque LIKE 'Ren%' AND Couleur IN ('Noire', 'Bleue', 'Jaune')

AND Prix IS NOT NULL;

Cette instruction SQL permet d’afficher tous les tuples de la table VOITURE dont le Marque
commence par ‘Ren’, dont la couleur est soit noire, bleue ou jaune, et dont le prix n’est pas inconnu
(donc connu) :

2. Les opérateurs arithmétiques


Les opérateurs arithmétiques ('+', '−', '×', '/') peuvent être utilisés dans les clauses SELECT,
WHERE et HAVING.
Ces opérateurs sont valables pour les types NUMBER et DATE. Si une des opérandes est NULL,
le résultat est NULL. Ces opérateurs peuvent être combinés entre eux mais respectent une priorité
d'évaluation : - '×' et '/' - '+' et '−'
Cet ordre peut, bien entendu, être modifié à l'aide de parenthèses.

ENSEIGNANT : M. ESSAM BENJAMIN P a g e 29 | 91


EXERCICE D’APPLICATION
Soit la base de données relative à l’exploitation des chambres d’un hôtel défini comme suit :
CHAMBRE (Num_Chambre, Prix, Nbr_Lit, Nbr_Pers, Confort, Equ)
CLIENT (Num_Client, Nom, Prénom, Adresse)
RESERVATION (#Num_Client, #Num_Chambre, Date_Arr, Date_Dep)
Exprimons les requêtes suivantes en SQL :
1. Liste de toutes les chambres

SELECT *
FROM Chambre;
2. Les numéros des chambres avec TV

SELECT Num_Chambre
FROM Chambre
WHERE Confort = ′TV′;
3. Les numéros des chambres et leurs capacités

SELECT Num_Chambre, Nbr_Pers


FROM Chambre;
4. La capacité théorique d’accueil de l’hôtel

SELECT SUM(Nbr_Pers)
FROM CHAMBRE;
5. Le prix par personne des chambres avec TV.

SELECT Prix / Nbr_Pers, Num_Chambre


FROM CHAMBRE
WHERE Equ=′TV′;
6. Les numéros des chambres et le numéro des clients ayant réservé des chambres pour le 25/12/2021.

SELECT Num_Chambre, Num_Client


FROM RESERVATION
WHERE Date_Arr <= ′25/12/2021′
AND (Date_Dep>′25/12/2021′ OR Date_Dep is Null) ;
7. Les numéros des chambres coutant au maximum 80.000 Fou ayant un bain et valant au maximum 120.000 F.

SELECT Num_Chambre
FROM CHAMBRE
WHERE Prix<=80000 OR (Confort=’bain’ AND Prix<=’120000’) ;
8. Les noms, prénoms et adresse des clients dont les noms commencent par « AR ».

SELECT Nom, Prenom, Adresse


FROM CLIENT
WHERE No LIKE ‘RA%’ ;
9. Le nombre de chambre dont le prix est entre 85000 et 120000

SELECT COUNT(Num_Chambre)
FROM CHAMBRE
WHERE Prix BETWEEN 85000 AND 120000;
10. Les noms des clients n’ayant pas fixé la date de départ

SELECT C.Nom
FROM RESERVATION R, Client C
WHERE Date_Dep is Null AND R.Num_client = C.Num_Client ;

ENSEIGNANT : M. ESSAM BENJAMIN P a g e 30 | 91

Vous aimerez peut-être aussi