Vous êtes sur la page 1sur 12

Classes préparatoires à l’ECAM-PTSI 2

1
Introduction aux bases de données et au langage
SQL

I. Introduction
1. Limitations du tableur
Le responsable d’une bibliothèque souhaite informatiser sa gestion des emprunts. Il utilise pour cela un
tableur et un simple fichier qui ressemble à ceci :
Index Auteur NOM Auteur Prenom Titre Genre Emp. Nom Emp. Prenom Tel Date sortie Date retour
1 Apollinaire Guillaume Lettres à sa marraine lettre ESPITALLIER Christophe 0677021232 02/12/2013 11/02/2014
2 Balzac Honoré Le père Goriot roman MONIN Benjamin 0630641520 11/02/2014 18/03/2014
9 Colette Claudine à Paris roman DJENAB Sebastien 0647072651 02/12/2013 16/01/2014
1 Apollinaire Guillome Lettres à ma marraine lettres DUBOS Come 0699740024 09/04/2014 17/04/2014
2 Balzac Honorée Le père Gorriot essai PASCAL Arsene 0638978142 23/02/2014
12 Cohen Albert Belle du seigneur roman ROBERT Thibaut 0666819561 08/04/2013
5 Beauvoir Simone Le 2ème sexe essais CHAMOUX Alexandre 0692901049 11/04/2014 15/04/2014
3 Baudelaire Charles Les fleurs du mal roman ORTIZ Ludovic 0677021232 18/11/2013
4 Beaumarchais Pierre-Augustin Le barbier de Séville théâtre ORTIZE Ludovic 0677021233 20/02/2014 27/03/2014
7 Chateaubriand François René René, ou les Effets des passions romans MONTAUDOUIN Romain 0677405717 11/12/2013 18/12/2013
8 COHEN ALBERT SOLAL ROMAN DUBOS Come 0699740024 11/04/2013 27/04/2013
10 Baudellaire Charles Du vin et du haschisch roman ROBERT Thibault 0666819561 28/03/2014
13 Collette Claudine à l'école roman FAURE Etienne 0666858913 16/09/2013 04/11/2013

Le fichier est modifié à chaque sortie (ajout d’une nouvelle ligne)/retour (ajout de la date) d’un ouvrage.
Le responsable de la bibliothèque se rend rapidement compte d’un certain nombre de difficultés :
➢ L’orthographe des noms et des prénoms peut être incohérente.
➢ Même chose pour l’écriture des titres et des numéros de téléphone.
➢ Pour une très grosse bibliothèque, le fichier sera rapidement volumineux et demandera beaucoup
de temps de calcul pour faire un tri ou une recherche (une lecture séquentielle complète de tout le
fichier est nécessaire à chaque fois).
➢ On ne peut pas modifier le fichier depuis plusieurs postes.
➢ Les emprunteurs ne peuvent pas accéder à leurs données personnelles depuis leur domicile pour
savoir combien de livres ils doivent rendre par exemple.
➢ Si un emprunteur change de numéro de téléphone, il y aura un grand nombre de modifications à
faire.
➢ Même chose si on veut ajouter l’adresse mail ou l’adresse des emprunteurs.
Dans ce système beaucoup de données sont redondantes : en saisissant plusieurs fois la même donnée, on
augmente les risques d’erreurs et on peut créer des incohérences.
Même dans un contexte relativement simple, la gestion des données devient vite limitée avec un simple
tableur.
Pour éviter tous ces problèmes, il faut utiliser un système de gestion de base de données (SGBD).
2. Notion de base de données
Une base de données est un conteneur informatique permettant de stocker les informations en rapport avec
une activité tout en assurant à tout instant l’intégrité (c’est-à-dire la cohérence, la fiabilité, et la pertinence)
des données qu’elle contient.
Les systèmes de gestion de bases de données actuels permettent l’utilisation de quantités considérables de
données dans des bases partagées par de multiples utilisateurs et souvent disponibles en ligne.
Nous allons présenter le modèle relationnel, fondé sur la définition de l’algèbre relationnelle.

2
II. Bases de données relationnelles
1. Structure en tables
Au lieu d’un unique fichier pour gérer la bibliothèque, on crée cinq fichiers, appelés tables, contenant toute
l’information sous la forme suivante :
➢ Une table auteurs, une table genres et une table emprunteurs :

➢ Une table livres :

3
➢ Une table emprunts :

