Vous êtes sur la page 1sur 54

BASES DE DONNÉES RELATIONNELLES

5 - Langage SQL
Pr. Abdelhay HAQIQ (abdelhay.haqiq@gmail.com)

Plan
❑ Introduction
❑ Langage de Définition de Données
❑ Définition d’une Base de Données
❑ Définition d’une Table
❑ Types d’attributs
❑ Contraintes des données

❑ Langage de Manipulation des Données


❑ Insert, Delete et Update d’une Table
❑ Contraintes d'intégrité référentielle
❑ Interrogation des données
❑ Opérations sur le résultat
❑ Fonctions
❑ Clause WHERE
❑ Groupement
❑ Jointures
❑ Union, Intersection et Différence
❑ Vue

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 2

1
Plan
❑ Introduction
❑ Langage de Définition de Données
❑ Définition d’une Base de Données
❑ Définition d’une Table
❑ Types d’attributs
❑ Contraintes des données

❑ Langage de Manipulation des Données


❑ Insert, Delete et Update d’une Table
❑ Contraintes d'intégrité référentielle
❑ Interrogation des données
❑ Opérations sur le résultat
❑ Fonctions
❑ Clause WHERE
❑ Groupement
❑ Jointures
❑ Union, Intersection et Différence
❑ Vue

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 3

Introduction au langage SQL


o SQL (Structured Query Language), en français Langage de Requête Structurée, est un langage
informatique normalisé servant à exploiter des bases de données relationnelles.
o SQL est aujourd'hui supporté par la plupart des systèmes de gestion de bases de données
(SGBD), néanmoins, la syntaxe du langage SQL peut différer selon le SGBD
o Les SGBD peuvent être catégorisés selon leur fonctionnement :
– Système propriétaire : Oracle Database, Microsoft SQL Server, DB2, MaxDB, 4D, dBase,
Informix, Sybase
– Système libre : MySQL, PostgreSQL, MariaDB, Firebird, Ingres, HSQLDB, Derby, Apache
Derby
– Embarqué : SQLite, Berkeley DB
– NoSQL : Cassandra, Redis, MongoDB, SimpleDB, BigTable, CouchDB, Couchbase, HBase,
LevelDB, RethinkDB, Memcached
– Orienté objet : ZODB, db4o
– Autre système : Access, OpenOffice.org Base, FileMaker, HyperFileSQL, Paradox, Neo4j,
Riak, Voldemort
Dans ce cours, nous abordons SQL par rapport au SGBD

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 4

2
Caractéristiques d'instructions SQL
o Les instructions SQL sont regroupées en catégories en fonction de leur utilité et des entités
manipulées. Nous pouvons distinguer quatre catégories :
– DDL (Data Definition Language - langage de définition de données) : permet de créer, modifier ou
effacer la définition (schéma) d'une BD ou d'une table.
– DML (Data Manipulation Language - langage de manipulation de données) : permet d’interroger et
de modifier l'information contenue dans les tables.
– DCL (Data Control Language - langage de contrôle de données) : permet d’assurer les droits d'accès
aux données.
– TCL (Transaction Control Language - langage de contrôle des transactions) : permet le contrôle
transactionnel dans une base de données, c’est-à-dire les caractéristiques des transactions, la
validation et l’annulation des modifications.

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 5

Documentation SQL
o Site utile pour la documentation SQL : https://www.w3schools.com/sql

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 6

3
Plan
❑ Introduction
❑ Langage de Définition de Données
❑ Définition d’une Base de Données
❑ Définition d’une Table
❑ Types d’attributs
❑ Contraintes des données

❑ Langage de Manipulation des Données


❑ Insert, Delete et Update d’une Table
❑ Contraintes d'intégrité référentielle
❑ Interrogation des données
❑ Opérations sur le résultat
❑ Fonctions
❑ Clause WHERE
❑ Groupement
❑ Jointures
❑ Union, Intersection et Différence
❑ Vue

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 7

Langage de Définition de Données


o Un langage de définition de données (LDD ; en anglais data definition language, DDL) est un
langage orienté au niveau de la structure de la base de données.

o Il permet de :

– créer, modifier, supprimer des objets.

– définir le domaine des données (nombre, chaîne de caractères, date, booléen…)

– définir les liens entre plusieurs entités de nature différente

– ajouter des contraintes de valeur sur les données.

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 8

4
Plan
❑ Introduction
❑ Langage de Définition de Données
❑ Définition d’une Base de Données
❑ Définition d’une Table
❑ Types d’attributs
❑ Contraintes des données

❑ Langage de Manipulation des Données


❑ Insert, Delete et Update d’une Table
❑ Contraintes d'intégrité référentielle
❑ Interrogation des données
❑ Opérations sur le résultat
❑ Fonctions
❑ Clause WHERE
❑ Groupement
❑ Jointures
❑ Union, Intersection et Différence
❑ Vue

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 9

Définition d’une base de données


o Création de la base :
– La commande CREATE DATABASE permet de créer une table.
– L’option IF NOT EXIST permet juste de ne pas retourner d’erreur si une base du même nom
existe déjà. La base de données ne sera pas écrasée.
CREATE DATABASE nom_BASE [IF NOT EXISTS];

o Suppression de la base :
DROP DATABASE nom_BASE;

– La suppression d'une base de données entraînera la perte des informations complètes


stockées dans la base de données!
o Modification de la base :
ALTER {DATABASE | SCHEMA} [nom_BASE] alter_specification

– Exemple : ALTER TABLE Client ADD COLUMN credit_card_number VARCHAR(25);

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 10

5
Plan
❑ Introduction
❑ Langage de Définition de Données
❑ Définition d’une Base de Données
❑ Définition d’une Table
❑ Types d’attributs
❑ Contraintes des données

❑ Langage de Manipulation des Données


❑ Insert, Delete et Update d’une Table
❑ Contraintes d'intégrité référentielle
❑ Interrogation des données
❑ Opérations sur le résultat
❑ Fonctions
❑ Clause WHERE
❑ Groupement
❑ Jointures
❑ Union, Intersection et Différence
❑ Vue

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 11

Création d’une table


o La commande CREATE TABLE permet de créer une table.
o Une table est une entité qui est contenu dans une base de données pour stocker des données
ordonnées dans des colonnes.
o La création d’une table sert à définir les colonnes et le type de données qui seront contenus
dans chacun des colonne (entier, chaîne de caractères, date, valeur binaire …).
o Syntaxe CREATE TABLE nom_Table [IF NOT EXISTS]
(

nom_attribut TYPE_ATTRIBUT [CONTRAINTE],

);

o L’option IF NOT EXIST permet de ne créer cette table que si une table de même nom n’existe pas
encore.
o A l’intérieur des parenthèses, il sera listé tous les attributs, clés et indexes de la table.

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 12

6
Création d’une table
o Exemple de création d’une table :

CREATE TABLE Client


(
numeroClient INT PRIMARY KEY AUTO_INCREMENT,
nom VARCHAR(100) NOT NULL,
prenom VARCHAR(100) DEFAULT 'Hello',
email VARCHAR(255) UNIQUE,
date_naissance DATE,
fax DECIMAL(10,0)
)

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 13

