CRUD
CRUD est un acronyme qui désigne les quatre opérations fondamentales que l'on peut effectuer sur des données stockées dans une base de données relationnelle :
- Create : créer / insérer des données
- Read : lire / sélectionner des données
- Update : modifier des données
- Delete : supprimer des données

Create
Contexte : Insertion de données dans la table user.
create table user (
id int auto_increment primary key,
name varchar(50),
email varchar(254)
);
| id | name | |
|---|---|---|
Syntaxe générale
insert into table_name (column1, column2, column3, …)
values (value1, value2, value3, …);
La commande INSERT permet d'ajouter une ou plusieurs lignes dans une table SQL.
Dans le cas de la table user :
idest auto-incrémenté, donc il n'a pas besoin d'être fourni- Seules les colonnes
nameetemaildoivent être renseignées
Insertion simple
insert into user (name, email)
values ('Alice Dupont', 'alice.dupont@example.com');
| id | name | |
|---|---|---|
| 1 | Alice Dupont | alice.dupont@example.com |
Insertion multiple
insert into user (name, email)
values ('Bob Martin', 'bob.martin@example.com'),
('Claire Lune', 'claire.lune@example.com');
| id | name | |
|---|---|---|
| 1 | Alice Dupont | alice.dupont@example.com |
| 2 | Bob Martin | bob.martin@example.com |
| 3 | Claire Lune | claire.lune@example.com |
Insertion partielle (valeur manquante)
insert into user (name)
values ('Daniel Morand');
| id | name | |
|---|---|---|
| 1 | Alice Dupont | alice.dupont@example.com |
| 2 | Bob Martin | bob.martin@example.com |
| 3 | Claire Lune | claire.lune@example.com |
| 4 | Daniel Morand | NULL |
Read
Contexte : Récupération de données dans la table user.
Syntaxe générale
select column1, column2, …
from table_name
where condition;
La commande SELECT est utilisée pour lire des données dans une table SQL.
Dans la table user (colonnes id, name, email), plusieurs variantes permettent d'extraire les informations souhaitées.
Sélectionner toutes les colonnes
select *
from user;
| id | name | |
|---|---|---|
| 1 | Alice Dupont | alice.dupont@example.com |
| 2 | Bob Martin | bob.martin@example.com |
| 3 | Claire Lune | claire.lune@example.com |
| 4 | Daniel Morand | NULL |
Sélectionner certaines colonnes
select name, email
from user;
| name | |
|---|---|
| Alice Dupont | alice.dupont@example.com |
| Bob Martin | bob.martin@example.com |
| Claire Lune | claire.lune@example.com |
| Daniel Morand | NULL |
Filtrer les résultats avec where
select *
from user
where name = 'Alice Dupont';
| id | name | |
|---|---|---|
| 1 | Alice Dupont | alice.dupont@example.com |
Exclure les valeurs NULL
select *
from user
where email is not null;
| id | name | |
|---|---|---|
| 1 | Alice Dupont | alice.dupont@example.com |
| 2 | Bob Martin | bob.martin@example.com |
| 3 | Claire Lune | claire.lune@example.com |
Trier les résultats
select *
from user
order by name desc;
| id | name | |
|---|---|---|
| 4 | Daniel Morand | NULL |
| 3 | Claire Lune | claire.lune@example.com |
| 2 | Bob Martin | bob.martin@example.com |
| 1 | Alice Dupont | alice.dupont@example.com |
Update
Contexte : Mise à jour de données dans la table user.
Syntaxe générale
update table_name
set column1 = value1,
column2 = value2,
…
where condition;
La commande UPDATE est utilisée pour modifier des données existantes dans une table.
Dans la table user, elle permet de changer les valeurs des colonnes name ou email pour un ou plusieurs enregistrements.
Données initiales
| id | name | |
|---|---|---|
| 1 | Alice Dupont | alice.dupont@example.com |
| 2 | Bob Martin | bob.martin@example.com |
| 3 | Claire Lune | claire.lune@example.com |
| 4 | Daniel Morand | NULL |
Mise à jour d'un utilisateur spécifique
update user
set email = 'bob.newemail@example.com'
where name = 'Bob Martin';
| id | name | |
|---|---|---|
| 1 | Alice Dupont | alice.dupont@example.com |
| 2 | Bob Martin | bob.newemail@example.com |
| 3 | Claire Lune | claire.lune@example.com |
| 4 | Daniel Morand | NULL |
Mise à jour de plusieurs colonnes
update user
set name = 'Claire Dupond',
email = 'claire.dupond@example.com'
where id = 3;
| id | name | |
|---|---|---|
| 1 | Alice Dupont | alice.dupont@example.com |
| 2 | Bob Martin | bob.newemail@example.com |
| 3 | Claire Dupond | claire.dupond@example.com |
| 4 | Daniel Morand | NULL |
Mise à jour conditionnelle
update user
set email = 'default@example.com'
where email is null;
| id | name | |
|---|---|---|
| 1 | Alice Dupont | alice.dupont@example.com |
| 2 | Bob Martin | bob.newemail@example.com |
| 3 | Claire Dupond | claire.dupond@example.com |
| 4 | Daniel Morand | default@example.com |
🚨 Attention aux mises à jour sans WHERE
update user
set email = 'updated@example.com';
Cela modifie toutes les lignes de la table.
| id | name | |
|---|---|---|
| 1 | Alice Dupont | updated@example.com |
| 2 | Bob Martin | updated@example.com |
| 3 | Claire Dupond | updated@example.com |
| 4 | Daniel Morand | updated@example.com |
Delete
Contexte : Suppression de données dans la table user.
Syntaxe générale
delete
from table_name
where condition;
La commande DELETE est utilisée pour supprimer des enregistrements (lignes) d'une table.
⚠️ Elle doit être utilisée avec précaution : une fois supprimées, les données ne peuvent généralement pas être récupérées.
Données initiales
| id | name | |
|---|---|---|
| 1 | Alice Dupont | alice.dupont@example.com |
| 2 | Bob Martin | bob.martin@example.com |
| 3 | Claire Lune | claire.lune@example.com |
| 4 | Daniel Morand | NULL |
Supprimer un enregistrement spécifique
delete
from user
where name = 'Bob Martin';
| id | name | |
|---|---|---|
| 1 | Alice Dupont | alice.dupont@example.com |
| 3 | Claire Lune | claire.lune@example.com |
| 4 | Daniel Morand | NULL |
Supprimer des enregistrements selon une condition
delete
from user
where email is null;
| id | name | |
|---|---|---|
| 1 | Alice Dupont | alice.dupont@example.com |
| 3 | Claire Lune | claire.lune@example.com |
🚨 Attention à la suppression sans WHERE
delete
from user;
Cela supprime tous les enregistrements de la table.
| id | name | |
|---|---|---|
Jointure
Les jointures (JOIN) permettent de combiner les lignes de deux tables ou plus selon une relation définie, généralement via une clé étrangère.
Pour illustrer les différents types de jointures, ajoutons une table purchase liée à user.
Tables de départ
Table : user
| id | name | |
|---|---|---|
| 1 | Alice Dupont | alice.dupont@example.com |
| 2 | Bob Martin | bob.martin@example.com |
| 3 | Claire Lune | claire.lune@example.com |
| 4 | Daniel Morand | NULL |
Table : purchase
create table purchase (
id int auto_increment primary key,
user_id int,
date date,
amount decimal(6,2),
foreign key (user_id) references user(id)
);
insert into purchase (user_id, date, amount)
values (1, '2023-01-15', 150.00),
(2, '2023-01-17', 200.00),
(1, '2023-02-01', 25.00);
| id | user_id | date | amount |
|---|---|---|---|
| 1 | 1 | 2023-01-15 | 150.00 |
| 2 | 2 | 2023-01-17 | 200.00 |
| 3 | 1 | 2023-02-01 | 25.00 |
Types de jointures
🔹 INNER JOIN
Récupère uniquement les lignes avec correspondance dans les deux tables.
select user.name, purchase.amount
from user
inner join purchase on user.id = purchase.user_id;
| name | amount |
|---|---|
| Alice Dupont | 150.00 |
| Bob Martin | 200.00 |
| Alice Dupont | 25.00 |
🔹 LEFT JOIN (LEFT OUTER JOIN)
Récupère tous les enregistrements de la table de gauche, même sans correspondance dans la table de droite.
Si aucune correspondance n'est trouvée → valeurs NULL.
select user.name, purchase.amount
from user
left join purchase on user.id = purchase.user_id;
| name | amount |
|---|---|
| Alice Dupont | 150.00 |
| Alice Dupont | 25.00 |
| Bob Martin | 200.00 |
| Claire Lune | NULL |
| Daniel Morand | NULL |
🔹 RIGHT JOIN (RIGHT OUTER JOIN)
Récupère tous les enregistrements de la table de droite et ceux correspondants de la table de gauche.
Moins utilisé que LEFT JOIN (souvent réécrit en LEFT JOIN inversé).
select user.name, purchase.amount
from user
right join purchase on user.id = purchase.user_id;
| name | amount |
|---|---|
| Alice Dupont | 150.00 |
| Bob Martin | 200.00 |
| Alice Dupont | 25.00 |
LEFT JOIN avec exclusion (anti-join)
Permet de trouver les éléments présents dans la table de gauche sans correspondance dans la droite.
Exemple : trouver les utilisateurs sans achats.
select user.name
from user
left join purchase on user.id = purchase.user_id
where purchase.user_id is null;
| name | amount |
|---|---|
| Claire Lune | NULL |
| Daniel Morand | NULL |
Vue d'ensemble des types de jointures
