Aide-mémoire SQL
Dernière mise à jour
Interroger des données (SELECT)
Le cœur de SQL : lire des lignes depuis une ou plusieurs tables.
| Opération | Syntaxe |
|---|---|
| Sélectionner toutes les colonnes | SELECT * FROM users; |
| Sélectionner des colonnes précises | SELECT id, name FROM users; |
| Renommer une colonne (alias) | SELECT name AS full_name FROM users; |
| Valeurs distinctes | SELECT DISTINCT country FROM users; |
| Limiter les lignes | SELECT * FROM users LIMIT 10; |
| Sauter puis limiter (pagination) | SELECT * FROM users LIMIT 10 OFFSET 20; |
| Compter les lignes | SELECT COUNT(*) FROM users; |
Filtrer les lignes (WHERE)
Restreindre les lignes qu'une requête renvoie.
| Opération | Syntaxe |
|---|---|
| Égalité / comparaison | WHERE age >= 18 |
| Plusieurs conditions | WHERE age >= 18 AND country = 'US' |
| L'une ou l'autre condition | WHERE role = 'admin' OR role = 'owner' |
| Dans un ensemble | WHERE country IN ('US', 'CA', 'MX') |
| Dans une plage | WHERE price BETWEEN 10 AND 50 |
| Correspondance de motif | WHERE email LIKE '%@gmail.com' |
| Est / n'est pas null | WHERE deleted_at IS NULL |
| Négation | WHERE status NOT IN ('archived') |
Trier et regrouper
| Opération | Syntaxe |
|---|---|
| Trier croissant (par défaut) | ORDER BY created_at |
| Trier décroissant | ORDER BY created_at DESC |
| Trier sur plusieurs colonnes | ORDER BY country, name DESC |
| Regrouper les lignes | SELECT country, COUNT(*) FROM users GROUP BY country; |
| Filtrer les groupes | GROUP BY country HAVING COUNT(*) > 100 |
Jointures
Combiner les lignes de deux tables selon une colonne correspondante.
| Type de jointure | Renvoie | Syntaxe |
|---|---|---|
| INNER JOIN | Uniquement les lignes correspondant dans les deux tables | FROM orders o INNER JOIN users u ON o.user_id = u.id |
| LEFT JOIN | Toutes les lignes de gauche + correspondances (sinon null) | FROM users u LEFT JOIN orders o ON o.user_id = u.id |
| RIGHT JOIN | Toutes les lignes de droite + correspondances | FROM orders o RIGHT JOIN users u ON o.user_id = u.id |
| FULL OUTER JOIN | Toutes les lignes des deux côtés | FROM a FULL OUTER JOIN b ON a.id = b.a_id |
| CROSS JOIN | Toutes les combinaisons (produit cartésien) | FROM sizes CROSS JOIN colors |
| Auto-jointure | Une table jointe à elle-même | FROM employees e JOIN employees m ON e.manager_id = m.id |
Fonctions d'agrégation
Calculer une valeur unique sur un groupe de lignes.
| Fonction | Ce qu'elle fait |
|---|---|
COUNT(*) | Nombre de lignes |
COUNT(col) | Nombre de valeurs non nulles |
SUM(col) | Total d'une colonne numérique |
AVG(col) | Valeur moyenne |
MIN(col) / MAX(col) | Plus petite / plus grande valeur |
STRING_AGG(col, ',') | Concaténer des valeurs (Postgres ; GROUP_CONCAT dans MySQL) |
Fonctions de fenêtrage
Calculer sur un ensemble de lignes sans les réduire à une seule.
| Fonction | Syntaxe |
|---|---|
| Numéro de ligne | ROW_NUMBER() OVER (ORDER BY score DESC) |
| Rang (avec écarts) | RANK() OVER (PARTITION BY country ORDER BY score DESC) |
| Rang dense | DENSE_RANK() OVER (ORDER BY score DESC) |
| Total cumulé | SUM(amount) OVER (ORDER BY created_at) |
| Ligne précédente / suivante | LAG(score) OVER (ORDER BY date), LEAD(score) OVER (...) |
Modifier des données (INSERT, UPDATE, DELETE)
| Opération | Syntaxe |
|---|---|
| Insérer une ligne | INSERT INTO users (name, email) VALUES ('Ada', 'ada@x.com'); |
| Insérer plusieurs lignes | INSERT INTO users (name) VALUES ('Ada'), ('Alan'); |
| Mettre à jour des lignes | UPDATE users SET active = true WHERE id = 1; |
| Supprimer des lignes | DELETE FROM users WHERE active = false; |
| Upsert (Postgres/SQLite) | INSERT ... ON CONFLICT (email) DO UPDATE SET name = EXCLUDED.name; |
Définir des tables (DDL)
| Opération | Syntaxe |
|---|---|
| Créer une table | CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT NOT NULL); |
| Ajouter une colonne | ALTER TABLE users ADD COLUMN age INTEGER; |
| Supprimer une colonne | ALTER TABLE users DROP COLUMN age; |
| Supprimer une table | DROP TABLE users; |
| Créer un index | CREATE INDEX idx_users_email ON users (email); |
| Clé étrangère | FOREIGN KEY (user_id) REFERENCES users (id) |
Chaque instruction, clause et jointure SQL dont vous avez besoin, sur une seule page. Cet aide-mémoire SQL est une référence rapide pour interroger et modifier des données relationnelles - les clauses SELECT, les quatre types de JOIN, l'agrégation, ainsi que le DDL et le DML que vous utilisez pour créer et mettre à jour des tables.
La syntaxe présentée ici est du SQL ANSI standard et fonctionne dans PostgreSQL, MySQL, SQLite et SQL Server sauf mention contraire. Copiez ce dont vous avez besoin, ou essayez chaque requête en direct dans le playground SQL - aucune base de données à installer.
FAQ de l'aide-mémoire SQL
Cet aide-mémoire SQL est-il gratuit ?
Cela fonctionne-t-il pour MySQL, PostgreSQL et SQLite ?
SELECT, WHERE, JOIN, GROUP BY et DDL présentée ici est du SQL ANSI standard et s'exécute de la même façon dans MySQL, PostgreSQL, SQLite et SQL Server. Quelques fonctionnalités avancées diffèrent selon le dialecte - les upserts et l'agrégation de chaînes sont les plus courantes - et ces lignes signalent la différence.Quelle est la différence entre INNER JOIN et LEFT JOIN ?
INNER JOIN ne renvoie que les lignes ayant une correspondance dans les deux tables. Un LEFT JOIN renvoie chaque ligne de la table de gauche (la première), en remplissant NULL pour les colonnes de la table de droite lorsqu'il n'y a pas de correspondance - utile quand vous voulez tous les utilisateurs même si certains n'ont aucune commande.Puis-je m'entraîner à ces commandes SQL en ligne ?
SELECT aux jointures et aux fonctions de fenêtrage, étape par étape.