Modification/Suppression d’une table


o L’instruction RENAME permet de modifier le nom d’une table
Syntaxe
ALTER TABLE old_nom_table RENAME new_nom_table ;

Exemple
ALTER TABLE Client RENAME Personne;

o L’instruction DROP TABLE permet de supprimer une table. Toutes les données qu’elle contient
sont supprimées et sa définition aussi.
Syntaxe
DROP TABLE nom_table;

Exemple
DROP TABLE Client;

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 14

7
Edition d’une colonne d’une table
o Syntaxe d’ajout d’une colonne
ALTER TABLE nom_table ALTER TABLE Client
-> exemple
ADD nom_colonne type; ADD telephone CHAR(10);

o Syntaxe de suppression d’une colonne


ALTER TABLE nom_table ALTER TABLE Client
-> exemple
DROP COLUMN nom_colonne; DROP COLUMN telephone;

o Syntaxe de modification de type d’une colonne


ALTER TABLE nom_table ALTER TABLE Client
-> exemple
MODIFY COLUMN nom_colonne type; MODIFY COLUMN telephone INT;

o Syntaxe de changement et de modification du nom et du type d’une colonne


ALTER TABLE nom_table ALTER TABLE Client
CHANGE COLUMN old_nom_colonne new_nom_colonne type; CHANGE COLUMN telephone tel INT(10);

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 15

Plan
❑ Introduction
❑ Langage de Définition de Données
❑ Définition d’une Base de Données
❑ Définition d’une Table
❑ Types d’attributs
❑ Contraintes des données

❑ Langage de Manipulation des Données


❑ Insert, Delete et Update d’une Table
❑ Contraintes d'intégrité référentielle
❑ Interrogation des données
❑ Opérations sur le résultat
❑ Fonctions
❑ Clause WHERE
❑ Groupement
❑ Jointures
❑ Union, Intersection et Différence
❑ Vue

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 16

8
Types d’attributs
o Il est important de bien choisir le meilleur type possible pour chaque attribut d’une tables. Un
mauvais type de donnée pourrait entraîner :
– un gaspillage de mémoire (ex. : si vous stockez de toutes petites données dans une colonne
faite pour stocker de grosses quantités de données)
– des problèmes de performance (ex. : il est plus rapide de faire une recherche sur un nombre
que sur une chaîne de caractères)
– un comportement contraire à celui attendu (ex. : trier sur un nombre stocké comme tel, ou
sur un nombre stocké comme une chaîne de caractères ne donnera pas le même résultat)
– l'impossibilité d'utiliser des fonctionnalités propres à un type de données (ex. : stocker une
date comme une chaîne de caractères vous prive des nombreuses fonctions temporelles
disponibles)
o MySQL utilise de nombreux types de données répartis en trois catégories :
– Numériques
– Alphanumériques
– Temporels : Date et heure

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 17

Types d’attributs: Numériques


o Les types numériques peuvent être subdivisés en deux sous-catégories :
– les nombres entiers
– les nombres décimaux
o Nombres entiers

Type Nombre d'octets Minimum Maximum


TINYINT 1 -128 127
SMALLINT 2 -32768 32767
MEDIUMINT 3 -8388608 8388607
INT 4 -2147483648 2147483647
BIGINT 8 -9223372036854775808 9223372036854775807

– L'attribut UNSIGNED permet de préciser que le type a une valeur positive commençant par 0

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 18

9
Types d’attributs: Numériques
o Nombres décimaux : Cinq mots-clés permettent de stocker des nombres décimaux dans une
colonne :

Type Nombre d'octets Minimum Maximum


FLOAT [(M,D)] 4 -1.175494351E-38 3.402823466E+38
DOUBLE [(M,D)] 8 -1.7976931348623157E+308 32767
REAL 8 -8388608 8388607
DECIMAL [(M,D)] 4 M = 0, D = 10 M = 65, D = 30

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 19

Types d’attributs : Alphanumériques


o Au moins trois mots-clés permettent de stocker les alphanumériques dans une colonne :

Type Nombre d'octets Minimum Maximum


CHAR(M) 28 1 255
VARCHAR(M) 28 1 255
BLOB or TEXT 216 1 65536

o Comparaison entre CHAR et VARCHAR :

Texte CHAR(5) Mémoire requise VARCHAR(5) Mémoire requise


'' ' ' 5 octets '' 1 octet
'tex' 'tex ' 5 octets 'tex' 4 octets
'texte' 'texte' 5 octets 'texte' 6 octets
'texte trop long' 'texte' 5 octets 'texte' 6 octets

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 20

10
Types d’attributs: Temporels
o Il existe cinq types de données temporelles : DATE, DATETIME, TIME, TIMESTAMP et YEAR.
o DATE : sous format AAAA-MM-JJ
o DATETIME : sous format AAAA-MM-JJ HH:MM
o TIME : sous format HH:MM
o YEAR : sous format AAAA
o TIMESTAMP : sous format AAAAMMJJHHMMSS
– Par définition, le timestamp d'une date est le nombre de secondes écoulées depuis le 1er janvier
1970, 0 h 0 min 0 s (TUC) et la date en question.
– Les timestamps étant stockés sur 4 octets, il existe une limite supérieure : le 19 janvier 2038 à 3 h 14
min 7 s.
– Le TIMESTAMP SQL n'a de timestamp que le nom. Il ne sert pas à stocker un nombre de secondes,
mais bien une date sous format numérique AAAAMMJJHHMMSS

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 21

Types d’attributs: Temporels


o Par défaut :

Type Date par défaut ("zéro")


DATE '0000-00-00'
DATETIME '0000-00-00 00:00:00'
TIME '00:00:00'
YEAR 0000
TIMESTAMP 00000000000000

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 22

11
Plan
❑ Introduction
❑ Langage de Définition de Données
❑ Définition d’une Base de Données
❑ Définition d’une Table
❑ Types d’attributs
❑ Contraintes des données

❑ Langage de Manipulation des Données


❑ Insert, Delete et Update d’une Table
❑ Contraintes d'intégrité référentielle
❑ Interrogation des données
❑ Opérations sur le résultat
❑ Fonctions
❑ Clause WHERE
❑ Groupement
❑ Jointures
❑ Union, Intersection et Différence
❑ Vue

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 23

Contraintes des données


o Les contraintes SQL permettent de spécifier des règles pour les données d'une table.
o Elles permettent de limiter le type de données afin de garantir la précision et la fiabilité des
données
o S'il existe une violation entre la contrainte et l'action de données, l'action est abandonnée.
o Les contraintes sont :
– AUTO_INCREMENT
– DEFAULT
– NOT NULL
– UNIQUE
– PRIMARY KEY
– FOREIGN KEY
– INDEX
– CHECK

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 24

