Département INFORMATIQUE Cours de Base de Données
LES LANGAGES RELATIONNES
Aujourd’hui deux langages sont principalement utilisés : SQL (Structured Query Language :
Language d’Interrogation Structuré) et QBE (Query By Exemple, Interrogation Par
Exemple).
QBE est un langage visuel alors que SQL est un langage textuel aux règles syntaxiques
précises et parfois complexe.
1. Qu'est-ce que SQL ?
SQL (Structured Query Language : Language d’Interrogation Structuré) est un langage de
manipulation de bases de données mis au point dans les années 70 par IBM. Il
permet, pour résumer, trois types de manipulations sur les bases de données :
La maintenance des tables : création, suppression, modification de la structure des
tables.
Les manipulations des bases de données : Sélection, modification, suppression
d'enregistrements.
La gestion des droits d'accès aux tables : Contrôle des données : droits d'accès,
validation des modifications.
L'intérêt de SQL est que c'est un langage de manipulation de bases de données standard, vous
pourrez l’utiliser sur n'importe quelle base de données. Ainsi, avec SQL, vous pouvez gérer
une base de données Access, mais aussi SQL Server, Oracle, Mysql etc…..
2. La maintenance des bases de données
La première série de commandes sert à la maintenance de la base de données : création des
tables et des indexes, modification de la structure d'une table ou suppression d'une table ou
d'un index.
SQL dispose pour cela des instructions suivantes :
CREATE TABLE
ALTER TABLE
CREATE INDEX
Dr kadar abdillahi 1
Département INFORMATIQUE Cours de Base de Données
2.1 La commande CREATE TABLE
La commande CREATE TABLE permet de créer une table en SQL. Un tableau est une entité
qui est contenu dans une base de données pour stocker des données ordonnées dans des
colonnes. La création d’une table sert à définir les champs et le type de données qui seront
contenus dans chacun des champs (entier, chaîne de caractères, date, valeur binaire …).
Syntaxe
La syntaxe générale pour créer une table est la suivante :
CREATE TABLE nom_de_la_table
(
champ1 type_donnees Propriété,
champ2 type_donnees,
champ3 type_donnees,
champ4 type_donnees
)
Paramètre Signification
Champ Nom du champ
Type Données Type de données, dans la plupart des versions de SQL, vous aurez droit
aux types de données suivants :
Char(x) : chaîne de caractères, x est le nombre maximum de
caractères autorisés dans le champ.
Text : un groupe de chaine de caractères.
Integer : Nombre entier, positif ou négatif
Decimal (x,y) : Nombre décimal, x est le nombre maximum
de chiffres et y le nombre maximum de chiffres après la virgule.
Decimal ne fonctionne pas avec Access, il ne supporte que le type
'float' (flottant), le type float ne permet pas d'indiquer le nombre de
chiffres après ou avant la virgule
Date : Une date et/ou heure
Logical : Deux valeurs possibles : oui / non
Dr kadar abdillahi 2
Département INFORMATIQUE Cours de Base de Données
propriétés Propriétés du champ :
NULL ou NOT NULL : autorise ou non que le champ puisse être
vide.
UNIQUE : indique que deux enregistrements ne pourront avoir la
même valeur dans ce champ.
PRIMARY KEY : indique que ce champ est la clé primaire
CHECK (condition) : équivaut à la propriété "ValideSi"
d'Access, va forcer SQL à faire une vérification de la condition avant
de valider la saisie, exemple : CHECK (prix > 100) interdira la saisie
dans ce champ si la valeur contenue dans le champ prix est inférieure
à 100.
CHECK ne fonctionne pas avec Access.
DEFAULT = valeur, place une valeur par défaut dans le champ
(ne fonctionne pas avec Access)
DEFAULT ne fonctionne pas avec Access
Une base de données contient plusieurs tables. Dans notre exemple le nom de la base de
données est « gestion_etudiant » et nous avons ici une seule table « etudiant ».
Base de Donnees : gestion_etudiant
Table : etudiant
Champ1
numero_ nom_ mot_passe_ sexe_ filiere_ email_ adresse_ niveau_ num_
etudiant etudiant etudiant etudiant etudiant etudiant etudiant etudiant filiere
1 ali abdi Math- quartier1
abdi M ali120@[Link] 1er annee 1
farah Info avenue13
fatouma
Physique- Cite 2eme
2 hassan fatou F fatouma@[Link] 2
Chimie Hodone I annee
houssein
Valeur1
Dr kadar abdillahi 3
Département INFORMATIQUE Cours de Base de Données
Exemple de création de la table étudiant en SQl :
CREATE TABLE etudiant (numero_etudiant int (15) PRIMARY KEY,
nom_etudiant varchar (100),
mot_passe_etudiant varchar (20),
sexe_etudiant varchar (10),
adresse_etudiant varchar (150),
niveau_etudiant varchar (150),
num_filiere int (15),
foreign key (num_filiere) references filiere (num_filiere)) ;
2.2 La commande ALTER TABLE
La commande ALTER TABLE permet de modifier la structure d'une table, sa syntaxe est la
suivante :
ALTER TABLE table
Action (spécifications du champ);
ALTER TABLE permet trois actions, ces actions sont :
ADD Ajoute un champ a une table
DROP Supprime un champ d'une table
MODIFY Modifie les caractéristiques d'un champ
Exemple : Ajouter le champ telephone_etudiant dans la table etudiant.
ALTER TABLE etudiant ADD telephone_etudiant int;
Après l'action, on indique entre parenthèses les spécifications du champ de la même façon
que pour la commande CREATE TABLE. On ne peut faire qu'une action à la
fois (ajout, suppression ou modification dans la même commande).
2.3 La commande CREATE INDEX
La commande CREATE INDEX permet de créer un index sur une table, sa syntaxe est :
CREATE UNIQUE INDEX nom_index ON table (liste de champs);
Nom_index est le nom de l'index, table est le nom de la table.
Un index accélère les recherches et les tris sur le champ, mais peut ralentir les mises à jour.
Un index peut être composé d'un ou de plusieurs champs, la liste de ces champs est indiquée
entre parenthèses après le nom de la table.
Enfin, la clause UNIQUE indique à SQL si l'index créé va être unique ou s'il peut
contenir plusieurs fois la même valeur dans la table, s'il peut contenir plusieurs fois la
même valeur, il ne faudra pas ajouter la clause UNIQUE.
Dr kadar abdillahi 4
Département INFORMATIQUE Cours de Base de Données
3. Les manipulations des bases de données
Une fois les tables créées, on peut commencer à y insérer des données, les mettre à jour, les
supprimer ou y faire des requêtes. Toutes ces opérations sont des opérations de manipulation
des bases de données.
Pour effectuer ces manipulations, SQL dispose de 5 instructions :
INSERT
SELECT
DELETE
UPDATE
CREATE VIEW (non utilisé dans Access)
3.1 La commande INSERT
La commande INSERT est utilisée pour ajouter des enregistrements ou des parties
d'enregistrements dans des tables. Elle est utilisée généralement sous deux formes :
ème
1 forme
INSERT
INTO table (champ1,champ2,...)
VALUES ('valeur1','valeur2',...);
Cette forme est utilisée lorsqu'on veut insérer un seul enregistrement ou une
partie d'un seul enregistrement. On créera un nouvel enregistrement dont le contenu du
champ1 sera valeur1, le contenu du champ2 sera valeur2, etc...
EXEMPLE : Pour ajouter la première ligne de la table etudiant.
INSERT INTO etudiant ( numero_etudiant, nom_etudiant, mot_de_passe_etudiant,
sexe_etudiant,filiere_etudiant,email_etudiant,adresse_etudiant,niveau_
etudiant,num_filiere )
VALUES (1,’ali abdi farah’, ‘abdi’,‘M’, ‘Math_Info’,’ali120@[Link]’,
’quartier4 avenue13’, ’1er annee’, 2);
ème
2 forme
INSERT
INTO table (champ1,champ2,...)
(requête);
Dans cette seconde forme, le résultat de la requête va être inséré dans les champs
indiqués de la table. Cette méthode est utilisée lorsque plusieurs enregistrements sont ajoutés
simultanément.
Dans les deux cas, les valeurs insérées doivent correspondre au type de données du champ
dans lequel l'insertion va être faite, on ne peut pas, par exemple demander l'insertion d'une
chaîne de caractères dans un champ de type numérique ou monétaire. Les chaînes de
Dr kadar abdillahi 5
Département INFORMATIQUE Cours de Base de Données
caractères doivent être placées entre apostrophes ( ' ), les champs numériques ou vides
(NULL) ne doivent pas être placés entre apostrophes.
3.1.1 Insérer tout ou une partie d'un enregistrement
Si des valeurs doivent être insérées dans tous les champs de l'enregistrement de la
table, la liste des noms des champs n'a pas besoin d'être explicitement indiquée dans
la commande. Les valeurs des champs à insérer doivent cependant apparaître dans le même
ordre que les noms des champs lors de la création de la table, sans oublier un seul champ.
Faites attention en utilisant cette syntaxe, si la structure de la table change plus tard,
la commande qui était bonne risque de ne plus fonctionner correctement. Il vaut mieux
toujours indiquer explicitement le nom des champs sur lesquels on veut agir.
La syntaxe est alors :
INSERT
INTO table
VALUES ('valeur1','valeur2','valeur3',...);
3.2 La commande SELECT
La commande SELECT est la commande la plus complexe de SQL mais aussi la plus
importante. Cette commande va servir à faire des requêtes pour récupérer des données dans
les tables. Elle peut être associée à une des commandes de manipulation de tables vues avant
pour spécifier une condition.
Sa synthèse est :
Select (champ1, champ2, champ3, …)
From table ;
S'il y a plus d'un champ spécifié après SELECT, les champs doivent être séparés par des
virgules. Les champs sont retournés dans l'ordre spécifié après la clause SELECT, et
non pas dans l'ordre qu'ils ont été créés dans la table.
Si on veut récupérer tous les champs des enregistrements sélectionnés, la syntaxe est la
suivante :
SELECT *
FROM table
EXEMPLE : Afficher tous les champs de la table etudiant :
SELECT *
FROM etudiant
Les clauses SELECT et FROM doivent obligatoirement apparaître au début de chaque
Dr kadar abdillahi 6
Département INFORMATIQUE Cours de Base de Données
requête, on peut ensuite indiquer des critères de sélection avec la clause WHERE :
SELECT *
FROM table
WHERE condition
EXEMPLE : Afficher tous les étudiants inscrits dans la filière INFORMATIQUE :
SELECT *
FROM etudiant
WHERE filiere_etudiant =”INFORMATIQUE”;
3.3 La commande DELETE
Pour supprimer des enregistrements d’une table, utilisez la commande DELETE. La syntaxe est la
suivante :
DELETE
FROM table
WHERE condition;
EXEMPLE : Supprimer l’étudiant ayant le numéro étudiant 2 :
DELETE
FROM etudiant
WHERE numero_etudiant=2 ;
On ne peut pas supprimer seulement le contenu de quelques champs des enregistrements. La
commande DELETE supprime des enregistrements entiers, c'est pour cela qu'il n'est pas
nécessaire d'indiquer ici des noms de champs. La condition spécifiée après WHERE va
déterminer quels sont les enregistrements à supprimer.
Pour supprimer tous les enregistrements d'une table, n'indiquez pas de clause WHERE:
DELETE FROM table;
Cette variante de la commande DELETE ne supprime pas la table, elle supprime
seulement les enregistrements contenus dans cette table et laisse une table vide.
On peut aussi, comme précédemment utiliser une requête qui servira à déterminer la
condition de la suppression. La syntaxe est la suivante :
DELETE
FROM table
WHERE condition =
( requête );
Dr kadar abdillahi 7
Département INFORMATIQUE Cours de Base de Données
3.4 La commande UPDATE
La commande UPDATE est utilisée pour changer des valeurs dans des champs d'une table. Sa
syntaxe est :
UPDATE table
SET champ1 = nouvelle_valeur1,
champ2 = nouvelle_valeur2,
champ3 = nouvelle_valeur3
WHERE condition;
EXEMPE : Modifier le nom de la table « ali abdi farah « par « houmed abdi farah » ayant le
numero etudiant 1.
UPDATE etudiant
SET nom_etudiant = ‘houmed abdi farah’,
WHERE numero_etudiant=1;
La clause SET indique quels champs de la table vont être mis à jour et avec quelles
valeurs ils vont l'être. Les champs non spécifiés après la clause SET ne seront pas modifiés.
La commande UPDATE affecte tous les enregistrements qui répondent à la condition
donnée dans la clause WHERE. Si la clause WHERE est absente, tous les enregistrements de la
table seront affectés.
Tout comme la commande INSERT, la commande UPDATE peut contenir une requête.
Dans ce cas la syntaxe est la suivante :
UPDATE table
SET champ1 = nouvelle_valeur1,
champ2 = nouvelle_valeur2,
champ3 = nouvelle_valeur3
WHERE condition =
(requête);
La requête est une requête faite avec la commande SELECT.
Dr kadar abdillahi 8
Département INFORMATIQUE Cours de Base de Données
4. Les Fonctions Avancées
4.1 Les opérateurs de condition
On peut utiliser les opérateurs suivants dans les conditions.
Opérateur Signification
= Egal
<> Différent (parfois noté aussi != )
< Inférieur
> Supérieur
<= Inférieur ou égal
>= Supérieur ou égal
4.2 Opérateurs logiques
Il est possible de combiner plusieurs conditions avec des opérateurs logiques :
L'opérateur AND réunit deux ou plusieurs conditions et sélectionne un enregistrement
seulement si cet enregistrement satisfait TOUTES les conditions listées. (C'est-à-dire que
toutes les conditions séparées par AND sont vraies).
Soit les différentes tables :
Stagiaire (numero_stagiaire, nom-stagiaire, age, telephone, adresse, nationalite, niveau_etude)
Suivre (numero_stagiaire#, code_module# )
Module (code_module, designation, niveau, prix_unitaire, date_debut, date_fin)
Par exemple, pour sélectionner tous les stagiaires nommés ali ayant un niveau d’étude bts :
SELECT *
FROM Stagiaire
WHERE nom_stagiaire ='ali' AND niveau_etude = 'bts;
L'opérateur OR réunit deux conditions mais sélectionne un enregistrement si UNE des conditions
listées est satisfaite. Par exemple, pour sélectionner tous les stagiaires nommés 'Ali' ou 'Abdi' :
SELECT *
FROM Stagiaire
WHERE nom_stagiaire = 'Ali' OR nom_stagiaire = 'Abdi';
Dr kadar abdillahi 9
Département INFORMATIQUE Cours de Base de Données
4.3 Clauses IN et BETWEEN
Pour sélectionner des enregistrements dont la valeur d'un champ peut être comprise dans
une liste ou entre deux valeurs, on utilise les clauses IN et BETWEEN.
Par exemple : Pour sélectionner les Stagiaires ayant un niveau d’étude bts ou bac :
SELECT *
FROM Stagiaire
WHERE niveau_etude IN ('bts, 'bac');
Ou pour sélectionner les modules dont le prix unitaire est compris entre 10000 Fdj et 20000 Fdj :
SELECT *
FROM Module
WHERE prix_unitaire BETWEEN 10000 AND 20000;
Pour sélectionner les modules dont le prix unitaire n'est pas dans l’intervalle ci-dessus :
SELECT *
FROM Module
WHERE prix_unitaire NOT BETWEEN 10000 AND 20000;
De la même façon, NOT IN sélectionne les enregistrements exclus de la liste spécifiée après IN.
4.4 La clause LIKE
La clause LIKE permet de faire des recherches approximatives sur le contenu d'un champ.
Par exemple, pour sélectionner les stagiaires dont le nom commence par la lettre A :
SELECT *
FROM Stagiaire
WHERE nom_stagaire LIKE'A*';
Tout comme dans les requêtes Access, le symbole * remplace un ensemble de
caractères, pour représenter tous les noms commençant par A, on utilisera 'A*', tous ceux se
terminant par A, on utilisera '*A', et tous ceux comportant la lettre A : '*A*'.
4.5 Les jointures
La jointure va nous permettre de sélectionner des informations dans plusieurs tables grâce aux
relations existant entre ces tables. Il va néanmoins falloir indiquer comment se fait la relation
entre ces tables.
Par exemple : Afficher le nom et l’âge des stagiaires ayant suivi la désignation du module Power
Point avancés :
SELECT nom_stagiaire,age
FROM stagiaire, suivre, module
WHERE stagiaire.numero_stagiaire = suivre.numero_stagiaire#
Dr kadar abdillahi 10
Département INFORMATIQUE Cours de Base de Données
AND module.code_module = suivre.code_module#
AND designation = 'Power Point avancés' ;
4.6 Les fonctions d'ensemble
SQL a cinq fonctions importantes : SUM, AVG, MAX, MIN et COUNT. On les appelle
fonctions d'ensemble parce qu'elles résument le résultat d'une requête plutôt que de
renvoyer une liste d'enregistrements.
Fonction Signification
Donne le total d'un champ de tous les enregistrements satisfaisant la condition de la
SUM ()
requête. Le champ doit bien sur être de type numérique
donne la moyenne d'un champ de tous les enregistrements satisfaisant la condition de
AVG ()
la requête
donne la valeur la plus élevée d'un champ de tous les enregistrements satisfaisant la
MAX ()
condition de la requête
Donne la valeur la plus petite d'un champ de tous les enregistrements satisfaisant la
MIN ()
condition de la requête.
COUNT (*) Renvoie le nombre d'enregistrements satisfaisant la requête.
Exemple : SELECT Min([prix_unitaire]) AS [MIN], Avg([prix_unitaire]) AS
MOYENNE, Max([prix_unitaire]) AS [MAX]
FROM [MODULE];
Va retourner le prix le plus petit de la table Module, le prix moyen et le prix le plus élevé.
SELECT COUNT (*)
FROM Module
WHERE désignation LIKE 'P*';
Va retourner le nombre de module dont la désignation commence par la lettre 'P'.
4.7 La clause GROUP BY
Une des utilisations les plus courantes de la clause GROUP BY est son association avec
une fonction d'ensemble (le plus souvent COUNT, pour compter le nombre d'enregistrements
dans chaque STAGIAIRE). Par exemple, si nous voulons la liste des STAGIAIRES, avec pour
chaque STAGIAIRE le nombre de module qu’il a suivi :
SELECT numero_stagiaire, nom_stagiaire, COUNT(code_module#) AS
(CompteDecode_module#)
FROM stagiaire, suivre
Where stagiaire.numero_stagiaire = suivre.numero_stagiaire#
GROUP BY numero_stagiaire, nom_stagiaire;
On peut ajouter une condition à la requête, par exemple, la liste des stagiaires ayant suivi plus d’un
module.
SELECT numero_stagiaire, nom_stagiaire, COUNT(code_module#) AS
(CompteDecode_module#)
FROM stagiaire, suivre
Where stagiaire.numero_stagiaire = suivre.numero_stagiaire#
GROUP BY numero_stagiaire, nom_stagiaire
Dr kadar abdillahi 11
Département INFORMATIQUE Cours de Base de Données
HAVING Count((code_module#)>1);
On utilisera pour cela la clause HAVING.
4.8 Les sous-requêtes
On peut imbriquer autant de requêtes que l'on veut. La condition après la clause WHERE peut
porter sur le résultat d'une autre requête (ou sous requête).
Exemple d’utilisation de sous requête par la commande INSERT INTO :
Si nous voulons placer dans une table nommée "Clientshistorique ", les stagiaires qui ont un
bac S et qui suivent le code module 1word.
INSERT
INTO Clientshistorique(numero_stagiaire,nom_stagiaire) (SELECT
numero_stagiaire,nom_stagiaire) FROM stagiaire,suivre,module
WHERE stagiaire.numero_stagiaire = suivre.numero_stagiaire#
And suivre.code_module# = module.code_module
And niveau_etude = "bac S "
And designation = "1word ";
Dr kadar abdillahi 12