Aller au contenu

CRUD

CRUD est un acronyme pour Create, Read, Update, Delete. Ce sont les quatre opérations de base que vous pouvez effectuer sur des données stockées dans une base de données SQL.

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 en SQL est utilisée pour ajouter de nouvelles lignes à une table.

Dans le contexte de la table user ci-dessus, cette commande permet d'insérer des données dans les colonnes name et email. La colonne id est une colonne auto-incrémentée et une clé primaire, donc elle générera automatiquement une valeur unique pour chaque nouvelle ligne. Cela signifie qu'il n'est pas nécessaire de spécifier une valeur pour cette colonne lors de l'insertion.

-- 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 sélective
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 en SQL est utilisée pour lire des données à partir de tables de bases de données. Toujours dans le contexte de la table user, qui contient les colonnes id, name, et email, on peut utiliser différentes variantes de la commande SELECT pour extraire des informations spécifiques.

-- 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
-- Utilisation de la clause 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
-- Tri des 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 en SQL est utilisée pour modifier les données existantes dans une table. Toujours dans le contexte de la table user, on peut utiliser UPDATE pour changer les valeurs dans les colonnes name et email pour un ou plusieurs utilisateurs.

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
--  Mise à jour de toutes les lignes de la table en même temps
update user
set email = 'updated@example.com';
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 en SQL est utilisée pour supprimer des enregistrements (lignes) d'une table. C'est une commande puissante et doit être utilisée avec précaution, car une fois qu'un enregistrement est supprimé, il ne peut généralement pas être récupéré.

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 avec une condition spécifique
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
-- Suppression de tous les enregistrements de la table
delete
from user;
id name email

Jointure

➡️ MySQL - JOIN Clause

Les jointures en SQL sont utilisées pour combiner des lignes de deux tables ou plus, basées sur une colonne de relation commune entre ces tables. Pour illustrer les jointures avec la table user, une autre table à joindre est nécessaire. La table purchase suivante permettra d'enregistrer les achats réalisés par les utilisateurs de la 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
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 les enregistrements qui ont des valeurs correspondantes dans les deux tables.

select user.name, purchase.amount
from user
inner join purchase on user.id = purchase.user_id;

Cette requête retournera les noms des utilisateurs et les montants pour les utilisateurs qui ont fait des achats.

name amount
Alice Dupont 150.00
Bob Martin 200.00
Alice Dupont 25.00

LEFT JOIN (ou LEFT OUTER JOIN) : Récupère tous les enregistrements de la table de gauche (left), et les enregistrements correspondants de la table de droite. Si aucune correspondance n'est trouvée, les résultats de la table de droite auront des valeurs NULL.

select user.name, purchase.amount
from user
left join purchase on user.id = purchase.user_id;

Cette requête retournera tous les utilisateurs, y compris ceux qui n'ont pas fait d'achats (les champs de la table purchase seront NULL pour ces utilisateurs).

name amount
Alice Dupont 150.00
Alice Dupont 25.00
Bob Martin 200.00
Claire Lune NULL
Daniel Morand NULL

RIGHT JOIN (ou RIGHT OUTER JOIN) : Récupère tous les enregistrements de la table de droite (right), et les enregistrements correspondants de la table de gauche. Si aucune correspondance n'est trouvée, les résultats de la table de gauche auront des valeurs NULL.

select user.name, purchase.amount
from user
right join purchase on user.id = purchase.user_id;

Dans la pratique, les RIGHT JOINs sont moins courants et peuvent souvent être réécrits en tant que LEFT JOINs pour une meilleure lisibilité.

name amount
Alice Dupont 150.00
Bob Martin 200.00
Alice Dupont 25.00

LEFT JOIN avec Exclusion : Cette jointure est une variante du LEFT JOIN qui permet de récupérer tous les enregistrements de la table de gauche, tout en excluant ceux qui ont une correspondance dans la table de droite. Cela est utile pour trouver des enregistrements présents dans une table mais absents dans l'autre.

Supposons qu'on désire trouver les utilisateurs qui n'ont passé aucune commande. Il est possible d'utiliser un LEFT JOIN combiné avec une condition WHERE pour exclure les utilisateurs ayant des commandes.

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 jointures

mysql-join.png

Source image