12
Contraintes des données
o AUTO_INCREMENT : Incrémentation automatique pour cet attribut si l’utilisateur ne spécifie pas de valeur
pour cet attribut à l’insertion.
o DEFAULT : spécifie la valeur utilisée par défaut si l’utilisateur ne spécifie pas de valeur pour cet attribut à
l’insertion du tuple
o NOT NULL : spécifie que l’attribut ne peut avoir de valeurs nulles
o UNIQUE : spécifie que les valeurs de cet attribut doivent être distinctes pour chaque couple d’enregistrement
o PRIMARY KEY : désigne l’attribut comme la clé primaire de la table
o FOREIGN KEY : désigne l’attribut comme la clé étrangère de la table
CREATE TABLE Client
(
numeroClient INT PRIMARY KEY AUTO_INCREMENT,
Exemple : nom VARCHAR(100) NOT NULL,
prenom VARCHAR(100) DEFAULT 'Hello',
email VARCHAR(255) UNIQUE,
date_naissance DATE
)

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 25

AUTO_INCREMENT/DEFAULT
o Il est possible d’ajouter des options après la création d’une table.
➢ Option AUTO_INCREMENT : Par défaut, la valeur de départ pour AUTO_INCREMENT est 1.
o Pour que la séquence AUTO_INCREMENT commence par une autre valeur, utilisez
l'instruction SQL suivante :
ALTER TABLE Client AUTO_INCREMENT = 3;

➢ Option DEFAULT :
o Instruction pour ajouter une valeur par défaut à la colonne « prenom » dans le cas où
l’utilisateur ne donne pas une valeur.
ALTER TABLE Client
ALTER prenom SET DEFAULT 'Hello';

o Instruction pour supprimer une valeur par défaut


ALTER TABLE Client
ALTER prenom DROP DEFAULT;

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 26

13
NOT NULL
o Création d’un colonne NOT NULL :

CREATE TABLE Client


(
numeroClient INT NOT NULL,
nom VARCHAR(100) NOT NULL,
prenom VARCHAR(100),
email VARCHAR(255),
date_naissance DATE
)

o Ajout de la contrainte NOT NULL après la création de la table :

ALTER TABLE Client


MODIFY prenom INT NOT NULL;

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 27

UNIQUE
o Création d’une colonne UNIQUE : CREATE TABLE Client
CREATE TABLE Client (
( numeroClient INT,
numeroClient INT UNIQUE, nom VARCHAR(100),
nom VARCHAR(100), OU prenom VARCHAR(100),
prenom VARCHAR(100), date_naissance DATE,
email VARCHAR(255) UNIQUE,
date_naissance DATE CONSTRAINT UC_Client UNIQUE (nom, prenom)
) )

o Ajout de la contrainte UNIQUE après la création de la table :


ALTER TABLE Client
ADD CONSTRAINT UC_Client UNIQUE (nom, prenom);
o Suppression de la contrainte UNIQUE :
ALTER TABLE Client
DROP INDEX UC_Client ;

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 28

14
Clé primaire
o Dans une base de données relationnelle, une clé primaire est une contrainte d'unicité qui
permet d'identifier de manière unique un enregistrement dans une table. Une clé primaire
peut être composée d'un ou de plusieurs attributs de la table.
o Cet attribut devra ne jamais être vide, il faut donc préciser l’option NOT NULL pour le forcer à
prendre une valeur de son domaine.
o Il devra aussi être unique, c’est-à-dire que deux enregistrements ne pourront pas avoir une
valeur identique. Il faut alors faire la déclaration suivante : UNIQUE (cle) à la suite de la liste
des attributs.
o Pour simplifier, on utilisera l’option PRIMARY KEY qui regroupe NOT NULL et UNIQUE en
remplacement des deux dernières déclarations.
o Et pour finir, il faut signifier que cette valeur doit s’incrémenter automatiquement à chaque
insertion d’un enregistrement grâce à l’option AUTO_INCREMENT.

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 29

Clé primaire
o Une clé primaire peut être ajouté avec l’attribut ou avec une contrainte

CREATE TABLE Client


CREATE TABLE Client
(
(
numeroClient INT,
numeroClient INT PRIMARY KEY,
nom VARCHAR(100),
nom VARCHAR(100), OU
prenom VARCHAR(100),
prenom VARCHAR(100),
date_naissance DATE,
date_naissance DATE
)
CONSTRAINT PK_Client PRIMARY KEY (numeroClient)
)

o Avec Constraint, il est possible d’avoir plusieurs clés primaires

CONSTRAINT PK_Table PRIMARY KEY (Attribut1, Attribut2, …)

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 30

15
Clé primaire
o Ajouter une clé primaire après la création de la table
o Sans nommé la contrainte :
ALTER TABLE Client
ADD PRIMARY KEY (numeroClient);

o Avec une contrainte :


ALTER TABLE Client
ADD CONSTRAINT PK_Client PRIMARY KEY (numeroClient);

o Supprimer les clés primaires


ALTER TABLE Client
DROP PRIMARY KEY;

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 31

Clé étrangère
CREATE TABLE Commande
(
numeroCommande INT,
dateCommande DATE
numeroClient INT,

PRIMARY KEY (numeroCommande),


FOREIGN KEY (numeroClient) REFERENCES Client(numeroClient)
)

CREATE TABLE Commande


o Il est préférable de donner un
(
nom aux contraintes numeroCommande INT,
o Le nom de contrainte est utilisé dateCommande DATE,
pour faciliter la suppression du numeroClient INT,
clé étrangère, si un nom n’est pas
CONSTRAINT PK_Commande PRIMARY KEY (numeroCommande),
donné, le SGBD affecte un nom à
CONSTRAINT FK_ClientCommande FOREIGN KEY(numeroClient)
la contrainte.
REFERENCES Client(numeroClient)
)

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 32

16
Clé étrangère
o Ajouter une clé étrangère après la création de la table
– Sans nommé la contrainte :

ALTER TABLE Commande


ADD FOREIGN KEY (numeroClient) REFERENCES Client(numeroClient);

– Avec une contrainte :


ALTER TABLE Commande
ADD CONSTRAINT FK_ClientCommande FOREIGN KEY (numeroClient)
REFERENCES Client(numeroClient);

o Supprimer les clés étrangères

ALTER TABLE Commande


DROP FOREIGN KEY FK_ClientCommande;

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 33

Clé étrangère
o La commande SHOW CREATE affiche la requête SQL permettant de créer une table :
Syntaxe : SHOW CREATE TABLE nom_table;

Exemple : SHOW CREATE TABLE Commande;

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 34

17
Index
o Un index est un objet complémentaire (mais non indispensable) à la base de données
permettant d'indexer certaines colonnes dans le but d'améliorer l'accès aux données par le
SGBDR
– Au même titre qu'un index dans un livre ne vous est pas indispensable mais vous permet souvent
d'économiser du temps lorsque vous recherchez une partie spécifique de ce dernier...

o Un index permet au moteur d'accéder rapidement à la donnée recherchée.


– Si vous recherchez un champs ayant une valeur donnée et qu'il n'y a pas d'index sur ce champ, le
moteur devra parcourir toute la table, et à chaque fois, faire les comparaisons nécessaires pour
extraire un résultat pertinent