On voit qu’aucune donnée n’a été saisie plusieurs fois ce qui simplifie la saisie/modification et empêche les
incohérences.
Les colonnes d’une table sont appelées attributs (ou champs).
Les lignes sont des n-uplets appelés enregistrements.
Les tables auteurs, genres et emprunteurs ont un attribut correspondant à un numéro d’identification
unique noté id.
Il en est de même pour la table livres mais ses attributs auteur et genre renvoient aux identificateurs des
tables auteurs et genres.
Enfin, la table emprunts met en relation l’identificateur de l’emprunteur avec celui de l’ouvrage emprunté.
La conception de la base de données (détermination des tables et de leurs attributs) est l’étape cruciale dans
la création d’une base de données. Elle ne sera pas abordée cette année. On peut cependant noter que la
règle veut que l’on crée une table distincte pour chaque sujet principal en ne répétant aucune donnée d’une
table à une autre.
2. Modèle relationnel
A chaque attribut est associé un domaine qui correspond au type de données de cet attribut : booléen,
entier, flottant, chaîne de caractère, etc… On note 𝐷𝑜𝑚(𝐴) le domaine d’un attribut 𝐴.
Chaque enregistrement est donc un élément de : 𝐷𝑜𝑚(𝐴1 ) × 𝐷𝑜𝑚(𝐴2 ) × 𝐷𝑜𝑚(𝐴3 ) × …
L’ensemble des enregistrements d’une table est appelé une relation.
Une base de données est ainsi constituée d’un nombre fini de relations : une par table (on peut ainsi assimiler
une table à une relation).
On dit que la relation 𝑟 suit le schéma de relation 𝑅(𝐴1 , 𝐴2 , 𝐴3 , … ).
L’ensemble des schémas de relation s’appelle le schéma de la base de données (c’est lui qui est défini
initialement lors de la phase de conception) et est peu évolutif.

4
Dans la table auteurs décrite ci-dessus, l’attribut id est un entier formaté sur deux caractères (il y a moins
de 100 auteurs répertoriés). Les attributs nom et prenom sont du type chaîne de caractère de taille variable.
La relation correspondante se note : 𝑎𝑢𝑡𝑒𝑢𝑟𝑠(𝑖𝑑, 𝑛𝑜𝑚, 𝑝𝑟𝑒𝑛𝑜𝑚).
Si 𝑡 est le 3ème enregistrement de cette table, on note 𝑡[𝑖𝑑, 𝑛𝑜𝑚] = (3, 𝐵𝑎𝑢𝑑𝑒𝑙𝑎𝑖𝑟𝑒) ou 𝑡[𝑛𝑜𝑚] =
(𝐵𝑎𝑢𝑑𝑒𝑙𝑎𝑖𝑟𝑒).
3. Notion de clé
On appelle super-clé d’une relation 𝑅 un ensemble 𝐾 d’attributs tel que :
∀ (𝑡 , 𝑢) ∈ 𝑅 , 𝑡[𝐾 ] = 𝑢[𝐾] ⇒ 𝑡 = 𝑢
Une clé d’une relation 𝑅 est alors simplement une super-clé de taille minimale (nombre minimal d’attributs).
Chaque enregistrement de chaque table devant être unique, chaque table possède au moins une clé (dans
le pire des cas il faudra considérer tous les attributs de la relation).
Enfin une clé primaire est simplement un choix d’une clé.
Souvent on souligne les attributs correspondants dans la table pour indiquer la clé primaire.
Pour la table emprunts, c’est le triplet (qui, quoi, sortie) qui peut servir de clé primaire.
Indiquer au système une clé primaire pour chaque table permet une indexation des données à l’aide de cette
clé, ce qui renforce considérablement l’efficacité des procédures d’interrogation de la table.
Remarque : On utilise souvent une clé artificielle comme clé primaire. Il s’agit d’un champ qui n’a pas de
rapport avec les données et qui existe uniquement dans le but de servir de clé primaire. C’est le cas de
l’attribut id dans quatre de nos cinq tables.
Considérons la table emprunts : l’attribut quoi fait le lien avec l’attribut id de la table livres. C’est ce qu’on
appelle une clé étrangère. Cela permet d’assurer :
➢ Qu’on ne peut pas insérer une ligne dans la table emprunts avec une valeur de l’attribut quoi qui
n’existe pas dans la table livres.
➢ Qu’on ne peut pas supprimer une ligne de la table livres si au moins une ligne de la table
emprunts a une valeur de l’attribut quoi qui correspond à la ligne à supprimer.
Voici le graphe des clés étrangères pour nos 5 tables :

