SQL
Resumé Complet
Langage de Base de Donnees Relationnelles — DDL, DML, Contraintes et Bonnes Pratiques
Document de Reference | 2025
Table des Matieres
Clic droit sur la table des matieres → Mettre à jour les champs
Introduction et Historique de SQL........................................................................................................3
Les Quatre Langages SQL......................................................................................................................4
Types de Donnees................................................................................................................................5
Types MySQL.........................................................................................................................................5
Types Oracle..........................................................................................................................................5
Types Avances.......................................................................................................................................6
Langage de Definition de Donnees (DDL)..............................................................................................7
CREATE DATABASE et CREATE TABLE......................................................................................................7
Contraintes d'Integrite..........................................................................................................................8
ALTER TABLE........................................................................................................................................10
DROP TABLE et TRUNCATE TABLE........................................................................................................11
Langage de Manipulation de Donnees (DML)......................................................................................12
INSERT.................................................................................................................................................12
UPDATE...............................................................................................................................................13
DELETE et Integrite Referentielle.........................................................................................................14
Relations entre Tables........................................................................................................................15
Regles Importantes et Erreurs Frequentes..........................................................................................16
SQL - Resumé Complet
Introduction et Historique de SQL
SQL (Structured Query Language, ou Langage de Requetes Structure en français) est le langage
standard de gestion des bases de donnees relationnelles. Il est derive de l'algebre relationnelle et de
SEQUEL, developpe aux laboratoires de recherche IBM à San Jose entre 1974 et 1976.
SQL est un langage complet qui permet de gerer l'ensemble des operations sur une base de donnees
relationnelle. Il est supporte par la quasi-totalite des systemes de gestion de bases de donnees
(SGBD) modernes.
Principaux SGBD supportant SQL
• ORACLE (Oracle Corporation, 1977)
• INGRES (Ingres Technology, 1980)
• INFORMIX (Informix Inc., 1981)
• DB2 (IBM, 1984)
• SYBASE (Sybase Inc., 1984)
• MySQL, PostgreSQL, SQL Server, SQLite (plus récents)
Les Quatre Langages SQL
SQL regroupe en realite quatre langages distincts, chacun dédie à un aspect particulier de la gestion
des donnees :
1. Langage de Definition de Donnees (LDD / DDL)
Le DDL permet de definir et de modifier la structure de la base de donnees. Il comprend les
commandes :
• CREATE TABLE : creation d'une table
• ALTER TABLE : modification d'une table existante
• DROP TABLE : suppression d'une table
• CREATE VIEW : creation d'une vue
• CREATE INDEX : creation d'un index
3 / 12
SQL - Resumé Complet
2. Langage de Manipulation de Donnees (LMD / DML)
Le DML permet de manipuler les donnees contenues dans les tables. Il comprend les commandes :
• INSERT : insertion de nouveaux tuples (lignes)
• UPDATE : mise à jour de tuples existants
• DELETE : suppression de tuples
3. Langage d'Interrogation de Donnees (LID / DQL)
Le DQL permet d'extraire des donnees via la commande SELECT :
SELECT ... FROM ... WHERE ...;
4. Langage de Controle de Donnees (LCD / DCL)
Le DCL gere les droits d'acces et les transactions :
• GRANT / REVOKE : attribution et revocation de privileges
• BEGIN / END TRANSACTION : gestion des transactions
• COMMIT / ROLLBACK : validation ou annulation des modifications
Types de Donnees
Une base de donnees contient des tables, chaque table est organisee en colonnes, et chaque
colonne stocke des donnees d'un type particulier. Les types de donnees varient d'un SGBD à un
autre, bien que les concepts fondamentaux restent identiques.
Types principaux - MySQL
Type MySQL Description
INTEGER Nombres entiers
FLOAT Nombres decimaux (reels)
DECIMAL(n,m) Decimal avec n chiffres max, m apres la virgule
VARCHAR(n) Chaine de n caracteres de longueur variable
DATE Date (format standard : DD-MON-YY)
4 / 12
SQL - Resumé Complet
Types principaux - Oracle
Type Oracle Description
NUMBER Nombres entiers
NUMBER(n) Nombre entier avec valeur max de n chiffres
NUMBER(n,m) Decimal avec n chiffres max, m apres virgule
CHAR(n) Chaine de n caracteres de longueur fixe (1-2000)
VARCHAR2(n) Chaine de n caracteres de longueur variable (1-4000)
DATE Date (format standard : DD-MON-YY)
Types avances
MySQL propose egalement des types specialises :
• ENUM('un', 'deux', 'trois') : enumeration de valeurs possibles (jusqu'a 65 535 elements)
• SET('un', 'deux') : ensemble de valeurs, permet de stocker plusieurs choix simultanement
(jusqu'a 64 elements)
Exemple avec ENUM et SET :
CREATE TABLE films ( id INTEGER AUTO_INCREMENT PRIMARY KEY, titre
VARCHAR(100), annee INTEGER, realisateur VARCHAR(50), langue
ENUM('francais', 'anglais', 'espagnol'), genres SET('Action', 'Comedie',
'Drame', 'Horreur', 'Romance', 'Science-fiction'), budget BIGINT
);
Langage de Definition de Donnees (DDL)
CREATE DATABASE et CREATE TABLE
Avant de creer des tables, il faut creer la base de donnees qui les contiendra :
CREATE DATABASE ma_base;
Au sein d'un serveur, on peut creer plusieurs bases de donnees. Chaque base possede ses propres
tables, mais une table appartient à une seule base. On peut associer des droits d'acces aux
utilisateurs pour chaque base et chaque table.
La commande CREATE TABLE permet de definir le schema d'une table (noms des attributs, types de
donnees et contraintes) :
CREATE TABLE ETUDIANT ( Id_Etudiant NUMBER PRIMARY KEY, Nom VARCHAR2(30),
Age NUMBER );
A sa creation, une table est vide : on ne cree que le schema. D'autres commandes SQL permettent
5 / 12
SQL - Resumé Complet
ensuite d'inserer ou de supprimer des lignes.
Contraintes d'Integrite
Une contrainte d'integrite est une propriete des donnees que le systeme garantit automatiquement.
SQL propose plusieurs types de contraintes :
Contrainte NOT NULL
Si la valeur d'un attribut n'est pas specifiee pendant l'insertion, la valeur NULL (vide) lui est affectee
par defaut. La contrainte NOT NULL impose que l'attribut ait toujours une valeur non nulle.
CREATE TABLE Films ( titre VARCHAR(100) NOT NULL, annee INTEGER NOT NULL,
realisateur VARCHAR(30) NOT NULL );
Effet : toute insertion ne specifiant pas le titre ou l'annee generera une erreur.
Contraintes de cle - Cle primaire (PRIMARY KEY)
Une cle d'une table est le plus petit sous-ensemble d'attributs permettant d'identifier un tuple de
maniere unique. La cle primaire est la cle choisie comme identifiant principal.
Proprietes d'une cle primaire :
• Unicite : pas de doublons possibles
• Non-nullite : aucune valeur NULL n'est autorisee (PRIMARY KEY implique NOT NULL)
Exemple avec une cle primaire simple :
CREATE TABLE Films ( titre VARCHAR(30) PRIMARY KEY, annee INTEGER NOT
NULL, realisateur VARCHAR(30) );
Exemple avec une cle primaire composee :
CREATE TABLE Batiment ( ville VARCHAR(50), rue VARCHAR(100), numero
INTEGER, etages INTEGER, PRIMARY KEY (ville, rue, numero) );
Cles candidates (UNIQUE)
Les autres cles de la table, non choisies comme cles primaires, peuvent etre specifiees avec la
contrainte UNIQUE. Une cle candidate garantit l'unicite mais autorise les valeurs NULL
(contrairement à PRIMARY KEY).
CREATE TABLE Personne ( nss VARCHAR(20) PRIMARY KEY, nom VARCHAR(50) NOT
NULL, prenom VARCHAR(50) NOT NULL, naissance INTEGER, pays VARCHAR(4),
UNIQUE (nom, prenom, naissance) );
Cles etrangeres (FOREIGN KEY)
Une cle etrangere etablit une relation entre deux tables. Elle garantit qu'une valeur dans une table
correspond à une valeur existante dans une autre table (referential integrity).
6 / 12
SQL - Resumé Complet
CREATE TABLE Pays ( code VARCHAR(4) PRIMARY KEY, nom VARCHAR(50) );
CREATE TABLE Personne ( nss VARCHAR(20) PRIMARY KEY, nom VARCHAR(50) NOT
NULL, prenom VARCHAR(50) NOT NULL, naissance INTEGER, pays VARCHAR(4),
UNIQUE (nom, prenom, naissance), FOREIGN KEY (pays) REFERENCES Pays(code) );
Regles importantes :
• Les attributs relies doivent avoir exactement le meme type
• Les attributs references doivent etre une cle primaire (ou UNIQUE) de leur table
• Si aucun attribut n'est specifie apres REFERENCES, c'est la cle primaire de la table referencee qui
est utilisee
Contrainte CHECK
La clause CHECK permet de definir des conditions que les valeurs doivent satisfaire.
CREATE TABLE Article ( id INTEGER PRIMARY KEY, nom VARCHAR(50) NOT NULL,
prix NUMERIC NOT NULL, prix_solde NUMERIC, CHECK (prix > prix_solde) );
CREATE TABLE Reservation ( id INTEGER PRIMARY KEY, nom VARCHAR(50) NOT
NULL, salle VARCHAR(50), debut TIMESTAMP, fin TIMESTAMP, CHECK (debut
< fin) );
Nommer une contrainte
Le mot-cle CONSTRAINT permet de nommer une contrainte, ce qui clarifie les messages d'erreur et
permet de la modifier ulterieurement :
CREATE TABLE Produits ( prod_no INTEGER PRIMARY KEY, nom TEXT, prix
NUMERIC CONSTRAINT prix_positif CHECK (prix > 0) );
Exemple d'erreur claire :
INSERT INTO Produits VALUES (2, 'Souris', -10); -- Erreur : Violation de la
contrainte 'prix_positif'
ALTER TABLE
La commande ALTER TABLE permet de modifier la structure d'une table existante :
Ajouter une colonne
ALTER TABLE <nom> ADD COLUMN nouvelle_colonne type; ALTER TABLE Films ADD
COLUMN duree INT;
Supprimer une colonne
ALTER TABLE <nom> DROP COLUMN nom_colonne; ALTER TABLE Films DROP COLUMN
acteur;
Renommer une table ou une colonne
ALTER TABLE Films RENAME TO Movies; ALTER TABLE Movies RENAME COLUMN titre TO
title;
7 / 12
SQL - Resumé Complet
Modifier le type d'une colonne
-- MySQL ALTER TABLE Produits MODIFY prix INTEGER; -- Attention aux
contraintes existantes ALTER TABLE Produits DROP CONSTRAINT prix_positif;
ALTER TABLE Produits ALTER COLUMN prix TYPE INTEGER;
Ajouter ou supprimer des contraintes
-- Ajouter NOT NULL ALTER TABLE Produit ALTER COLUMN prix SET NOT NULL; --
Supprimer NOT NULL ALTER TABLE Produit ALTER COLUMN prix DROP NOT NULL; --
Ajouter une cle etrangere ALTER TABLE Reservation ADD CONSTRAINT nomfk FOREIGN
KEY (nom) REFERENCES Personne(nom); -- Ajouter une contrainte CHECK ALTER
TABLE Produits ADD CONSTRAINT prix_positif CHECK (prix > 0); -- Supprimer une
contrainte ALTER TABLE Produits DROP CONSTRAINT prix_positif; -- Renommer une
contrainte ALTER TABLE Produits RENAME CONSTRAINT prix_positif TO
prix_sup_zero;
DROP TABLE et TRUNCATE TABLE
Deux commandes permettent de supprimer des donnees, avec des comportements differents :
• DROP TABLE : detruit completement la table (schema + donnees)
• TRUNCATE TABLE : supprime toutes les donnees mais conserve le schema
DROP TABLE Films; -- Suppression complete TRUNCATE TABLE Films; --
Conservation du schema
Difference importante : TRUNCATE reinitialise la valeur de l'auto-increment, contrairement à DELETE.
TRUNCATE est egalement plus rapide.
Langage de Manipulation de Donnees (DML)
INSERT
La commande INSERT permet d'ajouter des donnees dans une table.
Insertion complete
INSERT INTO Films VALUES (1, 'Alien', 1979, 'Scott', 11000000);
Insertion partielle
On peut ne saisir que certains attributs, dans un ordre different de celui defini :
INSERT INTO Films (realisateur, titre) VALUES ('Korine', 'Gummo');
Les attributs non specifies recoivent la valeur NULL (generera une erreur si NOT NULL est defini).
Valeurs par defaut (DEFAULT)
La clause DEFAULT permet de definir une valeur par defaut pour un attribut :
8 / 12
SQL - Resumé Complet
CREATE TABLE Notation ( titre_film VARCHAR(50) NOT NULL, pseudo
VARCHAR(50) NOT NULL, note INTEGER NOT NULL DEFAULT 0 ); INSERT INTO
Notation (titre_film, pseudo) VALUES ('Alien', 'lili66'); -- La note sera
automatiquement 0, et non NULL
Cles à auto-incrementation
La plupart des SGBD permettent de definir des attributs auto-incrementes :
CREATE TABLE Artiste ( id INTEGER AUTO_INCREMENT PRIMARY KEY, nom
VARCHAR(50) NOT NULL, prenom VARCHAR(50) NOT NULL, naissance INTEGER,
UNIQUE (nom, prenom, naissance) ); INSERT INTO Artiste (nom, prenom,
naissance) VALUES ('Scott', 'Ridley', 1943); -- L'id est automatiquement
attribue (dernier id + 1)
UPDATE
La commande UPDATE modifie les donnees existantes. La clause WHERE determine quelles lignes
sont affectees.
-- Forme generale UPDATE <table> SET att1 = val1, ..., attn = valn WHERE
<condition>; -- Exemple simple UPDATE Films SET realisateur = 'Wu' WHERE
realisateur = 'Woo';
-- Exemple avec calcul UPDATE employe SET salaire = salaire * 1.1, prime =
prime + 150 WHERE sexe = 'F';
ATTENTION : sans clause WHERE, toutes les lignes de la table sont modifiees !
DELETE et Integrite Referentielle
La commande DELETE supprime des lignes d'une table. La clause WHERE determine quelles lignes
sont concernees.
-- Suppression conditionnelle DELETE FROM Films WHERE annee <= 1960; --
Suppression de toutes les lignes DELETE FROM Films; -- Equivalent à TRUNCATE,
mais plus lent
Options de gestion de l'integrite referentielle
Lorsqu'une table est referencee par une cle etrangere, la suppression de donnees necessite une
strategie :
Option Comportement Usage
RESTRICT Interdit la suppression si des lignes liees existent Securite maximale
CASCADE Supprime automatiquement les lignes liees Nettoyage automatique
SET NULL Conserve la ligne mais met la FK a NULL Preservation partielle
Exemple d'implementation avec CASCADE :
ALTER TABLE casting ADD CONSTRAINT fk_film FOREIGN KEY (id_film) REFERENCES
films(id) ON DELETE CASCADE;
9 / 12
SQL - Resumé Complet
Relations entre Tables
Les bases de donnees relationnelles organisent les donnees selon differents types de relations :
Relation 1..N (Un à Plusieurs)
Une ligne de la table principale peut etre associee à plusieurs lignes de la table dependante. Une cle
etrangere dans la table dependante suffit.
CREATE TABLE CLIENT ( id_client NUMBER PRIMARY KEY, nom VARCHAR2(50) );
CREATE TABLE COMMANDE ( id_cmd NUMBER PRIMARY KEY, montant NUMBER,
id_client NUMBER, FOREIGN KEY (id_client) REFERENCES CLIENT(id_client) );
Relation N..N (Plusieurs à Plusieurs)
Plusieurs lignes d'une table peuvent etre associees à plusieurs lignes d'une autre table. Cette relation
necessite une table intermediaire (table de junction).
CREATE TABLE ETUDIANT ( Id_Etudiant NUMBER PRIMARY KEY, Nom
VARCHAR2(30) ); CREATE TABLE COURS ( Id_Cours NUMBER PRIMARY KEY,
Nom_Cours VARCHAR2(30) ); CREATE TABLE INSCRIPTION ( Id_Etudiant NUMBER,
Id_Cours NUMBER, PRIMARY KEY (Id_Etudiant, Id_Cours), FOREIGN KEY
(Id_Etudiant) REFERENCES ETUDIANT(Id_Etudiant), FOREIGN KEY (Id_Cours)
REFERENCES COURS(Id_Cours) );
Regles Importantes et Erreurs Frequentes
Ordre d'insertion
Toujours inserer les donnees dans l'ordre suivant :
0. Tables principales (celles sans cles etrangeres)
1. Tables dependantes (celles avec des cles etrangeres)
Respect des contraintes
• CHECK : les valeurs doivent satisfaire la condition definie
• FOREIGN KEY : la valeur referencee doit exister dans la table mere
• UNIQUE : pas de doublons autorises
• NOT NULL : une valeur obligatoire doit etre fournie
10 / 12
SQL - Resumé Complet
Erreurs frequentes à eviter
Erreur Solution
Inserer une valeur inexistante (violation FK) Verifier l'existence dans la
table mere
Ne pas respecter la contrainte CHECK Verifier la condition avant
insertion
Oublier WHERE dans UPDATE ou DELETE Toujours specifier la condition
Doubler une valeur UNIQUE Verifier l'unicite avant
insertion
Mauvais type de donnees Respecter le type defini dans
le schema
Ordre d'insertion incorrect Inserer d'abord les tables
principales
Bonnes pratiques
• Toujours nommer ses contraintes avec CONSTRAINT pour des messages d'erreur clairs
• Utiliser TRUNCATE plutot que DELETE sans WHERE pour vider une table (plus rapide)
• Verifier l'ordre d'insertion pour respecter l'integrite referentielle
• Tester ses requetes avec une transaction (BEGIN...ROLLBACK) avant de les executer en
production
• Ne jamais oublier la clause WHERE dans UPDATE et DELETE sauf intention explicite
11 / 12
SQL - Resumé Complet
Bonne chance !
Resumé SQL Complet
Document de Reference | SQL - Bases de Donnees Relationnelles
12 / 12