o Les indexes doivent toutefois être utilisés avec parcimonie car ils pénalisent les temps
d'insertion et de suppression des données dans la table.
– La création d'index utilise de l'espace mémoire dans la base de données, et, un index est mis à jour à
chaque modification de la table à laquelle il est rattaché

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 35

Index
o Syntaxe :
CREATE INDEX index_Table ON nom_table(colonne1, colonne1,…);

o Création d’un index :

CREATE INDEX index_Client ON Client(nom, prenom);

o Création d’un index UNIQUE:

CREATE UNIQUE INDEX index_Client ON Client(nom, prenom);

o Suppression d’un index :


ALTER TABLE Client
DROP INDEX index_Client;

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 36

18
Check
o La contrainte CHECK est utilisée pour limiter la plage de valeurs pouvant être placée dans une
colonne
CREATE TABLE ClientA
(
numeroClient INT PRIMARY KEY,
nom VARCHAR(100),
prenom VARCHAR(100),
date_naissance DATE,
Age INT,
genre CHAR,
CONSTRAINT Chk_Client CHECK (Age >=18 AND genre IN ('M', 'F'))
)

o Les opérateurs de comparaison utilisables : < , = , > , <= , >= , <>


ALTER TABLE Client
o Modifier la contrainte Check :
ADD CONSTRAINT Chk_Client CHECK (Age >= 18);

o Supprimer la contrainte Check : ALTER TABLE Client DROP CHECK Chk_Client;

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 37

Plan
❑ Introduction
❑ Langage de Définition de Données
❑ Définition d’une Base de Données
❑ Définition d’une Table
❑ Types d’attributs
❑ Contraintes des données

❑ Langage de Manipulation des Données


❑ Insert, Delete et Update d’une Table
❑ Contraintes d'intégrité référentielle
❑ Interrogation des données
❑ Opérations sur le résultat
❑ Fonctions
❑ Clause WHERE
❑ Groupement
❑ Jointures
❑ Union, Intersection et Différence
❑ Vue

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 38

19
Langage de Manipulation des Données
o Un Langage de Manipulation de Données (LMD ; en anglais Data Manipulation Language,
DML) est l'ensemble des commandes concernant la manipulation des données dans une base
de données.
o Le LMD permet l'ajout, la suppression et la modification de lignes et la visualisation du
contenu des tables .
o Les commandes principales de LMD sont :
– INSERT pour ajouter les données
– UPDATE pour modifier les données
– DELETE pour supprimer les données
– SELECT pour consulter les données
o Ces commandes doivent être validés par une transaction pour qu'ils soient pris en compte.

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 39

Plan
❑ Introduction
❑ Langage de Définition de Données
❑ Définition d’une Base de Données
❑ Définition d’une Table
❑ Types d’attributs
❑ Contraintes des données

❑ Langage de Manipulation des Données


❑ Insert, Delete et Update d’une Table
❑ Contraintes d'intégrité référentielle
❑ Interrogation des données
❑ Opérations sur le résultat
❑ Fonctions
❑ Clause WHERE
❑ Groupement
❑ Jointures
❑ Union, Intersection et Différence
❑ Vue

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 40

20
INSERT : Insertion des données
o L'instruction INSERT INTO est utilisée pour insérer de nouveaux enregistrements dans une table.
Syntaxe :
INSERT INTO nom_table (colonne1, colonne2, …)
VALUES ('valeur1', 'valeur2', …);

Exemple :

INSERT INTO Client (numeroClient, nom, prenom, date_naissance, telephone)


VALUES (1, 'Ahmed', 'Said', '2001-06-08', NULL);

o Si vous ajoutez des valeurs pour toutes les colonnes de la table, vous n'avez pas besoin de
spécifier les noms de colonne dans la requête SQL.
INSERT INTO Client VALUES (2, 'Sara', 'Rani', '2001-02-05', NULL);

o Il est possible d'insérer des données uniquement dans des colonnes spécifiques.
INSERT INTO Client (nom, prenom, date_naissance)
VALUES ('Ahmed', 'Said', '2001-06-08');

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 41

UPDATE : Mise à jour des données


o L'instruction UPDATE permet de modifier les enregistrements existants dans une table.
Syntaxe :
UPDATE nom_table
SET colonne1 = 'valeur1', colonne2 = 'valeur2’, …
WHERE condition;
Exemple :

UPDATE Client
SET nom = 'Mourad', prenom = 'Said', date_naissance = '2012-06-08'
WHERE numeroClient = 1;

o Soyez prudent lors de la mise à jour des enregistrements. Si vous omettez la clause WHERE,
TOUS les enregistrements seront mis à jour!

UPDATE Client
SET nom = 'Mourad', prenom = 'Said', date_naissance = '2012-06-08';

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 42

21
DELETE : Suppression des données
o L'instruction DELETE est utilisée pour supprimer des enregistrements existants dans une table.
Syntaxe :
DELETE FROM nom_table WHERE condition;

Exemple :

DELETE FROM Client WHERE numeroClient = 1;

o Il est possible de supprimer toutes les lignes d'une table sans la supprimer. Cela signifie que la
structure de la table, les attributs et les index seront intacts:

DELETE FROM Client;

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 43

Plan
❑ Introduction
❑ Langage de Définition de Données
❑ Définition d’une Base de Données
❑ Définition d’une Table
❑ Types d’attributs
❑ Contraintes des données

❑ Langage de Manipulation des Données


❑ Insert, Delete et Update d’une Table
❑ Contraintes d'intégrité référentielle
❑ Interrogation des données
❑ Opérations sur le résultat
❑ Fonctions
❑ Clause WHERE
❑ Groupement
❑ Jointures
❑ Union, Intersection et Différence
❑ Vue

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 44

22
Contraintes d'intégrité référentielle
o Dans un modèle physique de données, les tables sont liés entre elles par le biais d'une clé
étrangère.
o La clé étrangère d'une table permet de lier la table à la clé primaire de l'autre table.
o Lors de la sélection des données, l'association entre les deux tables est effectuée grâce à une
jointure entre ces deux tables.
o Exemple : Ici, chaque référence à une adresse est respectée.

Problème : Si on supprime de la table adresse la ligne 4, il


devient impossible de retrouver l'adresse de Marie Durand.

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 45

Contraintes d'intégrité référentielle


o Comment garantir qu'une clé trouve toujours la donnée référencée dans la table ?
– En empêchant la suppression de la table si une référence vers cette donnée existe.
– En supprimant la référence lors de la suppression de la donnée référencée.
– En supprimant automatiquement les données référencées.
o L'intégrité référentielle permet de garantir que toute clé étrangère correspond bien à une clé
primaire à laquelle elle fait référence.
– C’est un contrôle ajouté à une clé étrangère.

o Lors de la création des tables, il est possible de confier ce contrôle au moteur de la base de
données.
Note : Sur MySql, cette fonctionnalité n'est disponible qu'avec le moteur des tables : InnoDB

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 46

