Aller au contenu

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

crud.png

Source image

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 email

➡️ MySQL - INSERT Statement

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 :

  • id est auto-incrémenté, donc il n'a pas besoin d'être fourni
  • Seules les colonnes name et email doivent être renseignées

Insertion simple

insert into user (name, email)
values ('Alice Dupont', 'alice.dupont@example.com');
id name email
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 email
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 email
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.

➡️ MySQL - SELECT Statement

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 email
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 email
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 email
1 Alice Dupont alice.dupont@example.com

Exclure les valeurs NULL

select *
from user
where email is not null;
id name email
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 email
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.

➡️ MySQL - UPDATE Statement

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 email
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 email
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 email
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 email
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 email
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.

➡️ MySQL - DELETE Statement

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 email
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 email
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 email
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 email

Jointure

➡️ MySQL - JOIN Clause

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 email
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

mysql-join.png

Source image