Ce graphe permet de déterminer l’ordre logique de création des tables : on commencera par créer les tables
d’où ne sort aucune clé étrangère. On pourra alors créer la table livres, et on terminera par la table
emprunts.

5
4. Notions sur les opérateurs de l’algèbre relationnelle
a. Sélection 𝝈
Une formule de sélection 𝐹 est une formule construite à partir des constantes, des attributs, des fonctions
usuelles, des opérateurs de comparaison et des connecteurs logiques.
Par exemple : prenom = "WALT" ET date < "2013-10-10" est une formule de sélection.
Etant donnée une formule de sélection 𝐹, on définit alors pour une relation 𝑅 :
𝜎𝐹 (𝑅) = {𝑡 ∈ 𝑅, 𝑡 satisfait 𝐹}
Cette sélection est constituée des enregistrements de la relation considérée qui satisfont telle ou telle
condition.
b. La projection 𝛑
Il s’agit de récupérer un sous-ensemble des attributs des enregistrements de la relation considérée.
Si 𝑋 est un sous-ensemble d’attributs du schéma d’une relation 𝑅, on a donc :
𝜋𝑋 (𝑅) = {𝑡 [ 𝑋 ] , 𝑡 ∈ 𝑅}
c. La jointure ⋈
L’opérateur de jointure permet de construire une relation à partir de deux relations qui ont une propriété
commune (c’est-à-dire un attribut "commun"). La jointure naturelle de deux relations 𝑅 et 𝑆 consiste à ne
sélectionner dans le produit cartésien de 𝑅 × 𝑆 que les enregistrements tels que les attributs communs à 𝑅
et 𝑆 aient la même valeur. On note la jointure 𝑅 ⋈ S.
Par exemple :
𝑅 𝑆 𝑅⋈𝑆
𝐴 𝐵 𝐵 𝐶 𝐷 𝐴 𝐵 𝐶 𝐷
1 2 2 5 6 1 2 5 6
32 4 4 7 8 32 4 7 8
8 2 9 10 11 32 4 3 10
4 3 10 8 2 5 6

d. L’agrégation 𝜸
Soit 𝑋 un sous-ensemble d’attributs d’une relation 𝑅. On rassemble les enregistrements 𝑡 de 𝑅 qui ont les
mêmes valeurs sur les attributs de 𝑋 : on obtient, pour chaque valeur commune 𝑡[𝑋], un sous-ensemble
d’enregistrements.
Pour chacun de ces sous-ensembles, on calcule (𝑓1 (𝐴1 ), 𝑓2 ( 𝐴2 ), 𝑓3 (𝐴3 ), … ) où les 𝑓𝑘 sont des fonctions à
choisir parmi les fonctions moyenne, dénombrement, maximum, minimum et somme, et où les 𝐴𝑘 sont des
attributs qui figurent ou non dans 𝑋.

III. SGBD et langage SQL


1. SGBD
Un Système de Gestion de Bases de Données (SGBD) est un
ensemble de programmes qui permet à des utilisateurs de créer
et maintenir une base de données. Les activités supportées sont
la définition d’une base de données (spécification des types de
données à stocker), la construction d’une base de données
(stockage des données proprement dites) et la manipulation des
données (principalement ajouter, supprimer, retrouver des
données).
Exemples de SGBD : Oracle, Sybase, Ingres, SQLite, DB2,
Microsoft SQL server, Microsoft Access, MySQL.

6
2. Langage utilisé
Chaque SGBD utilise son propre langage. Ces langages diffèrent par leur orthographe et leur grammaire,
mais gardent la même logique. Ils font partie des langages SQL (Structured Query Language) qui permettent
de traduire les expressions de l’algèbre relationnelle, avec une syntaxe très simple et un jeu réduit de mots
clefs. Nous utiliserons MySQL qui est disponible sous licence gratuite.
3. Principales commandes MYSQL
Pour la suite, utiliser le programme afin
d’ouvrir la base de données « Bibliotheque.db » (File – Open
Database…).

Les différentes commandes, décrites ci-dessous, seront tapées


dans la « Zone de requêtes » et seront exécutées soit en utilisant
la touche F9 soit en suivant le menu « Execute ».