23
Contraintes d'intégrité référentielle
o Pour déclarer une référence il faut ajouter une clause lors d'un « CREATE TABLE » ou avec un
« ALTER TABLE » :
CONSTRAINT nom_contrainte
FOREIGN KEY (champ1, […, champN])
REFERENCES table(champ1, […, champN])
[ON UPDATE action]
[ON DELETE action]

o Les actions possibles sont :


– RESTRICT : si une référence est trouvée, la suppression ou la modification sera interdite.
– SET NULL : si une référence est trouvée, la suppression ou la modification aura pour effet
en plus de l'action de mettre à jour la référence avec la valeur NULL.
– CASCADE : si une référence est trouvée, la suppression ou la modification aura pour effet
en plus de l'action, d'effectuer la même opération sur les données trouvées.
– NO ACTION : pas de contrôle d'intégrité référentielle.

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 47

ON UPDATE RESTRICT
o Exemple avec ON UPDATE RESTRICT :

o Requêtes qui ne fonctionnent pas :


– Update adresse set id = 8 where id =3
– Update personne set id_adresse = 5 where id = 1
– Insert personne values (5, 'Yu','Van',5)
o Requêtes qui fonctionnent :
– Update personne set id_adresse = 1 where id = 3
– Update personne set id_adresse = null where id = 1

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 48

24
ON UPDATE CASCADE (1/2)
o Exemple avec ON UPDATE CASCADE :

o Action :
Update adresse set id = 5 where id = 3

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 49

ON UPDATE CASCADE (2/2)


o Exemple avec ON UPDATE CASCADE :

o Requêtes qui ne fonctionnent pas :


