CRUD en SQL
CREATE, INSERT, SELECT, UPDATE, DELETE avec WHERE.
Objectifs
À la fin de cette leçon, vous saurez :
- créer des tables avec CREATE TABLE ;
- insérer, lire, modifier, supprimer avec INSERT/SELECT/UPDATE/DELETE ;
- filtrer et trier avec WHERE, ORDER BY, LIMIT.
Créer les tables
CREATE TABLE users (
id integer GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
nom text NOT NULL,
email text UNIQUE NOT NULL
);
CREATE TABLE tasks (
id integer GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
titre text NOT NULL,
fait boolean NOT NULL DEFAULT false,
user_id integer REFERENCES users(id)
);
GENERATED ... IDENTITY : la base attribue l'id elle-même. NOT NULL, UNIQUE, DEFAULT : contraintes déclarées une fois, respectées toujours.
Insérer
INSERT INTO users (nom, email) VALUES ('Ana', 'ana@exemple.fr');
INSERT INTO tasks (titre, user_id) VALUES
('Courses', 1),
('Réviser SQL', 1);
Lire : SELECT et ses clauses
SELECT * FROM tasks; -- tout
SELECT titre, fait FROM tasks; -- colonnes choisies
SELECT * FROM tasks WHERE user_id = 1; -- filtre
SELECT * FROM tasks ORDER BY titre ASC; -- tri
SELECT * FROM tasks LIMIT 5 OFFSET 10; -- pagination !
SELECT COUNT(*) FROM tasks WHERE fait = false;
WHERE accepte AND/OR, comparaisons, LIKE '%texte%'. Ces quatre clauses (WHERE/ORDER BY/LIMIT/OFFSET) couvrent 95 % des besoins de lecture.
Modifier et supprimer — avec WHERE
UPDATE tasks SET fait = true WHERE id = 11;
DELETE FROM tasks WHERE id = 12;
Avertissement majeur : sans WHERE, UPDATE/DELETE touchent TOUTES les lignes. Le réflexe professionnel : écrire d'abord le SELECT correspondant, vérifier qu'il cible les bonnes lignes, puis seulement transformer en UPDATE/DELETE.
Exercice
Sur vos tables users/tasks :
- Ajoutez deux utilisateurs et trois tâches réparties entre eux.
- Listez les tâches non terminées d'Ana, triées par titre.
- Comptez les tâches de Bob.
- Marquez toutes ses tâches comme faites... après avoir vérifié la sélection par un SELECT.
- Supprimez une tâche précise.
Résumé
- CREATE définit structure + contraintes ; INSERT remplit.
- SELECT + WHERE/ORDER BY/LIMIT : lectures ciblées.
- UPDATE/DELETE sans WHERE = catastrophe ; toujours prévisualiser en SELECT.
Correction disponibleCherchez d’abord par vous-même.Voir la correction
Correction
Réponses détaillées
Question 2.
SELECT titre FROM tasks
JOIN users ON tasks.user_id = users.id
WHERE users.nom = 'Ana' AND fait = false
ORDER BY titre;
(Le JOIN est détaillé dans la prochaine leçon ; une version à deux étapes est acceptable pour l'instant.)
Question 4. Prévisualisation :
SELECT * FROM tasks WHERE user_id = (SELECT id FROM users WHERE nom = 'Bob');
-- vérifier la liste...
UPDATE tasks SET fait = true WHERE user_id = (SELECT id FROM users WHERE nom = 'Bob');