On observera alors le résultat de la requête dans la « Zone de


résultats ».
Il est important de bien tester toutes les requêtes ci-dessous et d’en conserver des traces en faisant des
copies d’écran que vous pourrez annoter et commenter.

a. Projection : SELECT… FROM…


Cette commande permet l’opération de projection, c’est-à-dire l’obtention d’une sous table en ne gardant
que certains attributs. Sa syntaxe générale est :
SELECT attribut1, attribut2,… FROM table

Exemple : Afficher le nom et le prénom de tous les emprunteurs

Syntaxe Résultat

SELECT nom, prenom


FROM emprunteurs

En cas d’ambiguïté sur le nom d’un attribut, on précise la table dans laquelle se trouve l’attribut considéré
avec la syntaxe : table.attribut.
Remarque : Si une même valeur est répétée pour les attributs sélectionnés, on peut utiliser la commande :
SELECT DISTINCT attribut1, attribut2,… FROM table

b. Sélection : SELECT * FROM… WHERE…


Cette commande permet l’opération de sélection, c’est-à-dire l’obtention d’une sous table en ne gardant
que certains enregistrements. Sa syntaxe générale est :
SELECT * FROM table WHERE restriction
Le caractère * représente tous les attributs de la table.

7
Exemple : Afficher les enregistrements des emprunteurs prénommés Benoît :

Syntaxe Résultat

SELECT *
FROM emprunteurs
WHERE prenom = “Benoît”

c. Sélection et projection : SELECT… FROM… WHERE…


Cette commande va permettre l’obtention d’une sous table en ne gardant que certains attributs et certains
enregistrements en fonction d’un ou plusieurs critères. Sa syntaxe générale est :
SELECT attribut1, attribut2,… FROM table WHERE restriction

Exemple : Afficher uniquement le nom des emprunteurs prénommés Benoît :

Syntaxe Résultat
SELECT nom
FROM emprunteurs
WHERE prenom = “Benoît”
Remarque : “Benoît” peut être remplacé par ‘Benoît’

Les opérateurs permettant les restrictions sont les suivants : <, >, =, BETWEEN, LIKE…
Les opérateurs logiques entre les restrictions sont : AND, OR et NOT.
LIKE permet d’exprimer une restriction à l’aide des caractères spéciaux de remplacement comme :
➢ « _ » : remplace une seule lettre.
➢ « % » : joker qui remplace un groupe de lettres.

Exemple : Afficher le nom et le prénom des emprunteurs dont le prénom se termine par « me » :

Syntaxe Résultat
SELECT nom, prenom
FROM emprunteurs
where prenom like "%me"

Exemple : Afficher les livres empruntés entre le 1er mars et le 1er avril de cette année :
Syntaxe Résultat
SELECT quoi
FROM emprunts
WHERE sortie
BETWEEN
"2014/03/01" AND "2014/04/01"

8
On remarque que le résultat est assez peu parlant et ne présente aucun intérêt sous cette forme. Les
jointures vont pallier ce problème.

d. Les jointures
Les jointures permettent de travailler sur plusieurs tables qui ont des liens (clés étrangères) entre elles.
Sa syntaxe générale est :
SELECT attribut FROM table1 INNER JOIN table2 ON liaison WHERE restriction

Exemple : Pour l’exemple précédent, on veut afficher le titre des livres empruntés sur cette période et non
leur identificateur. Il faut donc opérer une jointure entre la table livres et la table emprunts, en précisant
la clé étrangère :

Syntaxe Résultat
SELECT titre
FROM
emprunts INNER JOIN livres
ON emprunts.quoi = livres.id
WHERE sortie
BETWEEN "2014/03/01" AND "2014/04/01"

L’affichage est plus lisible. Si on veut également afficher le nom de l’emprunteur, il faut opérer une jointure
supplémentaire avec la table emprunteurs :

Syntaxe Résultat
SELECT titre, nom
FROM
(emprunts INNER JOIN livres ON emprunts.quoi = livres.id)
INNER JOIN emprunteurs ON emprunts.qui = emprunteurs.id
WHERE sortie
BETWEEN "2014/03/01" AND "2014/04/01"

e. Fonctions d’agrégation
L’agrégation permet de créer des sous-ensembles et de faire différents calculs sur ceux-ci.

Exemple : Afficher le nom des emprunteurs ayant emprunté au moins trois livres :

Syntaxe Résultat

SELECT nom, prenom


