Introduction aux Bases de Données
Introduction aux Bases de Données
http://www.agroparistech.fr/Systeme-d-Information.html
Partie I
du TD 1 au TD 5
——————————————————-
Bases de données et MySQL
——————————————————-
Liliana Ibănescu
[email protected]
UFR d’informatique
Département MMIP
2
Table des matières
3
2.3.9 Ajout de lignes dans une table (INSERT) . . . . . . . . . . . . . 35
2.3.10 Suppression de lignes (DELETE) . . . . . . . . . . . . . . . . . . 35
2.3.11 Modification de lignes (UPDATE) . . . . . . . . . . . . . . . . . 36
4
6 TD 3 : Travaux dirigés en BD, séance 3 – Requêtes de mise à jour 52
6.1 Exercice 4 : requêtes sur la BD client commande . . . . . . . . . . . 52
6.1.1 Exemples de requêtes . . . . . . . . . . . . . . . . . . . . . . . . 52
6.1.2 Requêtes générées par l’interface de phpMyAdmin/MySQL . . . 53
6.1.3 Requêtes en SQL . . . . . . . . . . . . . . . . . . . . . . . . . . 54
6.2 Exercice 5 : Modification et contraintes d’intégrité . . . . . . . . . . . . 55
6.2.1 Question 5a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
6.2.2 Questions 5b . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
6.2.3 Question 5c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
6.2.4 Question 5d . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
6.3 Questions de révision . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
6.3.1 Q.R.8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
6.3.2 Q.R.9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
6.3.3 Q.R.10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
5
6
Chapitre 1
7
1.1 La base de données client commande
La base de données client commande est utilisée par une entreprise de matériaux
de construction pour lui permettre d’éditer des factures pour ses clients et de gérer ses
stocks.
Le schéma de la base de données client commande est présenté dans la figure 1.1 :
1. la table client est utilisée pour enregistrer les propriétés concernant les clients
de l’entreprise : leur nom, leur adresse, etc.
2. la table produit est utilisée pour enregistrer les propriétés concernant les matériaux
de construction disponibles à la vente : leur libellé, le prix à l’unité, la quantité en
stock.
3. la table commande est utilisée pour enregistrer les propriétés concernant une com-
mande : son numéro, la date de la commande et l’identifiant du client (NCLI) qui
permet de récupérer dans la table client toutes les informations relatives à ce
client.
4. la table detail est utilisée pour enregistrer les “lignes” des commandes : l’iden-
tifiant de la commande (NCOM), l’identifiant du produit (NPRO) et la quantité com-
mandée.
8
table client table commande
9
1.2 La base de données gie agricole
La base de données gie agricole est utilisée par un groupement d’intérêt écono-
mique (GIE) agricole pour enregistrer les interventions de ses employés sur les parcelles
des agriculteurs. La main d’œuvre pour l’exploitation des parcelles est assurée par les em-
ployés du GIE, payés selon un salaire journalier brut. La BD permet, entre autre, d’éditer
les fiches de payes mensuelles des employés et de lister les interventions effectuées pour
un agriculteur.
Le schéma de la base de données gie agricole est présenté dans la figure 1.3 :
1. la table agriculteur est utilisée pour enregistrer les propriétés concernant un
agriculteur : son nom, son prénom et son adresse.
2. la table parcelle est utilisée pour enregistrer les propriétés concernant les par-
celles des agriculteurs : leur nom, leur lieu, leur superficie et l’identifiant de leur
propriétaire.
3. la table employe est utilisée pour enregistrer les propriétés concernant les em-
ployés.
4. la table intervention est utilisée pour enregistrer les interventions des em-
ployés du GIE sur les parcelles des agriculteurs.
10
table agriculteur table tarif
table parcelle
table employe
table intervention
F IGURE 1.4 – Les lignes de la base de données gie agricole à un instant donné.
11
1.3 BD, tables, lignes et colonnes
Une base de données est constituée d’un ensemble de tables.
Une table contient une collection/suite de lignes, aussi appelées enregistrements.
Une ligne d’une table est une suite de valeurs, chacune d’un type déterminé. Une ligne
regroupe les données relatives à une entité ou un fait du domaine d’application (la partie
du monde à laquelle on s’intéresse). Toutes les lignes d’une table ont le même format ou
structure.
Une colonne est définie par son nom et le type de ses valeurs.
Exemple 1. La figure 1.5 représente les informations enregistrées à un instant donné dans
la table produit de la BD client commande : la table a 7 lignes (enregistrements)
décrivant chacune un produit. On trouve dans chaque ligne quatre valeurs représentant
respectivement le code, le libellé, le prix à l’unité d’un produit, ainsi que la quantité restant
en stock. La colonne LIBELLE contient des valeurs qui sont des chaı̂nes de caractères,
les valeurs de la colonne PRIX sont des nombres décimaux (dont deux chiffres après la
virgule) et les valeurs de la colonne QSTOCK sont des nombres entiers (cf à la figure 1.1).
12
1.4.2 Opérateurs
Les opérateurs utilisés pour comparer des valeurs sont :
= égal à
> plus grand que
< plus petit que
<> différent de
>= plus grand ou égal
<= plus petit ou égal
L’interprétation de ces relations est évidente pour les valeurs numériques. Pour les va-
leurs temporelles, l’expression date1 < date2 s’interprète comme date1 est antérieure à
date2 dans le calendrier. Pour les chaı̂nes de caractères, l’expression ch1 < ch2 pour toute
chaı̂nes ch1 et ch2 , s’interprète comme ch1 est plus petite que ch2 selon l’ordre lexicogra-
phique (celui du dictionnaire). Attention : le caractère “a” n’est pas égal à “A”.
Les opérateurs logiques utilisés pour les valeurs de type booléen sont :
and : conjonction
or : disjonction
not : négation
Lorsqu’une expression complexe comporte plusieurs opérateurs, les priorités des opé-
rateurs (ou précédence des opérateurs) déterminent l’ordre d’exécution des opérations.
Cet ordre peut affecter considérablement la valeur du résultat. Un opérateur de priorité
élevée est évalué avant un opérateur de priorité basse. Lorsque deux opérateurs dans une
expression ont le même niveau de priorité, ils sont évalués de gauche à droite en fonction
de leur position dans l’expression. En règle générale
– les opérateurs arithmétiques de multiplication et de division sont prioritaires sur les
opérateurs arithmétiques d’addition et de soustraction ;
– les opérateurs arithmétiques sont prioritaires sur les opérateurs de comparaison ;
– les opérateurs de comparaison sont prioritaires sur les opérateurs logiques ;
– l’opérateur logique and est prioritaire sur l’opérateur or.
Pour modifier la priorité habituelle des opérateurs dans une expression il faut utiliser
des parenthèses. Tout ce qui se trouve entre parenthèses est évalué en premier pour pro-
duire une seule valeur, qui est ensuite utilisée par un opérateur en dehors des parenthèses.
13
1.4.3 La valeur NULL
L’absence de valeur d’une colonne dans une ligne d’une table se signalera par l’affec-
tation de la valeur conventionnelle NULL à cette colonne.
On peut imposer l’interdiction d’assigner la valeur NULL à une colonne : cette colonne
sera alors une colonne obligatoire. Si la valeur NULL est autorisée, cette colonne sera dite
facultative.
Contrainte : Toute tentative d’insérer une ligne qui ne posséderait pas de valeur pour
une colonne obligatoire serait automatiquement signalée comme erreur.
Remarque : La valeur NULL a un statut particulier par rapport aux autres valeurs, son
usage entraı̂ne de multiples difficultés et certains auteurs recommandent de l’éviter.
1.5 Clé
Une ligne dans une table regroupe des informations sur une entité. Une des propriété
importante dans une table c’est de pouvoir identifier de manière unique une ligne à l’aide
d’un identifiant ou une clé (key en anglais).
Une clé peut être composée de plusieurs colonnes de la table.
Exemple 4. Une ligne de la table client donne les informations relative à un client :
son nom, son adresse, la ville où il habite.
Déclarer que la colonne NOM est une clé de la table client, impliquerais alors, qu’à tout
instant, il n’existera pas deux (ou plusieurs) lignes ayant la même valeur dans la colonne
NOM.
Déclarer que le couple de colonnes (NOM, VILLE) est une clé de la table client, im-
plique alors, qu’à tout instant, il n’existera pas deux (ou plusieurs) lignes ayant la même
valeur pour le couple (nom du client, ville).
14
Exemple 5. La clé primaire de la table employe de la base de données gie agricole 2
est représentée par la colonne Emp Nss qui contient les numéros de sécurité sociale des
employés, qui sont donc uniques.
La clé primaire de la table detail de la base de données client commande 3 est
représentée par le couple de deux colonnes NCOM et NPRO, ce qui impose qu’on ne pourra
pas enregistrer deux lignes ayant le même numéro de commande et le même numéro de
produit (voir aussi l’exemple 9, page 16).
La clé primaire de la table intervention de la base de données gie agricole 4
est représentée par ses trois premières colonnes.
15
On notera que le nom d’une colonne formant une clé étrangère peut être le même ou
peut-être différent de celui de la clé primaire à laquelle elle fait référence.
Pour qu’une clé étrangère joue correctement le rôle de référence, il est nécessaire que
l’ensemble de ses valeurs dans la table enfant soit un sous-ensemble des valeurs de la
clé primaire de la table parent. Cette propriété est appelée contrainte référentielle (voire
aussi le §1.6.3, page 17). Elle est garantie par le SGBD pour autant qu’on ait explici-
tement déclaré les clés étrangères (c.à.d. créer les relations avec les clés primaires aux-
quelles elles font référence) : toute opération qui conduirait à violer cette contrainte serait
automatiquement rejetée.
16
représentée par le couple de deux colonnes NCOM et NPRO.
Pour la version de la BD de la figure 1.2, la création d’une ligne ayant comme valeur
30188 dans la colonne NCOM et PH222 dans la colonne NPRO n’est pas autorisée car il
existe déjà une ligne, la dernière, ayant ces valeurs pour la clé primaire.
Exemple 10. La clé étrangère de l’exemple 6 page 15 pour la BD gie agricole im-
pose que dans la colonne Par Prop de la table parcelle les seules valeurs acceptées
sont celles déjà présentes dans la colonne Agr Id de la table agriculteur.
Exemple 11. Les deux clés étrangères présentées dans l’exemple 7 page 15 pour la BD
client commande impose deux contraintes référentielles :
1. la première, cf. FK1, indique que toute valeur de la colonne NCOM dans detail
doit faire référence à une valeur de la colonne NCOM de la table commande ;
2. la seconde, cf. FK2, indique que toute valeur de la colonne NPRO dans detail
doit faire référence à une valeur de la colonne NPRO de la table produit.
La suppression dans la table parent d’une ligne référencée par d’autres lignes dans
une table enfant sera exécutée selon une des stratégies possibles suivantes, appelées delete
mode :
– blocage : la suppression de la ligne dans la table parent est refusée ;
– cascade : la suppression de la ligne dans la table parent est accompagnée de la
suppression des lignes correspondantes dans la table enfant ;
– indépendance : la suppression de la ligne dans la table parent est accompagnée
par la mise à NULL des colonnes correspondant aux clés étrangères des lignes
concernées dans la table enfant.
Exemple 13. Dans la base de données client commande la table detail a pour clé
primaire le couple de colonnes (NCOM, NPRO) (voir aussi l’exemple 5) et doit respecter
les deux contraintes référentielles données dans l’exemple 11. Les conséquences sur la
modification de cette table sont les suivantes :
1. La création d’une ligne dans la table detail est autorisée seulement si :
(a) la valeur de la colonne NCOM de cette nouvelle ligne existe dans la colonne
NCOM de la table commande (cf. FK1) ;
17
(b) la valeur de la colonne NPRO de cette nouvelle ligne existe dans la colonne
NPRO de la table produit (cf. FK2) ;
(c) le couple de valeurs (NCOM, NPRO) n’existe pas déjà dans une ligne de la table
detail (voir aussi l’exemple 8).
2. La suppression d’une ligne dans la table detail est autorisée.
3. La modification de la clé primaire d’une ligne dans la table detail, c’est-à-dire le
couple de valeurs (NCOM, NPRO), est autorisée seulement si ces valeurs respectent
les contraintes 1(a), 1(b) et 1(c) vues ci-dessus.
Exemple 14. Dans la base de données client commande, la table commande
i) a pour clé primaire la colonne NCOM,
ii) est la table parent dans la clé étrangère FK1 (voir aussi l’exemple 7), et
iii) est la table enfant dans la clé étrangère FK3 (voir aussi l’exemple 12).
Les conséquences sur la modification de cette table sont les suivantes :
1. La création d’une ligne dans la table commande est autorisée seulement si :
(a) la valeur de la colonne NCOM de cette nouvelle ligne n’existe pas déjà dans
une ligne de la table commande (NCOM est clé primaire) ;
(b) la valeur de la colonne NCLI de cette nouvelle ligne existe dans la colonne
NCLI de la table client (cf. FK3).
2. Si la stratégie de suppression est en mode blocage, alors la suppression d’une ligne
lcomm dans la table commande est autorisée seulement s’il n’existe pas de lignes
dans la table detail qui font référence à cette ligne lcomm (cf. FK1).
3. La modification de la clé primaire d’une ligne dans la table commande, c’est à
dire la valeur de la colonne NCOM, est autorisée seulement si cette valeur respecte
la contrainte 1(a).
Exemple 15. Dans la base de données client commande la table client a pour
clé primaire la colonne NCLI et elle est la table parent dans la clé étrangère FK3. Les
conséquences sur la modification de cette table sont les suivantes :
1. La création d’une ligne dans la table client est autorisée seulement si la valeur
de la colonne NCLI de cette nouvelle ligne n’existe pas déjà dans une ligne de la
table.
2. Si la stratégie de suppression est en mode blocage, alors la suppression d’une ligne
lcli dans la table client est autorisée seulement s’il n’existe pas de lignes dans la
table commande qui font référence à cette ligne lcli (cf. FK3).
3. La modification de la clé primaire d’une ligne dans la table client, c’est à dire la
valeur de la colonne NCLI, est autorisée seulement si cette valeur n’existe pas déjà
dans une ligne de la table client.
Exemple 16. Dans la base de données client commande, si la stratégie de suppres-
sion est en mode cascade pour les clés étrangères FK3 et FK1, alors la suppression d’une
ligne dans la table client sera accompagnée de la suppression de toutes les lignes de
la table commande qui y font référence (c.à.d. toutes les commandes de ce client), ainsi
que la suppression de toutes les lignes concernées de la table detail (c.à.d. toutes les
lignes de toutes les commandes de ce client).
18
1.7 Schéma et contenu d’une base de donnée
Une base de données est composée de deux parties distinctes : son schéma et son
contenu.
Le schéma d’une base de données spécifie la liste des tables et pour chacune son
nom, la liste de ses colonnes, sa clé primaire et, éventuellement, sa/ses clé(s) étrangère(s).
Pour chaque colonne il faut spécifier son nom, son type et préciser si c’est une colonne
obligatoire ou non.
Le contenu d’une base de données à un instant t est l’ensemble des lignes de toutes
les tables.
Le contenu d’une base de données réelle est généralement volumineux (plusieurs
millions de lignes) et est susceptible d’évoluer constamment. En revanche, le schéma
comporte un nombre limité d’éléments (quelques tables à quelques milliers de tables en
général) présentant une relative stabilité dans le temps : on ne modifie la structure d’une
base de données que lorsque la structure du domaine d’application à représenter évolue.
Il existe plusieurs conventions graphiques de représentation d’un schéma de BD,
parmi lesquelles les plus utilisées sont les suivantes :
1. Une table est représentée soit par un rectangle contenant le nom de la table et celui
de chaque colonne, en liste horizontale (à la mode “EXCEL”), soit par une boı̂te
dont le premier compartiment indique le nom de la table et ensuite les noms de ses
colonnes en liste verticale.
2. La clé primaire est soit soulignée d’un trait continu, soit elle est indiquée en gras,
soit elle est spécifiée par la clause “id :”.
3. Une clé étrangère est soit soulignée d’un trait pointillé, soit spécifiée par la clause
“ref :”.
4. Une contrainte référentielle est représentée par une flèche qui part du nom de la
colonne qui est une clé étrangère et qui pointe vers la clé primaire référencée dans
la table cible.
19
Exemple 17. La figure 1.6 donne trois représentations graphiques du schéma de la base
de données client commande, décrite dans le §1.1. Nous utiliserons dans ce cours la
représentation graphique produite par MySQL, donnée dans la figure 1.1 et reprise dans
la figure 1.7.
20
1.8 Le langage SQL (Structured Query Language)
Les SGBD proposent un langage de requête dénommé SQL (Structured Query Lan-
guage). Présenté pour la première fois en 1973, ce langage a rapidement été adopté comme
standard potentiel et pris en charge par les organismes de normalisation ANSI et ISO qui
ont publié 3 normes : SQL-89, SQL-92 (dénommée aussi SQL2) et SQL : 1999 (SQL3).
Malheureusement, les éditeurs de SGBD ne respectent pas intégralement ces normes :
ils ne reprennent qu’un sous-ensemble de spécifications, modifient la syntaxe, voire l’in-
terprétation des concepts retenus, et ajoutent leur propres fonctions. Dans ce cours, nous
utilisons la syntaxe SQL2 dans sa version MySQL.
Le langage de bases de données SQL est composé de deux sous-langages :
1. SQL DDL (Data Definition Language) pour la définition et la modification des
structures (table, colonne, contrainte). Les instructions sont : CREATE, ALTER, et
DROP ;
2. SQL DML (Data Manipulation Language) pour l’extraction et la modification des
données. Les instructions sont : SELECT, INSERT, DELETE, et UPDATE.
Une instruction SQL constitue une requête (en anglais query), c’est-à-dire la descrip-
tion d’une opération que le SGBD doit exécuter.
Une requête SQL peut être écrite en utilisant le clavier, générée à partir d’une interface
graphique, ou importée à partir d’un fichier.
Le résultat de l’exécution d’une requête peut apparaı̂tre à l’écran avec des éventuels
messages d’erreurs. Pour la première partie, du cours nous utilisons cette formulation
interactive des requêtes SQL.
Une requête peut également être envoyée par un programme (écrit en C, PHP ou Java,
par exemple) au SGBD. Dans ce cas, le résultat de la requête est rangé par le SGBD,
ligne par ligne, dans les variables du programme. Dans la deuxième partie du cours, nous
utiliserons le langage PHP pour envoyer des requêtes au SGBD et exploiter ensuite leurs
résultats dans des programmes.
21
1.9 Les systèmes de gestion de bases de données (SGBD)
La gestion d’une base de données est assurée par des logiciels spécialisés : les SGBD.
Les fonctions d’un SGBD sont les suivantes :
1. Organisation des données : le SGBD organise les données en tables stockées sur
disque et il crée les mécanismes garantissant un accès rapide aux données.
2. Gestion des données : le SGBD garantit l’évolution cohérente des données et il
vérifie que les contraintes (unicité, référence entre tables, etc.) sont respectées.
3. Accès aux données : le SGBD permet l’accès aux données à la fois par un utilisa-
teur occasionnel et par des programmes de traitement de données.
4. Gestion des accès concurrents : le SGBD permet l’accès simultané aux données
par des centaines voire des milliers d’utilisateurs. Il contrôle rigoureusement les
opérations simultanées sur les mêmes données.
5. Contrôle des accès : le SGBD garantit que seuls les utilisateurs autorisés peuvent
accéder aux données et les modifier.
Les différents SGBD sur le marché se différencient par le périmètre d’utilisation des
bases de données. Le périmètre influence le nombre d’utilisateurs simultanés, la taille
des bases de données et la puissance de calcul nécessaire. Certains SGBD, utilisés dans
les entreprises, supportent de très grandes bases de données et nécessitent des ordinateurs
puissants et très couteux. D’autres SGBD fonctionnent sur des ordinateurs personnels bon
marché, avec des limites quant à la taille des bases de données et la puissance de calcul.
Le marché des SGBD 9 se répartit entre
1. des SGBD commerciaux (payants) :
– Oracle Database 10 ,
– DB2 Database Software 11 d’IBM,
– SQL Server 12 de Microsoft,
– Access 13 , édité par Microsoft, qui fait partie de la suite bureautique MS Office
Pro, etc.
2. des SGBD Open Source (ou libre) :
– MySQL 14 ,
– PostgreSQL 15 , etc.
Nous utiliserons dans ce cours le SGBD MySQL 16 , un logiciel SGBD libre.
9. Pour en savoir plus sur les parts de marché consultez, par exemple, http://www.mysql.com/
why-mysql/marketshare/
10. http://www.oracle.com/fr/products/database/index.html
11. http://www-01.ibm.com/software/data/db2/
12. http://www.microsoft.com/france/serveur-cloud/sql/
13. http://office.microsoft.com/fr-fr/access/
14. http://www.mysql.fr/
15. http://www.postgresql.org/
16. http://www.mysql.fr/
22
Chapitre 2
Dans la suite nous présentons une syntaxe simplifiée des instructions du langage SQL,
adaptée aux objectifs du cours. Le langage SQL est le standard utilisé pour la définition
du schéma d’une base de donnée et pour la manipulation des données.
23
CREATE SCHEMA nom_schema
où nom schema est remplacé par le nom de la nouvelle base de données.
Sous MySQL la syntaxe pour créer le schéma d’une base de données est la suivante :
CREATE DATABASE nom_schema
où nom schema est remplacé par le nom de la nouvelle base de données.
Exemple 18. Pour créer en MySQL la base de données client commande il faut
écrire :
1 CREATE DATABASE client_commande
24
– date : date (année, mois et jour) ;
– time : instant (heure, minute, seconde, millième de seconde) ;
La norme SQL 3 (1999) a rajouté 3 types fondamentaux : booléen, CLOB et BLOB.
– boolean : type de données valant vrai ou faux ;
– les Binary Large Objects (BLOB) : sorte de contenants génériques pouvant accueillir
des chaı̂nes de bits de longueur non-bornée telles que des images, séquences vidéo,
séquences sonores ou musicales. Les Character Large Objects (CLOB) sont simi-
laires, mais considérés comme étant formés de caractères ; ce type est utilisé pour
stocker des textes de taille importante.
Exemple 19. Pour créer dans la base de données client commande la table client,
la commande MySQL est la suivante :
1 CREATE TABLE client
2 ( NCLI char(8) NOT NULL,
3 NOM char(18) NOT NULL,
4 ADRESSE char(24) NOT NULL,
5 LOCALITE char(20) NOT NULL,
6 CAT char(2) DEFAULT NULL,
7 COMPTE decimal(9,2) NOT NULL,
8 PRIMARY KEY (NCLI) )
DROP nom_table
Attention : Toutes les données ainsi que la structure de la table seront perdues à la suite
de cette opération !
25
• Ajout d’une colonne. Si la colonne est facultative, l’opération s’effectue sans con-
trainte. Si elle est obligatoire, alors la table doit être vide ou la colonne doit être
accompagnée d’une valeur par défaut.
• Suppression d’une colonne. Cette colonne ne peut pas intervenir dans la compo-
sition d’une clé primaire ou d’une clé étrangère. Si nécessaire, ces clés doivent
d’abord être modifiées ou supprimés.
• Ajout d’une clé primaire. Si la table n’est pas vide, les lignes doivent respecter la
contrainte d’unicité.
• Suppression d’une clé primaire. Cette suppression n’est pas soumise à des condi-
tions sur les données. Cependant, cette clé primaire ne doit pas être référencée par
une clé étrangère.
• Ajout d’une clé étrangère. Si la table n’est pas vide, les lignes doivent respecter la
contrainte référentielle.
26
colonnes. Sa forme générale est :
SELECT liste_colonnes
FROM nom_table
affiche pour toutes les lignes de la table client seulement les valeurs des trois colonnes
NCLI, NOM, et LOCALITE.
Pour obtenir les valeurs de toutes les colonnes, la requête est :
1 SELECT *
2 FROM client
SELECT liste_colonnes
FROM nom_table
WHERE condition
n’affiche que les lignes de la table client dont la valeur de la colonne LOCALITE est
égale à la chaı̂ne de caractères ’Toulouse’. De plus, seules les valeurs des colonnes NCLI
et NOM seront affichées.
Conditions de sélection
Dans la clause where, pour construire la condition de sélection on dispose :
– des noms des colonnes de la table nom table ;
– des opérateurs du §1.4.2 ;
– des constantes :
• numériques et décimales, comme par exemple : 123, -0.003, 7.12 ;
• chaı̂nes de caractères : valeurs entre ’ et ’ (exemple : ’Jean Mercier’) ;
la présence du caractère ’ dans la chaı̂ne se représente par son redoublement
(exemple : ’rue de l’’Eté’) ;
• dates : ’2009-02-14’ (standard SQL 2) ; autres variantes selon les SGBD :
’14-02-2009’, ’14/02/2009’.
27
Pour les expressions composées 2 l’usage des paranthèses permet de former des condi-
tions plus élaborées, comme par exemple :
1 SELECT NCLI, NOM
2 FROM client
3 WHERE COMPTE >0 AND (CAT = ’ C1 ’ OR LOCALITE = ’ P a r i s ’)
Dans les deux dernières conditions, le signe ’ ’ désigne un caractère quelconque et ’%’
désigne toute suite de caractères, éventuellement vide.
le résultat de la requête sera un tableau des montants TVA des articles en stock.
MySQL offre plusieurs fonctions permettant de dériver des valeurs à partir des valeurs des
colonnes des lignes extraites. Pour les chaı̂nes de caractères on peut utiliser, par exemple,
les fonctions : lower, upper, substring, trim 3 .
2. voir sur http://dev.mysql.com/doc/refman/5.0/fr/operator-precedence.
html, la priorité des opérateurs en MySQL
3. voir http://dev.mysql.com/doc/refman/5.0/en/string-functions.html
28
2.3.4 Ordre des lignes d’un résultat (clause ORDER BY)
Il est possible d’imposer un ordre de présentation spécifique lors de l’affichage des
lignes du résultat d’une requête en utilisant la clause order by :
SELECT liste_colonnes
FROM nom_table
WHERE condition
ORDER BY liste_colonnes ASC|DESC
Par défault, le classement se fait par ordre ascendant des valeurs. On peut également
spécifier explicitement un ordre ascendant (ASC) ou descendant (DESC).
Exemple 22. Pour la base de données client commande les lignes résultant de la
requête
1 SELECT *
2 FROM client
3 WHERE CAT is not null
4 ORDER BY LOCALITE
vont apparaı̂tre classées par ordre alphabétique croissant sur le noms des localités.
On peut indiquer plusieurs critères de tri :
1 SELECT *
2 FROM client
3 ORDER BY LOCALITE, CAT
Les clients vont apparaı̂tre classés par localité, puis dans chaque localité, classés par
catégorie.
L’ordre des composants du critère de tri est important. La requête
1 SELECT *
2 FROM client
3 ORDER BY CAT, LOCALITE
affiche les clients classés par catégorie, puis dans chaque catégorie, classés par localité.
29
Exemple 23. Pour la base de données client commande la requête
1 SELECT count(*)
2 FROM client
affiche bien la date de la dernière commande enregistrée dans la table commande, mais
la requête
1 SELECT MAX(DATECOM), NCOM
2 FROM commande
est fausse car elle ne permet pas de récupérer le numéro de cette dernière commande ! La
solution est d’utiliser une sous-requête (voir aussi le §2.3.7) :
1 SELECT NCOM, DATECOM
2 FROM commande
3 WHERE DATECOM in (SELECT MAX(DATECOM)
4 FROM commande)
30
i) la colonne col FK E est la clé étrangère de la table nom table E (table enfant),
ii) la colonne col PK P est la clé primaire de la table nom table P (table parent),
et
iii) la table nom table P est la table parent référencée dans la table nom table E
par la clé étrangère col FK E.
Dans la clause WHERE, en plus de la condition de jointure (obligatoire !), on peut ajouter
d’autres conditions de sélection des valeurs dans la partie condition.
affiche pour chaque commande de la table commande, le nom et la ville du client qui a
passé cette commande (voir la figure 2.1).
Les valeurs des colonnes NCOM et DATECOM sont extraites de la table commande
(table enfant) tandis que les valeurs des colonnes NOM et LOCALITE sont extraites de la
table client (table parent). La colonne commande.NCLI est une clé étrangère 4 de la
table commande et fait référence à la clé primaire client.NCLI de la table client.
Remarque 1 : Si les deux tables ont des colonnes qui ont le même nom, il faut le-
ver l’ambiguı̈té et préciser à quelle table appartient la colonne, en utilisant la syntaxe
suivante :
nom_table.nom_colonne
Remarque 2 : L’ordre des noms des tables dans la clause FROM ainsi que l’ordre des
conditions dans la clause WHERE n’a pas d’importance. La requête
1 SELECT NCOM, DATECOM, NOM, LOCALITE
2 FROM client, commande
3 WHERE client.NCLI = commande.NCLI
31
1 SELECT NCOM, DATECOM, NOM, LOCALITE
2 FROM client, commande
3 WHERE commande.NCLI = client.NCLI
Le résultat d’une jointure entre deux tables est obtenu comme suit :
1. On construit une table (fictive) en couplant chaque ligne de la première table avec
chaque ligne de la seconde, sans prendre en compte la clause where. Si on lance la
requête de l’exemple 24 sur la base de données client commande contenant les
lignes données dans la figure 1.2, page 9, alors cette table fictive contient 9 colonnes
(3 colonnes de la table commande, plus 6 colonnes de la table client), et 112
lignes (112 = 7 x 16 : 7 lignes de la table commande, multiplié par 16 lignes de la
table client).
2. On sélectionne, parmi les lignes ainsi obtenues, celles qui vérifient la condition de
jointure. Pour l’exemple 24 on garde 7 lignes sur les 112.
3. On ne retient alors que les colonnes demandées. Quatre colonnes seront affichées
pour l’exemple 24.
SELECT liste_colonnes
FROM nom_table_E, nom_table_P, nom_table_3
WHERE col_FK_E = col_PK_P
AND col_FK_E2 = col_PK_P2
AND condition
affiche pour chaque client et pour chaque commande qu’il a passé le numéro de produit
et la quantité commandé.
Pour avoir aussi le libellé du produit il faut faire une requête avec la jointure des
quatre tables en imposant trois conditions de jointure
1 SELECT client.NOM, commande.NCOM, commande.DATECOM, detail.NPRO,
2 detail.QCOM, produit.LIBELLE
3 FROM client, commande, detail, produit
4 WHERE client.NCLI = commande.NCLI
5 AND detail.NCOM = commande.NCOM
6 AND detail.NPRO = produit.NPRO
32
Attention ! Une requête sans condition de jointure porte le nom de produit cartésien :
chaque ligne de la première table est couplée avec chaque ligne de la seconde table.
Si dans la requête de l’exemple 24 on oublie d’imposer la condition de jointure, alors la
requête
1 SELECT NCOM, DATECOM, NOM, LOCALITE
2 FROM commande, client
donne les identifiants des clients qui habitent à Namur. Elle est utilisée comme sous-
requête dans la requête
1 SELECT NCOM, DATECOM
2 FROM commande
3 WHERE NCLI in (SELECT NCLI
4 FROM client
5 WHERE LOCALITE = ’ Namur ’)
affiche le nom et le compte du client qui a la plus grande valeur dans son compte.
Une sous-requête peut elle-même contenir une sous-requête.
Exemple 28. Pour la base de données client commande, la requête
1 SELECT NPRO
2 FROM detail
3 WHERE NCOM in (SELECT NCOM
4 FROM commande
5 WHERE NCLI in (SELECT NCLI
6 FROM client
7 WHERE LOCALITE = ’ Namur ’))
33
donne les références des produits des commandes des clients qui habitent à Namur.
Si la sous-requête renvoie une seule ligne, il est permis d’utiliser les opérateurs de
comparaison classiques ; par exemple :
1 SELECT *
2 FROM client
3 WHERE COMPTE > (SELECT COMPTE
4 FROM client
5 WHERE NCLI = ’ C400 ’)
Attention : Les structures de select emboı̂tés qui utilisent des conditions de non-
association (not in) ne peuvent pas s’exprimer par une jointure !
34
Exemple 31. La requête
1 SELECT NCOM, DATECOM, NCLI
2 FROM commande
3 WHERE NCOM not in (SELECT NCOM
4 FROM detail
5 WHERE NPRO = ’ PA60 ’)
désigne les commandes qui ne portent pas sur le produit PA60. Cette requête n’est pas
équivalente à la requête
1 SELECT distinct commande.NCOM, DATECOM, NCLI
2 FROM commande, detail
3 WHERE commande.NCOM = detail.NCOM
4 AND NPRO <> ’ PA60 ’
qui désigne les commandes qui portent au moins sur un produit différent de PA60 (mais
qui par ailleurs peuvent également porter sur le produit PA60).
L’ordre des valeurs est le même que celui des colonnes. Toute colonne non spécifiée
dans la liste des colonnes prend la valeur NULL ou la valeur par défaut si celle-ci a été
déclarée comme propriété de la colonne. Toute colonne obligatoire (not null) doit
recevoir une valeur, sauf si on lui assigne une valeur par défaut lors de sa déclaration.
Chaque valeur peut être exprimée sous la forme d’une constante, ou plus généralement
de toute expression dont l’évaluation donne une valeur de même type que celui de la
colonne.
Dans tous les cas, les données insérées doivent respecter les contraintes d’intégrité
(unicité, intégrité référentielle, colonnes obligatoires) attachées à la table dans laquelle
les nouvelles lignes sont insérées, cf. §1.6.
35
où le format de la condition de la clause where est le même que celui de l’instruction
select du §2.3.3.
Après l’opération, la base de données doit être dans un état qui respecte toutes les
contraintes d’intégrité (unicité, intégrité référentielle, colonnes obligatoires) auxquelles
elle est soumise et, en particulier, les contraintes référentielles.
UPDATE nom_table
SET nom_colonne = nouvelle_valeur,
...
nom_colonne = nouvelle_valeur,
WHERE condition
La modification sera effectuée sur toutes les lignes qui vérifient la condition de sélection.
Les nouvelles valeurs peuvent être obtenues par une expression arithmétique.
36
Chapitre 3
Pour réaliser les exercices proposés dans les séances de travaux dirigés, il faut :
1. organiser son répertoire de travail selon la structure donnée dans le paragraphe 3.2 ;
2. disposer d’un éditeur de texte pour enregistrer les solutions : Notepad++ 1 (voir le
paragraphe 3.3) ;
3. disposer d’un Système de Gestion de Bases de Données (SGBD), comme MySQL 2
(voir le paragraphe 3.4).
3.1 Pré-requis
Savoir utiliser un éditeur de texte basique (voir le paragraphe 3.3).
Savoir utiliser le poste de travail (structure arborescente des répertoires, compres-
sion/décompression de fichiers, taper au clavier). Ressource en ligne pour l’autoforma-
tion : http://www.agroparistech.fr/mmip/mc/agro/poste.html.
Savoir utiliser un navigateur pour Internet. Ressource en ligne pour l’autoformation :
http://www.agroparistech.fr/mmip/mc/agro/firefox.html.
Savoir utiliser la messagerie électronique. Ressource en ligne pour l’autoformation :
http://www.agroparistech.fr/mmip/mc/agro/messag.html.
Pas de pré-requis en bases de données.
37
N: \www
BD
TD
Exemples
de telle sorte que : tous les fichiers concernant le cours de Système d’information seront
dans un sous répertoire www ; tous les fichiers concernant la première partie sur les bases
de données seront dans un sous répertoire www\BD ; tous les fichiers concernant les exer-
cices des TDs seront dans un sous répertoire www\BD\TD, etc.
Pour créer cette structure de répertoires, il faut :
1. télécharger l’archive archive BD.zip qui se trouve sur le site Web du cours
http://www.agroparistech.fr/Systeme-d-Information.html
2. extraire tous les répertoires et fichiers de cette archive dans votre répertoire N: \
38
3.4 MySQL et phpMyAdmin
MySQL 6 est un Système de Gestion de Bases de Données (SGBD) qui utilise le
langage SQL. MySQL est un système libre (open source) qui fonctionne sur plus de 20
plateformes incluant Linux, Windows, Mac OS, etc.
phpMyAdmin est un logiciel gratuit, écrit en PHP et intégré à EasyPHP 7 , utilisé pour
administrer une base de données MySQL à distance via un navigateur Web. Les opérations
MySQL les plus utilisées (gestion de bases de données, tables, champs, relations, etc.)
sont disponibles à travers une interface utilisateur ; des commandes SQL peuvent aussi
être exécutées.
39
Exporter une base de données
1. Pour exporter toute une base de données (toutes les tables) il faut se positionner
dans l’onglet “Base de données” et ensuite cocher la base de données à exporter ;
2. Dans le menu horizontal de phpMyAdmin il faut choisir l’onglet “Exporter”.
3. Exécuter.
4. Enregistrer le fichier de commandes SQL généré.
40
Chapitre 4
Pour effectuer ces exercices, vous devez avoir lu, avant de venir en TD, le chapitre 1
(pages 7 à 23), ainsi que les paragraphes de 2.3.1 à 2.3.4 (pages 26 à 29).
Questions
En utilisant pour chaque table l’onglet ’Afficher’ (ou ’Browse’) de l’interface de MySQL
sous phpMyAdmin, et sans faire de requêtes en SQL, répondez aux questions suivantes :
41
Question
En utilisant pour chaque table l’onglet ’Structure’ de l’interface de MySQL sous php-
MyAdmin, retrouvez pour chacune des colonnes ADRESSE, DATECOM, QSTOCK,
COMPTE, NCOM et NPRO quel est son type et précisez dans quelle table elle se trouve.
champs table type
ADRESSE
DATECOM
QSTOCK
COMPTE
NCOM
NPRO
Requête 1.1
1 SELECT *
2 FROM produit
3 WHERE LIBELLE LIKE ’%ACIER%’
4 ORDER BY PRIX
42
Requête 1.2
Requête 1.3
Requête 1.4
Q iii) En supposant maintenant que le contenu des tables n’est pas connu, exprimez le
résultat de ces requêtes “en français” (voir les exemples 20 et 21, page 27).
Question 1.1
Dans l’expression
COMPTE > 0 OR CAT = ’C1’ AND LOCALITE = ’Paris’
dans quel ordre sont évalués les opérateurs logiques OR et AND ?
Questions
Q.1.2. Affichez la liste des clients dont le compte est négatif et qui n’habitent pas à Namur.
Q.1.3. Affichez la liste des produits disponibles (nom, prix, quantité) par ordre alphabétique.
43
Attention à la syntaxe MySQL : Il faut faire la différence entre ’ (le délimiteur pour
les chaı̂nes de caractères) et ‘ (le délimiteur pour les noms des tables, colonnes, etc.).
Exemples de chaı̂nes de caractères : ’2009-01-01’, ’C400’, ’Paris’.
Exemples de noms de tables : ‘client‘, ‘client commande‘.‘produit‘,
‘parcelle‘, ‘gie agricole‘.‘agriculteur‘.
Exemples de noms de colonnes : ‘LIBELLE‘, ‘QSTOCK‘, ‘client‘.‘NOM‘,
‘Emp Nom‘, ‘intervention‘.‘Int Debut‘.
Le délimiteur ’ pour les chaı̂nes de caractères est obligatoire !
Le délimiteur ‘ pour les noms des tables et des champs peut être omis s’il n’y a pas
des espaces dans ces noms. Pour faciliter la lecture, ce délimiteur n’apparaı̂t pas dans ce
document.
Questions
Q.1.4. Affichez en ordre alphabétique la liste des localités où habitent les clients.
Q.1.5. Affichez les commandes passées pendant les dix derniers jours de l’année 2008.
Q.1.6. Affichez le stock de chaque produit de type sapin.
Q.1.7. Affichez les produits dont le prix est inférieur à 200 et le stock est supérieur à 150.
Q.1.8. Affichez le numéro, le nom et la localité des clients de catégorie B1 n’habitant pas
à Paris.
Questions
44
4.4 Pour terminer cet exercice
– Vérifiez que vous avez bien enregistré vos requêtes dans le fichier exo 1 req
simples.sql.
– Mettez à jour la date (ligne 4) et l’auteur (ligne 5) du fichier.
– Enregistrez ce fichier dans votre répertoire www\BD\TD.
Réponse
4.5.2 Q.R.2
On suppose que la base de données client commande (cf. figure 1.1) est sélection-
née. Expliquez ce que font les requêtes suivantes et trouvez les réponses données par
MySQL sur la version courante de la BD (cf. figure 1.2) :
1 SELECT LIBELLE, PRIX, QSTOCK FROM produit
2 WHERE PRIX < 100 AND QSTOCK > 0
Réponse
4.5.3 Q.R.3
Quelle est la syntaxe générale d’une requête simple d’extraction ?
Réponse
45
Chapitre 5
Pour effectuer ces exercices, vous devez avoir lu, avant de venir en TD, les para-
graphes de 2.3.5 à 2.3.8 (pages de 29 à 34).
Requête 2.1
46
Requête 2.2
Requête 2.3
Q iii) En supposant maintenant que le contenu des tables n’est pas connu, exprimez le
résultat de ces requêtes “en français” (voir les exemples 20 et 21, page 27).
Questions
Q.2.1. Affichez tous les produits commandés (nom, prix, quantité) par le client no ’B512’.
Q.2.2. Affichez tous les produits (nom, prix, quantité) commandés par le client ’FERARD’,
par ordre croissant de no de commande puis par ordre alphabétique sur le nom de
produit.
Q.2.3. Quels clients ont commandé en 2009 ?
Q.2.4. Quels sont les noms des produits qui ont été commandés les dix derniers jours de
l’année 2008 ?
Q.2.5. Affichez tous les produits commandés (nom, prix, quantité) par le client ’MER-
CIER’.
Q.2.6. Quels sont les numéros des produits qui ont été commandés à la fois le 23/12/2008
et le 2/01/2009 ?
Q.2.7. Quels sont les numéros des produits qui ont été commandés le 2/01/2009, mais pas
le 23/12/2008 ? Et quels sont les noms de ces produits ?
47
5.2 Exercice 2b : requêtes sur la BD gie agricole
On suppose que phpMyAdmin/MySQL est lancé et que la BD gie agricole est
sélectionnée.
Après avoir identifié les tables à utiliser et les conditions de jointure nécessaires, utili-
sez l’onglet ’SQL’ pour écrire les requêtes SQL qui répondent aux questions suivantes.
Enregistrez ces requêtes dans le fichier exo 2 req jointure.sql.
Questions
Q.2.8. Affichez la liste de toutes les parcelles avec le nom de leurs propriétaires.
Q.2.9. Afficher pour chaque intervention le nom de la parcelle concernée.
Q.2.10. Afficher pour chaque intervention le nom de la parcelle concernée et le nom de
l’employé.
Requête 3.1
48
Requête 3.2
Requête 3.3
Requête 3.4
Q iii) En supposant maintenant que le contenu des tables n’est pas connu, exprimez le
résultat de ces requêtes “en français” (voir les exemples 20 et 21, page 27).
Questions
Q.3.1 Calculez le montant commandé des produits de type sapin.
Q.3.2 Calculez le nombre de produits (références) commandés de type sapin.
Q.3.3 Calculez le nombre d’unités de produits commandés de type sapin.
Q.3.4 Quel est le produit dont la quantité en stock est la plus faible ?
49
Questions
Q.3.5 Calculez le nombre de proprietaires de parcelles.
Q.3.6 Calculez la superficies totales des parcelles.
Q.3.7 Affichez le nom de la plus grande parcelle.
Réponse
5.4.2 Q.R.5
On suppose que la base de données client commande (cf. figure 1.1) est sélection-
née. Quelle requête parmi celles données ci-dessous calcule le montant total TTC des
produits en stock ?
1 SELECT sum(QSTOCK*PRIX) FROM produit
2 SELECT count(QSTOCK) FROM produit
3 SELECT count(PRIX) FROM produit
4 SELECT sum(PRIX*1.196) FROM produit
5 SELECT max(QSTOCK*PRIX*1.196) FROM produit
Réponse
50
5.4.3 Q.R.6
Expliquez ce que font les autres requêtes du §5.4.2 et trouvez les réponses données
par MySQL sur la version courante de la BD (cf. figure 1.2).
Réponse
5.4.4 Q.R.7
Quelle est la syntaxe générale d’une requête de jointure sur 2 tables ?
Réponse
51
Chapitre 6
Pour effectuer ces exercices, vous devez avoir lu, avant de venir en TD, le §1.5.1, le
§1.6, ainsi que les paragraphes de 2.3.9 à 2.2.4 (pages de 35 à 25).
Requête 4.1
1 UPDATE produit
2 SET QSTOCK = QSTOCK - 10
3 WHERE NPRO = ’ PH222 ’
52
Requête 4.2
1 UPDATE client
2 SET CAT = ’A1 ’
3 WHERE CAT IS NULL
Requête 4.3
Requête 4.4
Requête 4.5
Q iii) En supposant maintenant que le contenu des tables n’est pas connu, exprimez le
résultat de ces requêtes “en français” (voir les exemples 20 et 21, page 27).
Questions
Q.4.1. Ajoutez un nouveau client, nommé ’FRANCK’, qui habite à Lille, au 14 avenue du
Reclus (son numéro de client est ’W100’ et son compte est 0.0).
Q.4.2. Enregistrez une première commande du client ’FRANCK’ : 10 unités du produit
’PL. HETRE 200x20x2’ (le numéro de sa commande est 30189).
Q.4.3. Mettez à jour le stock du produit ’PL. HETRE 200x20x2’.
Q.4.4. Mettez à jour toutes les tables concernées pour enregistrer l’opération suivante : Le
client ’FRANCK’ achète aussi 25 unités du produit ’POINTE ACIER 60 (1K)’ sur
la même commande 30189.
Q.4.5. Quelle est la liste des mises à jour à faire pour enregistrer une nouvelle commande
pour un client ? Complétez le tableau ci-dessous.
53
type de maj table colonne(s)
INSERT/UPDATE/DELETE
Questions
Q.4.6. Mettez à jour le compte du client ’FRANCK’ : sa commande est de 2300 et il a
payé 2500.
Q.4.7. Ajoutez un nouveau produit, ’PL CHENE 200x20x2’, dont le stock initial est de
500 unités et le prix à l’unité est 120.
Q.4.8. Corrigez la quantité commandée du produit ’PA60’ dans la commande ’30185’ :
elle est de 10 unités.
Q.4.9. Le client ’FERARD’ ajoute à sa commande du 2/01/2009 cinq unités du produit
’PL. HETRE 200x20x2’.
Question
Est-ce que la Requête 4.5 peut être exécutée avant la Requête 4.4 (cf §6.1.1) ?
1 DELETE FROM commande -- Requête 4.5
2 WHERE NCOM = ’ 30188 ’;
3 DELETE FROM detail -- Requête 4.4
4 WHERE NCOM = ’ 30188 ’
Si vous avez exécuté les requêtes 4.4 et 4.5 du §6.1.1, avant de faire ce test il faut
compléter la BD avec les requêtes d’insertion suivantes :
1 INSERT INTO ‘commande‘ (‘NCOM‘, ‘NCLI‘, ‘DATECOM‘) VALUES
2 ( ’ 30188 ’, ’ B512 ’, ’ 2009−01−03 ’);
3 INSERT INTO ‘detail‘ (‘NCOM‘, ‘NPRO‘, ‘QCOM‘) VALUES
4 ( ’ 30188 ’, ’ CS464 ’, 180),
5 ( ’ 30188 ’, ’ PA45 ’, 22),
6 ( ’ 30188 ’, ’ PA60 ’, 70),
7 ( ’ 30188 ’, ’ PH222 ’, 92);
54
6.2 Exercice 5 : Modification et contraintes d’intégrité
On suppose que phpMyAdmin/MySQL est lancé, que la BD client commande (cf.
figure 1.1) est sélectionnée et que sa version courante est celle de la figure 1.2.
6.2.1 Question 5a
En utilisant pour chaque table l’onglet ’Structure’ de l’interface de MySQL sous php-
MyAdmin, retrouvez sa clé primaire :
clé primaire
table nom de la colonne type de la colonne
client
commande
detail
produit
6.2.2 Questions 5b
Pour chaque question donnée ci-dessous trouvez la réponse en la justifiant :
Q.5.1 Est-il possible d’ajouter un client ayant le même nom qu’un client déjà présent
dans la base de données ?
Q.5.2 Est-il possible d’ajouter dans la base de données une commande ayant pour numéro
de commande ’30179’ (une commande existante), pour numéro de client ’C400’ (un client
existant) et dont la date de commande le 04/01/2012 (une nouvelle date) ?
Q.5.4 Est-il possible d’ajouter dans la base de données un produit dont le numéro est
’PH222’ et le libellé ’Planche’ ?
Q.5.5 Quelle est la liste des mises à jour à faire pour supprimer la commande ’30179’ ?
55
Q.5.8 Est-il possible de supprimer n’importe quel enregistrement de la table produit ?
Q.5.11 Quelles opérations sont à faire si on veut ajouter une date de livraison à chaque
commande ?
6.2.3 Question 5c
En utilisant pour chaque table l’onglet ’Structure’ et l’onglet ’Concepteur’ 3 de l’interface
de MySQL sous phpMyAdmin, retrouvez sa/ses clé(s) étrangère(s) ; ensuite retrouvez à
quelle colonne elle fait référence en utilisant le lien ’Relation view’ (’vue relationnelle’) :
clé(s) étrangère(s)
table nom de la colonne table parent colonne référencée
client
commande
detail
produit
6.2.4 Question 5d
Quelles sont les clés primaires/étrangères des tables de la BD gie agricole ?
3. L’onglet ’Concepteur’ est disponible seulement quand une base de données est sélectionnée. Il n’est
pas disponible quand une table d’une base de donnée est sélectionnée.
56
6.3 Questions de révision
6.3.1 Q.R.8
On suppose que la base de données gie agricole (cf. figure 1.3) est sélectionnée.
Expliquez ce que fait la requête suivante et trouvez la réponse donnée par MySQL sur la
version courante de la BD (cf. figure 1.4) :
1 DELETE FROM employe
2 WHERE Emp_Prn like ’%H e n r i%’
Réponse
6.3.2 Q.R.9
On suppose que la base de données client commande (cf. figure 1.1) est sélection-
née et que sa version courante n’est pas connue. L’instruction suivante
1 INSERT INTO commande (NCOM, NCLI, DATECOM)
2 VALUES( ’ 600 ’, ’ 600 ’, ’ 2012−01−12 ’)
6.3.3 Q.R.10
Quelle est la syntaxe générale d’une requête d’ajout d’une ligne dans une table ?
Réponse
Quelle est la syntaxe générale d’une requête de suppression d’une ligne dans une
table ?
Réponse
Quelle est la syntaxe générale d’une requête de modification d’une ligne dans une
table ?
Réponse
57
Chapitre 7
58
– la date ;
– le nombre d’heures de navigation du bateau au moment de la révision ;
– les interventions réalisées, sous forme de texte libre.
59
7.5 Exercice 6d : questions
Quelles opérations sont à faire, si on veut intégrer dans la base que :
1. La société achète 3 bateaux de modèle ’luxe’.
2. On veut pouvoir connaı̂tre quel est le drapeau d’un bateau, le no de permis d’un
client, le no de portable d’un technicien.
3. Pour les interventions on dispose d’un catalogue qui donne pour chaque interven-
tion sa description, sa durée et son prix.
4. La société travaille avec 3 autres techniciens et veut savoir, pour chaque interven-
tion, quel est le nom du technicien qui a effectué la réparation.
Est-ce qu’on peut ajouter dans la base de données
1. un bateau ayant le même nom qu’un bateau déjà présent dans la base ?
2. un modèle ayant le même nom qu’un modèle déjà présent dans la base ?
3. une location sur un bateau déjà loué ?
4. une révision sur un bateau loué ?
5. une révision sur un bateau déjà réparé ?
6. deux révisions à la même date, sur deux bateaux différents ?
60
Index
61