– Insert personne values (5, 'Yu','Van’, 5)
– Update personne set id_adresse = 5 where id = 1
o Requêtent qui fonctionnent :
– Update personne set id_adresse = 1 where id = 3
– Update adresse set id = 8 where id = 3
– Update personne set id_adresse = null where id = 1

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 50

25
ON UPDATE SET NULL (1/2)
o Exemple avec ON UPDATE SET NULL :

o Action :
Update adresse set id = 5 where id = 3

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 51

ON UPDATE SET NULL (2/2)


o Exemple avec ON UPDATE SET NULL :

o Requêtes qui ne fonctionnent pas :


– Insert personne values (5, 'Yu','Van',5)
– Update personne set id_adresse = 5 where id = 1

o Requêtes qui fonctionnent :


– Update personne set id_adresse =1 where id = 3
– Update adresse set id = 8 where id = 3
– Update personne set id_adresse = null where id = 1

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 52

26
ON UPDATE NO ACTION
o Exemple avec ON UPDATE NO ACTION :

o Requêtes qui fonctionnent :


– Insert personne values (5, 'Yu','Van',5)
– Update personne set id_adresse = 5 where id = 1
– Update personne set id_adresse = 1 where id = 3
– Update adresse set id = 8 where id = 3
– Update personne set id_adresse = null where id = 1

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 53

ON DELETE RESTRICT
o Exemple avec ON DELETE RESTRICT :

o Requêtes qui ne fonctionnent pas :


– Delete adresse where id = 3
o Requêtes qui fonctionnent :
– Delete personne where id = 1
– Delete adresse where id = 2

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 54

27
ON DELETE CASCADE (1/2)
o Exemple avec ON DELETE CASCADE :

o Action :
Delete adresse where id = 3

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 55

ON DELETE CASCADE (2/2)


o Exemple avec ON DELETE CASCADE :

o Requêtes qui fonctionnent :


– Delete personne where id = 3
– Delete adresse where id = 3
– Delete adresse where id = 2

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 56

28
ON DELETE SET NULL (1/2)
o Exemple avec ON DELETE SET NULL :

o Action :
Delete adresse where id = 3

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 57

ON DELETE SET NULL (2/2)


o Exemple avec ON DELETE SET NULL :

o Requêtes qui fonctionnent :


– Delete personne where id = 3
– Delete adresse where id = 3
– Delete adresse where id = 2

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 58

29
ON DELETE NO ACTION
o Exemple avec ON DELETE NO ACTION :

o Requêtes qui fonctionnent :


– Delete personne where id = 3
– Delete adresse where id = 3
– Delete adresse where id = 2

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 59

Plan
❑ Introduction
❑ Langage de Définition de Données
❑ Définition d’une Base de Données
❑ Définition d’une Table
❑ Types d’attributs
❑ Contraintes des données

❑ Langage de Manipulation des Données


❑ Insert, Delete et Update d’une Table
❑ Contraintes d'intégrité référentielle
❑ Interrogation des données
❑ Opérations sur le résultat
❑ Fonctions
❑ Clause WHERE
❑ Groupement
❑ Jointures
❑ Union, Intersection et Différence
❑ Vue

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 60

30
SELECT : Sélection des données
o L'instruction SELECT permet de sélectionner des données dans une base de données.
o Voici la syntaxe générale d'une commande SELECT :

SELECT [ DISTINCT ] { * | Fonction | colonne [ AS alias ] } [, ...]


FROM nom_table [ AS alias ] [, ...]
[ WHERE condition ]
[ ORDER BY expression [ ASC | DESC ] [, ...] ]
[ GROUP BY expression [, ...] ]
[ HAVING condition [, ...] ]
[ {INNER JOIN | LEFT JOIN | RIGHT JOIN | FULL JOIN} nom_tableRef ON colonnes ]
[ {UNION | INTERSECT | MINUS} requête ]
[ LIMIT nombre_ligne [OFFSET decalage] ];

Exemples :
o Sélectionner tous les champs disponibles dans la table Client : SELECT * FROM Client;

o Sélectionner les champs nom et prénom dans la table Client : SELECT nom, prenom FROM Client;

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 61

Sélection des données : Exemple (1/2)

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 62

31
Sélection des données : Exemple (2/2)

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 63

LIMIT : Limite de nombre de ligne


o La clause LIMIT permet de spécifier le nombre d'enregistrements à renvoyer.
Syntaxe :
SELECT colonne1, colonne2, …
FROM nom_table WHERE condition;
LIMIT nombre_ligne [OFFSET decalage];

o Le mot-clé OFFSET indique à partir de quelle ligne on récupère les résultats. Ce paramètre est
facultatif. S'il n'est pas précisé, il est mis à 0

Exemple :
SELECT *
FROM Client
LIMIT 100 OFFSET 50;

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 64

32
Plan
❑ Introduction
❑ Langage de Définition de Données
❑ Définition d’une Base de Données
❑ Définition d’une Table
❑ Types d’attributs
❑ Contraintes des données

❑ Langage de Manipulation des Données


❑ Insert, Delete et Update d’une Table
❑ Contraintes d'intégrité référentielle
❑ Interrogation des données
❑ Opérations sur le résultat
❑ Fonctions
❑ Clause WHERE
❑ Groupement
❑ Jointures
❑ Union, Intersection et Différence
❑ Vue

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 65

DISTINCT : Elimination des doublons (1/2)


o L'instruction SELECT DISTINCT est utilisée pour renvoyer uniquement des valeurs distinctes
(différentes).
o Dans une table, une colonne contient souvent de nombreuses valeurs en double; et parfois
vous voulez seulement lister les différentes valeurs (distinctes).
Syntaxe :
SELECT DISTINCT (colonne1)
FROM nom_table;

Exemple :

SELECT DISTINCT (prenom)


FROM Client;

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 66

33
DISTINCT : Elimination des doublons (2/2)

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 67

Alias
o Les alias SQL sont utilisés pour donner un nom temporaire à une table ou à une colonne d'une
table.
o Ils sont souvent utilisés pour rendre les noms de colonnes plus lisibles.
o Un alias n'existe que pour la durée de la requête. Il est définit par le mot clé « AS ».
Syntaxe :
SELECT colonne1 AS alias_col_1, colonne2 AS alias_col_2, …
FROM nom_table AS alias_table;

Exemple : SELECT CustomerID AS NumeroClient, CustomerName AS NomClient FROM Customers;

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 68

34
Plan
❑ Introduction
❑ Langage de Définition de Données
❑ Définition d’une Base de Données
❑ Définition d’une Table
❑ Types d’attributs
❑ Contraintes des données

❑ Langage de Manipulation des Données


❑ Insert, Delete et Update d’une Table
❑ Contraintes d'intégrité référentielle
❑ Interrogation des données
❑ Opérations sur le résultat
❑ Fonctions
❑ Clause WHERE
❑ Groupement
❑ Jointures
❑ Union, Intersection et Différence
❑ Vue

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 69

Fonctions : MIN()/MAX()
o La fonction MIN () renvoie la plus petite valeur de la colonne sélectionnée.
Syntaxe :
SELECT MIN(colonne1)
FROM nom_table WHERE condition;

o La fonction MAX () renvoie la plus grande valeur de la colonne sélectionnée.


Syntaxe :
SELECT MAX(colonne1)
FROM nom_table WHERE condition;

Exemples :
SELECT MIN(age) SELECT MAX(age)
FROM Client; FROM Client;

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 70

35
Fonctions : COUNT(), AVG() and SUM()
o La fonction COUNT () renvoie le nombre de lignes correspondant à un critère spécifié.

SELECT COUNT(numeroClient)
FROM Client WHERE prenom = 'Said' ;

o La fonction AVG () renvoie la valeur moyenne d'une colonne numérique.

SELECT AVG(prix)
FROM Produit;

o La fonction SUM () renvoie la somme totale d'une colonne numérique.

SELECT SUM(quantite)
FROM Ligne_Commande;

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 71

Exemples

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 72

36
Fonctions Mathématiques

SELECT nom
o Cet exemple affiche dans un ordre aléatoire le nom des
FROM filiales
filiales dont le chiffre d’affaire est négatif.
WHERE SIGN(chiffeAffaire) = -1 o A noter que : SIGN(chiffeAffaire) = -1 chiffeAffaire < 0

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 73

Fonctions de Chaînes de Caractères

o On affiche en majuscules le nom de tous les clients dont le nom ressemble à « Ahmed »

SELECT UPPER(nom)
FROM clients
WHERE SOUNDEX(nom) = SOUNDEX('Ahmed');

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 74

37
Fonctions de Dates et Heures

o Cet exemple affiche le titre des articles parus il y a moins de 30 jours.

SELECT titre
FROM article
WHERE (TO_DAYS(NOW()) – TO_DAYS(parution)) < 30;

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 75

Plan
❑ Introduction
❑ Langage de Définition de Données
❑ Définition d’une Base de Données
❑ Définition d’une Table
❑ Types d’attributs
❑ Contraintes des données

❑ Langage de Manipulation des Données


❑ Insert, Delete et Update d’une Table
❑ Contraintes d'intégrité référentielle
❑ Interrogation des données
❑ Opérations sur le résultat
❑ Fonctions
❑ Clause WHERE
❑ Groupement
❑ Jointures
❑ Union, Intersection et Différence
❑ Vue

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 76

38
Clause WHERE
La clause WHERE est utilisée pour filtrer les enregistrements.
o Syntaxe :
SELECT colonne1, colonne2, …
SELECT * FROM nom_table WHERE condition;
FROM nom_table WHERE condition;

Exemples :
o Sélectionner tous les champs disponibles dans la table Client dont le prénom est « Said » :
SELECT *
FROM Client WHERE prenom = 'Said';

o Sélectionner les champs nom et prénom dans la table Client dont le prénom est « Ahmed »
et age > 18.
SELECT nom, prenom,age
FROM Client WHERE prenom = 'Ahmed' AND age > 18;

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 77

Clause WHERE : Opérateurs de comparaison


o La clause WHERE est associée avec les opérateurs de comparaison :
Opérateur Signification
= égal
< inférieur
<= inférieur ou égal
> supérieur
>= supérieur ou égal
<> ou != différent

o Exemples : <=> égal (valable pour NULL aussi)

SELECT * FROM Client WHERE date_naissance >= '2001-01-01';

SELECT * FROM Client WHERE age < 30;

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 78

39
Clause WHERE : Combinaisons de critères
o Il est possible d’utiliser de combinaisons de critères pour obtenir un résultat raffiné
Opérateur Symbole Signification
AND && ET
OR || OU
XOR OU exclusif
NOT ! NON

o Exemples :
SELECT * FROM Client WHERE date_naissance >= '2001-01-01' AND sexe = 'M';

SELECT * FROM Client WHERE prenom = 'Said' OR prenom = 'Khalid';

SELECT * FROM Client WHERE prenom = 'Said' AND NOT nom = 'Kadir';

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 79

Clause WHERE : Sélection complexe


o Exemple de sélection complexe :

SELECT *
FROM Animal
WHERE date_naissance > '2016-12-31'
OR
( espece = 'chat'
AND
( sexe = 'M'
OR
( sexe = 'F' AND date_naissance < '2017-06-01' )
)
);

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 80

40
Opérateur NULL
o Il n'est pas possible de tester les valeurs NULL avec des opérateurs de comparaison tels que =,
< ou <>.
o Il faut plutôt utiliser les opérateurs IS NULL et IS NOT NULL.
Syntaxe :

SELECT colonne1, colonne2, … SELECT colonne1, colonne2, …


FROM nom_table WHERE colonne IS NULL; FROM nom_table WHERE colonne IS NOT NULL;

Exemples :
SELECT * FROM Client WHERE prenom IS NULL;

SELECT * FROM Client WHERE nom IS NOT NULL;

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 81

LIKE : Recherche approximative (1/2)


o L'opérateur LIKE est utilisé dans une clause WHERE pour rechercher un modèle spécifié dans
une colonne.
o Deux caractères génériques sont utilisés avec l'opérateur LIKE:
• % : Le signe de pourcentage représente zéro, un ou plusieurs caractères.
• _ : Le trait de soulignement représente un seul caractère
o Le signe de pourcentage et le trait de soulignement peuvent être utilisés en
combinaison
o Syntaxe :
SELECT colonne1, colonne2, …
FROM nom_table
WHERE condition LIKE modèle;

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 82

41
LIKE : Recherche approximative (2/2)
o Voici quelques exemples montrant différents opérateurs LIKE avec des caractères génériques
'%' et '_' :

Opérateur LIKE Description


WHERE nom LIKE 'a%' Recherche les valeurs commençant par "a"
WHERE nom LIKE '%a' Recherche les valeurs qui se terminent par "a"
WHERE nom LIKE '%ou%' Recherche les valeurs qui ont "ou" dans n'importe quelle position
WHERE nom LIKE '_r%' Recherche les valeurs ayant "r" en deuxième position
WHERE nom LIKE 'a_%_%' Recherche les valeurs commençant par "a" et comportant au moins 3 caractères.
WHERE nom LIKE 'a%o' Recherche les valeurs commençant par "a" et se terminant par "o"

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 83

BETWEEN : Recherche dans un intervalle


o L'opérateur BETWEEN sélectionne des valeurs dans une plage donnée. Les valeurs peuvent
être des nombres, du texte ou des dates.
o L'opérateur BETWEEN est inclusif: les valeurs de début et de fin sont incluses.
Syntaxe :
SELECT colonne1, colonne2, …
FROM nom_table WHERE colonne BETWEEN valeur1 AND valeur2;

Exemples :

SELECT * FROM Client SELECT * FROM Client


WHERE date_naissance WHERE date_naissance
BETWEEN '2001-01-01' AND '2006-08-10'; NOT BETWEEN '2001-01-01' AND '2006-08-10';

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 84

42
IN : Ensemble de critères
o L'opérateur IN permet de spécifier plusieurs valeurs dans une clause WHERE.
o L'opérateur IN est un raccourci pour plusieurs conditions OU.
Syntaxe :
SELECT colonne1, colonne2, …
FROM nom_table WHERE colonne IN (valeur1, valeur2,…);

OU
SELECT colonne1, colonne2, …
FROM nom_table WHERE colonne IN (SELECT STATEMENT);

Exemple :
SELECT * FROM Client
WHERE ville IN ('Rabat', 'Casablanca', 'Tanger');

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 85

Plan
❑ Introduction
❑ Langage de Définition de Données
❑ Définition d’une Base de Données
❑ Définition d’une Table
❑ Types d’attributs
❑ Contraintes des données

❑ Langage de Manipulation des Données


❑ Insert, Delete et Update d’une Table
❑ Contraintes d'intégrité référentielle
❑ Interrogation des données
❑ Opérations sur le résultat
❑ Fonctions
❑ Clause WHERE
❑ Groupement
❑ Jointures
❑ Union, Intersection et Différence
❑ Vue

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 86

43
ORDER BY : Tri des données
o Le mot clé ORDER BY trie les enregistrements par défaut par ordre croissant (ASC : Ascendant)
o Pour trier les enregistrements par ordre décroissant, utilisez le mot-clé DESC (Descendant)
Syntaxe :
SELECT colonne1, colonne2, …
FROM nom_table WHERE condition;
ORDER BY colonne1, colonne2,… ASC|DESC;

Exemples :

SELECT * FROM Client ORDER BY nom;

SELECT * FROM Client ORDER BY prenom DESC;

SELECT * FROM Client WHERE date_naissance >= '2001-01-01' ORDER BY nom;

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 87

ORDER BY + LIMIT : Exemple

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 88

44
GROUP BY
o La condition GROUP BY est souvent utilisée avec des fonctions d'agrégation (COUNT, MAX,
MIN, SUM, AVG) pour regrouper l'ensemble de résultats en une ou plusieurs colonnes.
o A noter : GROUP BY doit toujours être utilisée après la commande WHERE et avant la
commande HAVING.