FROM emprunts INNER JOIN emprunteurs
ON emprunts.qui = emprunteurs.id
GROUP BY nom , prenom
HAVING COUNT(nom)>2

9
La commande GROUP BY permet de préparer l’agrégation en spécifiant les critères de définition des sous-
ensembles : on regroupe ici par personne concernée. HAVING fait un peu la même chose que WHERE, mais
permet d’utiliser les fonctions d’agrégation, en l’occurrence ici COUNT qui compte le nombre d’éléments de
chaque sous-ensemble (donc le nombre de prêts par personne).

IV. Architecture trois-tiers

Dans l’utilisation quotidienne des bases de données, les utilisateurs n’ont pas accès directement à la base.
C’est l’application utilisée qui fait l’intermédiaire entre le client de l’utilisateur et le serveur de base de
données.
On parle d’architecture trois-tiers :
➢ Le tiers utilisateur.
➢ Le tiers applicatif.
➢ Le tiers base de données.
Pour l’utilisateur, le tiers applicatif joue un rôle d’interface. Pour la base de données il joue le rôle d’un client.
Les trois tiers communiquent généralement entre eux via un réseau.

Client 1

Client 2
Serveur Serveur de base
applicatif de données

Client 3

10
Applications
Pour la suite il est demandé de répondre aux différentes questions par des requêtes en langage SQL.
Un compte-rendu au format Word sera rédigé afin de présenter les différentes requêtes et leurs résultats.
Se référer au site http://sql.sh/ afin d’obtenir les informations nécessaires à l’utilisation des différentes
fonctions SQL.
Application 1 :
Pour la base « Bibliotheque.db », écrire les commandes SQL permettant de répondre aux questions
suivantes :
1-a) Qui a encore au moins un livre emprunté non rendu et quels sont les titres des livres concernés (pour
sélectionner un attribut de valeur NULL on écrit : WHERE attribut IS ‘NULL’) ?
1-b) Au moins deux livres ?
1-c) Quels sont les titres des livres empruntés par Alexandre Chamoux ?

Application 2 :
La base de données « PME.db » a été créée pour gérer les différentes relations entre :
• Des « Clients » (7 champs (attributs) : identifiant clients (clé primaire), Nom du client, Prénom du
client, Date de création, adresse, numéro carte de fidélité, Email)
• Des « Produits » (6 champs : Identifiant produits (clé primaire), Nom du produit, Fournisseurs, Date
de mise en vente, référence, prix)
• Des « Fournisseurs » (4 champs : identifiant fournisseurs (clé primaire), Nom, Ville, Code Postal)
• Des factures et ce qu’elles contiennent :
o 2 tables :
▪ Table « Factures » : 3 champs : identifiant facture (clé primaire), date, identifiant
client
▪ Table « Détailsfacture » : 3 champs : identifiant facture, identifiant produit (le couple
de deux étrangères forme la clé primaire), quantité

11
2-a) On veut connaitre les fournisseurs les plus proches, faire afficher la liste des partenaires
lyonnais.

2-b) Faire afficher leur nombre. Utiliser la fonction « COUNT » (cf : site http://sql.sh/)

2-c) Trouver les fournisseurs qui ont le code postal 69640.

2-d) Sélectionner tous les fournisseurs qui ont un nom avec la lettre « i »en deuxième position
et un « g » en troisième.

2-e) Afficher les noms des fournisseurs avec les noms des produits qu’ils vendent.

2-f) On veut commander des capteurs, afficher les noms des fournisseurs de capteur et leur
ville.

2-g) Quelle est la fourchette de prix de tous les produits en vente ? Utiliser les fonctions
« MAX » et 3MIN »

2-h) Quelle est la moyenne des prix des produits ? Utiliser le fonction « AVG » (cf : site
http://sql.sh/)

2-i) On veut envoyer un mail à tous les clients qui n’ont pas de carte de fid élité.
Récupérer sous Excel la liste de ces client s avec leur email. Combien sont-ils ?

2-j) Nous voulons connaître les fournisseurs de la facture 124812. Quels sont les produits
vendus par ces fournisseurs ?

2-k) Nous voulons éditer la facture 124812. On affichera le nom du client, son prénom, son
adresse, la date de la facture, les articles vendus, leur nombre et leur prix unitaire.

2-l) Quel sera le montant total de cette facture en prenant une TVA de 20% ?

12

Vous aimerez peut-être aussi