INTRODUCTION AU SQL
MySQL & Structured Query Language
Cours complet avec syntaxes, exemples et exercices
1. INTRODUCTION AU SQL ET MYSQL
1.1 Qu'est-ce que SQL ?
SQL (Structured Query Language) est un langage informatique standard permettant d'interagir avec
des bases de données relationnelles. C'est le langage de bases de données le plus répandu dans
le monde.
Caracteristique Detail
Creation Annees 1970 (IBM)
Standard ANSI 1986
Standard ISO 1987
Utilisation Bases de donnees relationnelles
Etat actuel Regulierement ameliore et mis a jour
1.2 Qu'est-ce que MySQL ?
MySQL est un Systeme de Gestion de Bases de Donnees Relationnelles (SGBDR) qui utilise le
langage SQL. C'est l'un des SGBDR les plus populaires au monde.
• Open Source : code source librement disponible, modifiable par tous
• Version gratuite disponible pour tous
• Version commerciale payante avec support professionnel
• Tres largement utilise dans le developpement web (LAMP, WAMP...)
2. GESTION DES BASES DE DONNEES
2.1 Creer une base de donnees
CREATE DATABASE NomDeLaBase ;
2.2 Supprimer une base de donnees
DROP DATABASE NomDeLaBase ;
DROP DATABASE IF EXISTS NomDeLaBase ;
Remarque : IF EXISTS evite une erreur si la base n'existe pas.
3. GESTION DES TABLES
3.1 Creer une table
CREATE TABLE [IF NOT EXISTS] NomDeLaTable (
colonne1 TYPE1 [contraintes],
colonne2 TYPE2 [contraintes],
...
[PRIMARY KEY (colonne_cle_primaire)]
) [ENGINE=moteur] ;
Exemple :
CREATE TABLE Produit (
CodePro VARCHAR(4) PRIMARY KEY,
NomPro VARCHAR(30) NOT NULL,
PrixVente DECIMAL(10,2),
StockPro INT DEFAULT 0,
SeuilPro INT
) ENGINE=InnoDB ;
3.2 Verifier les tables
SHOW TABLES ; -- liste toutes les tables
DESCRIBE NomDeLaTable ; -- affiche les colonnes et leurs caracteristiques
3.3 Supprimer une table
DROP TABLE NomDeLaTable ;
Remarque : Cette commande est irreversible. Utilisez-la avec prudence.
3.4 Modifier une table (ALTER TABLE)
La commande ALTER TABLE permet d'ajouter, retirer ou modifier des elements d'une table
existante.
Operation Syntaxe
Ajouter une colonne ALTER TABLE Nom ADD [COLUMN] col description ;
Supprimer une colonne ALTER TABLE Nom DROP [COLUMN] col ;
Renommer une colonne ALTER TABLE Nom CHANGE ancien_nom nouveau_nom type ;
Modifier le type ALTER TABLE Nom MODIFY col nouveau_type ;
Exemples :
-- Ajouter une colonne
ALTER TABLE Produit ADD NumFam VARCHAR(4) REFERENCES Famille(NumFam) ;
-- Renommer la colonne 'nom' en 'prenom'
ALTER TABLE Test_tuto CHANGE nom prenom VARCHAR(10) NOT NULL ;
4. MANIPULATION DES DONNEES (LMD)
Le LMD (Langage de Manipulation de Donnees) regroupe les commandes : INSERT, UPDATE,
DELETE et SELECT.
4.1 Inserer des donnees - INSERT INTO
Insertion complete (toutes les colonnes)
INSERT INTO NomDeLaTable
VALUES (Val1, Val2, Val3, ...) ;
Insertion partielle (colonnes choisies)
INSERT INTO NomDeLaTable (Col1, Col2, Col3)
VALUES (Val1, Val2, Val3) ;
Insertion multiple (plusieurs lignes en une requete)
INSERT INTO NomDeLaTable (Col1, Col2, Col3)
VALUES (Val11, Val12, Val13),
(Val21, Val22, Val23),
(Val31, Val32, Val33) ;
Remarque : Pour l'insertion multiple, les colonnes doivent etre les memes pour chaque ligne.
4.2 Modifier des donnees - UPDATE
UPDATE NomTable
SET NomColonne = Valeur
WHERE Conditions ;
Exemple - Modifier l'inscription de l'etudiant M02 :
UPDATE INSCRIPTION
SET CodeCla = 'L1RI'
WHERE Matricule = 'M02' ;
Remarque : Sans la clause WHERE, la mise a jour s'applique a TOUTES les lignes de la table.
4.3 Supprimer des donnees - DELETE
DELETE FROM NomTable
WHERE Conditions ;
Remarque : TRUNCATE TABLE NomTable supprime toutes les lignes d'un coup (ordre LDD, plus
rapide que DELETE sans WHERE).
5. SELECTION DE DONNEES - L'ORDRE SELECT
5.1 Syntaxe generale
SELECT [DISTINCT] * | Col1 [AS Alias1], Col2 [AS Alias2], ...
FROM NomTable
[WHERE Conditions]
[ORDER BY Col1 ASC|DESC, Col2 ASC|DESC]
[LIMIT n [OFFSET m]] ;
Mot-cle Role
SELECT * Affiche toutes les colonnes
SELECT Col1, Col2 Affiche uniquement les colonnes specifiees
DISTINCT Elimine les doublons dans les resultats
AS Alias Renomme une colonne dans l'affichage
FROM Indique la table source des donnees
WHERE Filtre les lignes selon des conditions
ORDER BY Trie les resultats
LIMIT Limite le nombre de lignes retournees
5.2 Exemples de base
Afficher tous les clients :
SELECT * FROM Client ;
Afficher le code et le nom de tous les clients :
SELECT NumCli, NomCli FROM Client ;
Afficher avec des alias :
SELECT NomCli AS "Nom", PrenomCli AS "Prenom", VilleCli AS "Ville"
FROM Client ;
5.3 La clause WHERE - Filtrer les resultats
Operateurs de comparaison
Operateur Signification
= Egal a
< ou > Inferieur ou superieur
<= ou >= Inferieur ou superieur ou egal
<> ou != Different de
IS NULL La valeur est NULL
IS NOT NULL La valeur n'est pas NULL
Exemple :
SELECT CodePro, NomPro, StockPro
FROM Produit
WHERE StockPro < 100 ;
Operateurs logiques (combinaison de criteres)
Operateur Description
AND (&&) Les deux conditions doivent etre vraies
OR (||) Au moins une condition doit etre vraie
NOT Inverse la condition
XOR Une seule des conditions doit etre vraie (OU exclusif)
Exemple avec AND :
SELECT NumPro, NomPro, StockPro, SeuilPro
FROM Produit
WHERE StockPro <= SeuilPro AND PrixVente < 1500 ;
Exemple avec OR :
SELECT CodePro, NomPro, StockPro, SeuilPro
FROM Produit
WHERE StockPro <= SeuilPro OR StockPro = 0 ;
Exemple avec AND, OR et parentheses :
SELECT NomPro, StockPro
FROM Produit
WHERE StockPro <= 100 AND (CodeFam = 'FA01' OR CodeFam = 'F03') ;
Remarque : Utilisez toujours des parentheses quand vous combinez AND et OR pour eviter des
erreurs logiques.
Le cas de NULL
-- Afficher les clients sans ville
SELECT * FROM Client WHERE VilleCli IS NULL ;
-- Afficher les clients avec ville
SELECT * FROM Client WHERE VilleCli IS NOT NULL ;
5.4 Tri des resultats - ORDER BY
SELECT *
FROM Produit
ORDER BY PrixUnitaire ASC, NomPro DESC ;
Mot-cle Effet
ASC Tri croissant (defaut si omis)
DESC Tri decroissant
Remarque : On peut trier sur plusieurs colonnes : le tri s'effectue d'abord sur la 1re colonne, puis sur
la 2e, etc.
5.5 Limiter les resultats - LIMIT
SELECT * FROM Produit
ORDER BY PrixUnitaire DESC
LIMIT 10 ; -- Les 10 produits les plus chers
SELECT * FROM Animal
ORDER BY id
LIMIT 6 OFFSET 3 ; -- 6 lignes a partir de la 4e
5.6 Eliminer les doublons - DISTINCT
SELECT DISTINCT VilleCli FROM Client ;
6. OPERATEURS AVANCES DANS WHERE
6.1 Recherche par intervalle - BETWEEN
Val BETWEEN Borne_Min AND Borne_Max ;
Exemples :
-- Produits dont le prix est entre 1500 et 3000
SELECT * FROM PRODUIT
WHERE PrixUnitaire BETWEEN 1500 AND 3000 ;
-- Factures emises entre deux dates
SELECT NumFac, DateFac FROM Facture
WHERE DateFac BETWEEN '2022-10-10' AND '2022-12-31'
ORDER BY DateFac ASC, NumFac DESC ;
Remarque : BETWEEN est equivalent a >= Borne_Min AND <= Borne_Max. Les bornes sont
incluses.
6.2 Recherche par liste - IN
-- Produits dont le code est dans la liste
SELECT * FROM Produit
WHERE CodePro IN ('P01', 'P03', 'P07') ;
-- Equivalent avec OR (moins lisible)
WHERE CodePro = 'P01' OR CodePro = 'P03' OR CodePro = 'P07'
6.3 Recherche approximative - LIKE
LIKE permet des recherches avec des caracteres jokers (wildcards) sur des chaines de caracteres.
Joker Signification
% N'importe quelle chaine (y compris vide)
_ Un seul caractere (ou aucun)
Exemple Pattern Correspond a...
Commence par B 'B%' Bonjour, Bio, B
Se termine par e '%e' Table, Code, e
Contient ch '%ch%' Chercher, Echelon
Commence par M, 'M_' Ma, Me, Mi
2 chars
Exactement 3 chars '___' Abc, Xyz, 123
M...e (nb qcq) 'M%e' Marie, Monde, Me
Exemples :
-- Clients dont le nom contient la lettre M
SELECT * FROM Client WHERE NomCli LIKE '%M%' ;
-- Etudiants dont le nom commence par MA
SELECT * FROM ETUDIANT WHERE NomEtu LIKE 'MA%' ;
-- Nom commence par M et se termine par E
SELECT * FROM ETUDIANT WHERE NomEtu LIKE 'M%E' ;
-- Exclure avec NOT LIKE
SELECT * FROM Client WHERE NomCli NOT LIKE '%M%' ;
Remarque : LIKE n'est pas sensible a la casse par defaut avec UTF-8. Pour une recherche sensible
a la casse, utilisez BINARY.
-- Recherche sensible a la casse
SELECT * FROM Client WHERE NomCli LIKE BINARY 'Marie%' ;
-- Chercher le caractere '%' litteralement
SELECT * FROM Client WHERE NomCli LIKE '%%%' ESCAPE '\' ;
7. FONCTIONS D'AGREGATION
Les fonctions d'agregation (ou fonctions de groupe) permettent d'effectuer des calculs sur un
ensemble de lignes et de retourner une seule valeur.
Fonction Description et usage
COUNT(*) Compte toutes les lignes (y compris NULL)
COUNT(colonne) Compte les valeurs non NULL d'une colonne
MIN(colonne) Retourne la valeur minimale
MAX(colonne) Retourne la valeur maximale
AVG(colonne) Calcule la moyenne des valeurs non NULL
SUM(colonne) Calcule la somme des valeurs non NULL
Exemples :
SELECT COUNT(*) AS NombreClients FROM Client ;
SELECT MIN(PrixVente), MAX(PrixVente), AVG(PrixVente) FROM Produit ;
SELECT SUM(StockPro * PrixVente) AS ValeurTotaleStock FROM Produit ;
8. LES JOINTURES (JOINTURES)
Les jointures permettent de combiner les donnees de plusieurs tables en une seule requete, en
reliant les tables via leurs cles.
8.1 Exemple de schema
ETUDIANT (Matricule, Nom, Prenom, DateNaiss)
CLASSE (Numero, NomClasse, Mensualite, DroitIns)
INSCRIPTION (CodeCla, Matricule, DateIns, AnneeAca)
8.2 Jointure interne (INNER JOIN)
SELECT [Link], [Link], [Link]
FROM ETUDIANT E
INNER JOIN INSCRIPTION I ON [Link] = [Link]
INNER JOIN CLASSE C ON [Link] = [Link] ;
Ou avec la syntaxe WHERE (equivalente) :
SELECT [Link], [Link], [Link]
FROM ETUDIANT E, INSCRIPTION I, CLASSE C
WHERE [Link] = [Link] AND [Link] = [Link] ;
9. SYNTHESE - ORDRE DES CLAUSES SELECT
Voici l'ordre obligatoire des clauses dans une requete SELECT :
SELECT [DISTINCT] colonnes / * / expressions
FROM table(s)
WHERE conditions de filtrage
GROUP BY colonnes de regroupement
HAVING conditions sur les groupes
ORDER BY colonnes de tri ASC | DESC
LIMIT n [OFFSET m] ;
Remarque : Les clauses WHERE, GROUP BY, HAVING, ORDER BY et LIMIT sont toutes
optionnelles. Seules SELECT et FROM sont obligatoires.
10. EXERCICES TYPES
Schema de reference pour les exercices :
Famille (NumFam, NomFam)
Produit (NumPro, NomPro, PrixVente, StockPro, SeuilPro, #NumFam)
Client (NumCli, NomCli, PrenomCli, VilleCli)
Facture (NumFac, DateFac, #NumCli)
Contenir (CodePro, NumFac, PrixVente, Qte)
Exercices de selection
• Afficher les inscriptions de l'annee academique 2022-2023 :
SELECT * FROM INSCRIPTION WHERE AnneeAca = '2022-2023' ;
• Classes avec mensualite > 50000 et droits entre 100000 et 150000 :
SELECT * FROM CLASSE
WHERE Mensualite > 50000
AND DroitIns BETWEEN 100000 AND 150000 ;
• Etudiants dont le nom commence par MA :
SELECT * FROM ETUDIANT WHERE NomEtu LIKE 'MA%' ;
• Etudiants dont le nom commence par M et se termine par E :
SELECT * FROM ETUDIANT WHERE NomEtu LIKE 'M%E' ;
• Les cinq classes avec les plus grandes mensualites :
SELECT * FROM CLASSE
ORDER BY Mensualite DESC
LIMIT 5 ;
• Produits ayant atteint leur seuil (Stock <= Seuil) :
SELECT NumPro, NomPro, StockPro, SeuilPro
FROM Produit
WHERE StockPro <= SeuilPro ;
• Valeur du stock pour chaque produit :
SELECT NomPro, PrixVente, StockPro,
PrixVente * StockPro AS ValeurStock
FROM Produit ;
11. RECAP DES COMMANDES ESSENTIELLES
Categorie Commande Role
LDD CREATE DATABASE Creer une base de donnees
LDD DROP DATABASE Supprimer une base de donnees
LDD CREATE TABLE Creer une table
LDD DROP TABLE Supprimer une table
LDD ALTER TABLE ADD Ajouter une colonne
LDD ALTER TABLE DROP Supprimer une colonne
LDD ALTER TABLE CHANGE Renommer/modifier une colonne
LDD ALTER TABLE MODIFY Modifier le type d'une colonne
LMD INSERT INTO Inserer des donnees
LMD UPDATE ... SET Modifier des donnees
LMD DELETE FROM Supprimer des lignes
LMD SELECT ... FROM Lire et afficher des donnees
Filtres WHERE Filtrer les lignes
Filtres BETWEEN Intervalle de valeurs
Filtres LIKE Recherche approximative
Filtres IN Liste de valeurs
Filtres IS NULL Valeur nulle
Tri/Limite ORDER BY ASC|DESC Trier les resultats
Tri/Limite LIMIT n OFFSET m Limiter les resultats
Agregation COUNT / SUM / AVG Fonctions de calcul
Agregation MIN / MAX Minimum et maximum
--- Fin du cours Introduction au SQL ---