SELECT colonne1, function(colonne2), …


FROM nom_table
GROUP BY colonne1;

o Exemple : Obtenir la quantité totale des produits de chaque client en regroupant les
commandes des mêmes clients
numeroClient Quantite
SELECT numeroClient, SUM(quantite) 1 20
FROM Commande
2 44
GROUP BY numeroClient;
3 85

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 89

HAVING
o La condition HAVING en SQL est presque similaire à WHERE à la seule différence que HAVING
permet de filtrer en utilisant des fonctions telles que SUM(), COUNT(), AVG(), MIN() ou MAX().

SELECT colonne1, function(colonne2), …


FROM nom_table
GROUP BY colonne1;
HAVING function(colonne2) operateur valeur;

o Exemple :
SELECT numeroClient, SUM(quantite)
FROM Commande numeroClient Quantite

2 44
GROUP BY numeroClient
3 85

HAVING SUM(quantite) > 40

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 90

45
Plan
❑ Introduction
❑ Langage de Définition de Données
❑ Définition d’une Base de Données
❑ Définition d’une Table
❑ Types d’attributs
❑ Contraintes des données

❑ Langage de Manipulation des Données


❑ Insert, Delete et Update d’une Table
❑ Contraintes d'intégrité référentielle
❑ Interrogation des données
❑ Opérations sur le résultat
❑ Fonctions
❑ Clause WHERE
❑ Groupement
❑ Jointures
❑ Union, Intersection et Différence
❑ Vue

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 91

Jointures
o Les jointures permettent de sélectionner les données se trouvant dans plusieurs tables.
o Il est indispensable de savoir les utiliser car elles permettent de préciser les données sur
lesquelles travailler lors d'un :
– Select (lecture)
– Update (mise à jour)
– Delete (suppression)

o Une clause JOIN est utilisée pour combiner des lignes de deux ou plusieurs tables, en fonction
d'une colonne liée entre elles.

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 92

46
Jointures
o Exemple : On veut afficher les nom , prénom et ville des personnes

SELECT Personne.Nom, Personne.Prenom, Adresse.Ville


FROM Personne, Adresse
WHERE Personne.Id_adresse = Adresse.Id

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 93

Jointures
o Problèmes de la jointure par « = »
– Mélange des critères de sélection et des jointures
– Mise en relation des données uniquement quand les deux attributs sont remplis (jointure
fermée)
o Exemple :
– On désire lire toutes les personnes et optionnellement donner leur adresse si celle-ci est
connue.
– La requête :

SELECT *
FROM Personne, Adresse
WHERE Personne.Id_adresse = Adresse.Id

ne retournera pas les personnes n'ayant pas d'adresse référencée.

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 94

47
Jointures fermées et ouvertes
o Il existe une autre syntaxe permettant de séparer les clauses dédiées à la jointure des critères
de sélection.
o Il y a quatre type d'associations :
– INNER JOIN : jointure fermée, les données doivent être à la fois dans les 2 tables
– LEFT JOIN : jointure ouverte, on lit les données de la table de gauche en y associant
éventuellement celle de la table de droite.
– RIGHT JOIN : jointure ouverte, on lit les données de la table de droite en y associant
éventuellement celle de la table de gauche.
– FULL JOIN : jointure ouverte, on lit les données des deux tables, et on remplit par NULL les
colonnes vides.

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 95

