Informatique

SQL Pratique

Maitriser les requetes SQL en production

🔗 Les JOIN Explained

INNER JOIN - Intersection

Retourne SEULEMENT les lignes qui matchent dans les 2 tables.

SELECT users.name, orders.total
FROM users
INNER JOIN orders ON users.id = orders.user_id;
-- users:    1:Alice, 2:Bob, 3:Charlie
-- orders:   {user_id:1, total:100}, {user_id:2, total:200}
-- Résultat: Alice-100, Bob-200 (Charlie exclu !)

LEFT JOIN - Tout à Gauche

Retourne TOUTES les lignes de gauche + matches de droite (NULL si pas de match).

SELECT users.name, orders.total
FROM users
LEFT JOIN orders ON users.id = orders.user_id;
-- Résultat: 
-- Alice-100
-- Bob-200
-- Charlie-NULL (même sans commande !)

RIGHT JOIN - Tout à Droite

Inverse de LEFT JOIN (rarement utilisé, on préfère LEFT).

SELECT users.name, orders.total
FROM users
RIGHT JOIN orders ON users.id = orders.user_id;

Les JOIN en un coup d'œil

Clique sur un type de JOIN : le diagramme s'illumine et les lignes du résultat changent en direct.

FROM users INNER JOIN orders ON users.id = orders.user_id users orders Charlie (sans commande) Alice Bob cmd 50.- (user supprimé) RÉSULTAT DE LA REQUÊTE 2 lignes name total Alice 100 Bob 200 Charlie NULL NULL 50 INNER JOIN : seules les correspondances. Charlie (sans commande) et la commande orpheline sont exclus.

⚡ INDEX - Accélérer les Requêtes

Pourquoi les Index ?

Imagine un dictionnaire : tu cherches "Zèbre". Sans index alphabétique, tu lis TOUTES les pages ! Avec l'index, tu vas direct à Z. C'est pareil en SQL ! 📖➡️Z

Sans INDEX

Full Table Scan 🐌

1M lignes → 1M lectures

Avec INDEX

Index Seek ⚡

1M lignes → ~20 lectures

Créer des Index

-- Index simple
CREATE INDEX idx_email ON users(email);
-- Index composite (plusieurs colonnes)
CREATE INDEX idx_name_city ON users(last_name, city);
-- Index unique (email unique)
CREATE UNIQUE INDEX idx_username ON users(username);
-- Supprimer un index
DROP INDEX idx_email;

⚠️ Attention !

Trop d'index ralentit les INSERT/UPDATE/DELETE ! Trouve l'équilibre entre rapidité des SELECT et coût des écritures. En général : indexe les colonnes utilisées dans WHERE, JOIN, ORDER BY.

La course : Full Scan contre Index Seek

Lance la recherche de u11 : à gauche on lit toutes les lignes, à droite on descend l'index B-tree.

SANS INDEX — full scan AVEC INDEX — B-tree Lectures : 0 Lectures : 0 u06 ? u03 ? u09 ? u01-03 u04-06 u07-09 u10-12 u11@mail.ch Trouvé en 4 lectures ! ligne par ligne, sans raccourci…
Les deux moteurs cherchent u11 : lecture ligne par ligne contre descente d'index.

🔒 Transactions ACID

ACID - Les 4 Propriétés

Atomicity (Atomicité)

Tout ou rien : soit tous les changements passent, soit aucun

Consistency (Cohérence)

Les contraintes BDD sont toujours respectées

Isolation (Isolation)

Les transactions concurrentes ne se perturbent pas

Durability (Durabilité)

Une fois committed, les données sont sauvées

Exemple : Transfert d'argent

BEGIN TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
-- Si tout OK :
COMMIT;
-- Si erreur :
ROLLBACK;

💡 Si la 2e UPDATE échoue, la 1e est annulée automatiquement (atomicité) !

👁️ Vues (Views)

C'est quoi une Vue ?

Une requête SQL enregistrée qu'on peut utiliser comme une table virtuelle !

-- Créer une vue
CREATE VIEW active_users AS
SELECT id, name, email
FROM users
WHERE status = 'active' AND deleted_at IS NULL;
-- Utiliser la vue (comme une table !)
SELECT * FROM active_users WHERE city = 'Paris';
-- Plus besoin de répéter le WHERE status = 'active' partout !

✅ Avantages

  • ✅ Simplifier les requêtes complexes
  • ✅ Sécurité : masquer certaines colonnes
  • ✅ Abstraction : changer la structure sans casser le code

🚀 Optimisations SQL

1. Utiliser WHERE avant JOIN

Filtrer d'abord réduit les données à joindre

2. SELECT seulement les colonnes nécessaires

SELECT id, name (pas SELECT *)

3. LIMIT pour limiter les résultats

Pagination essentielle !

4. Utiliser EXPLAIN pour analyser

EXPLAIN SELECT * FROM users WHERE email = 'test';

🎮 Quiz Interactif !

📊

Prêt à tester tes connaissances SQL ?

JOINs, INDEX, Transactions ACID...

Glisser pour continuer vers NoSQL & Redis
⬇️
Collège 2