INNER JOIN
o La commande INNER JOIN permet de retourner les enregistrements lorsqu’il y a au moins une
ligne dans chaque colonne qui correspond à la condition.

SELECT *
FROM tableA
INNER JOIN tableB ON tableA.id = tableB.fk_id

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 96

48
Exemple : INNER JOIN
Client Commande
id prenom nom email ville num_commande numeroClient date_achat

1 Rachad Marechal aime.marechal@example.com Rabat A00103 1 2016-01-23

2 Sara Lefort esmee.lefort@example.com Tanger A00104 1 2016-02-14

3 Nabil Prevost m.prevost@example.com Rabat A00105 2 2016-02-17

A00106 2 2017-02-21
4 Meryem Rolland lucrolland@example.com Casablanca
A00107 5 2018-03-02

id prenom nom num_commande


SELECT id, prenom, nom, num_commande
1 Rachad Marechal A00103
FROM Client
INNER JOIN Commande ON Client.id = Commande.numeroClient 1 Rachad Marechal A00104

2 Sara Lefort A00105


Résutat :
2 Sara Lefort A00106

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 97

LEFT JOIN
o La commande LEFT JOIN (aussi appelée LEFT OUTER JOIN) permet de lister tous les résultats
de la table de gauche (left = gauche) même s’il n’y a pas de correspondance dans la deuxième
tables.

SELECT *
FROM tableA
LEFT JOIN tableB ON tableA.id = tableB.fk_id

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 98

49
LEFT JOIN : Exemple
o On veut lister tous les clients avec leurs commandes et afficher également les client qui n’ont
pas effectuées d’achats :
id prenom nom num_commande

SELECT id, prenom, nom, num_commande 1 Rachad Marechal A00103


FROM Client 1 Rachad Marechal A00104
LEFT JOIN Commande ON Client.id = Commande.numeroClient
2 Sara Lefort A00105

2 Sara Lefort A00106

3 Nabil Prevost NULL

4 Meryem Rolland NULL

o On veut lister tous les client qui n’ont pas effectuées d’achats :
SELECT id, prenom, nom, num_commande id prenom nom num_commande
FROM Client 3 Nabil Prevost NULL
LEFT JOIN Commande ON Client.id = Commande.numeroClient
WHERE num_commande IS NULL; 4 Meryem Rolland NULL

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 99

RIGHT JOIN
o La commande RIGHT JOIN (ou RIGHT OUTER JOIN) est un type de jointure entre 2 tables.
o Elle permet de retourner tous les enregistrements de la table de droite (right = droite) même
s’il n’y a pas de correspondance avec la table de gauche.

SELECT *
FROM tableA
RIGHT JOIN tableB ON tableA.id = tableB.fk_id

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 100

50
RIGHT JOIN : Exemple
o On veut lister toutes les commandes avec leurs clients même s’il n’y a pas de clients :

SELECT id, prenom, nom, num_commande


FROM Client
RIGHT JOIN Commande ON Client.id = Commande.numeroClient

id prenom nom num_commande

1 Rachad Marechal A00103

1 Rachad Marechal A00104

2 Sara Lefort A00105

2 Sara Lefort A00106

NULL NULL NULL 5

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 101

FULL JOIN
o La commande FULL JOIN (ou FULL OUTER JOIN) permet de combiner les résultats deux tables,
les associer entre eux grâce à une condition, et remplir avec des valeurs NULL si la condition
n’est pas respectée.

SELECT *
FROM tableA
FULL JOIN tableB ON tableA.id = tableB.fk_id

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 102

51
FULL JOIN : Exemple
o On veut lister tous les clients ayant effectué ou non une commande, et de lister toutes les
commandes qui sont associées ou non à un client.

id prenom nom num_commande

1 Rachad Marechal A00103

1 Rachad Marechal A00104

2 Sara Lefort A00105


SELECT id, prenom, nom, num_commande
FROM Client 2 Sara Lefort A00106
FULL JOIN Commande ON Client.id = Commande.numeroClient
3 Nabil Prevost NULL

4 Meryem Rolland NULL

NULL NULL NULL 5

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 103

Plan
❑ Introduction
❑ Langage de Définition de Données
❑ Définition d’une Base de Données
❑ Définition d’une Table
❑ Types d’attributs
❑ Contraintes des données

❑ Langage de Manipulation des Données


❑ Insert, Delete et Update d’une Table
❑ Contraintes d'intégrité référentielle
❑ Interrogation des données
❑ Opérations sur le résultat
❑ Fonctions
❑ Clause WHERE
❑ Groupement
❑ Jointures
❑ Union, Intersection et Différence
❑ Vue

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 104

52
Union, Intersection et Différence
o La commande UNION permet de concaténer les résultats de 2 requêtes ou plus

SELECT * FROM tableA


UNION
SELECT * FROM tableB

o La commande INTERSECT permet donc de récupérer les enregistrements communs à 2


requêtes. Cela peut s’avérer utile lorsqu’il faut trouver s’il y a des données similaires sur 2
tables distinctes. INTERSECT n’est pas disponible pour le SGBD MySQL

SELECT DISTINCT colonne


SELECT * FROM tableA FROM tableA
INTERSECT Alternative pour MySQL > WHERE colonne IN (
SELECT * FROM tableB SELECT colonne
FROM tableB
);

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 105

Union, Intersection et Différence


o la commande MINUS s’utilise entre 2 instructions pour récupérer les enregistrements de la
première instruction sans inclure les résultats de la seconde requête

SELECT * FROM tableA


MINUS
SELECT * FROM tableB

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 106

53
Plan
❑ Introduction
❑ Langage de Définition de Données
❑ Définition d’une Base de Données
❑ Définition d’une Table
❑ Types d’attributs
❑ Contraintes des données

❑ Langage de Manipulation des Données


❑ Insert, Delete et Update d’une Table
❑ Contraintes d'intégrité référentielle
❑ Interrogation des données
❑ Opérations sur le résultat
❑ Fonctions
❑ Clause WHERE
❑ Groupement
❑ Jointures
❑ Union, Intersection et Différence
❑ Vue

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 107

Vue
o Une vue est une table virtuelle, c'est-à-dire dont les données ne sont pas stockées dans une
table de la base de données, et dans laquelle il est possible de rassembler des informations
provenant de plusieurs tables.
o On parle de "vue" car il s'agit simplement d'une représentation des données dans le but d'une
exploitation visuelle.
o Les données présentes dans une vue sont définies grâce à une clause SELECT.
o Syntaxe : CREATE VIEW Nom_de_la_Vue DROP VIEW Nom_de_la_Vue ALTER VIEW Nom_de_la_Vue
AS SELECT ... AS SELECT ...

o Exemple :
CREATE VIEW TotalCommandes Afficher la vue :
AS
SELECT num_commande, SUM(quantite) AS total SELECT * From TotalCommandes;
FROM Commande
GROUP BY num_commande
ORDER BY total DESC;

Pr. Abdelhay HAQIQ BASES DE DONNÉES RELATIONNELLES 108

54

Vous aimerez peut-être aussi