SQL
Le mémo de SQL avec PostgreSQL : lire, écrire, créer des tables, joindre, agréger, indexer, transactions et requêtes paramétrées.
Ce mémo résume le SQL de PostgreSQL, avec le fil rouge des recettes. Chaque section renvoie au chapitre qui l'explique en détail.
Lire des données
SELECT titre, temps_minutes
FROM recettes
WHERE temps_minutes <= 60 AND titre LIKE 'T%'
ORDER BY temps_minutes DESC
LIMIT 10;
| Clause | Rôle |
|---|---|
WHERE | filtre les lignes |
ORDER BY ... ASC/DESC | trie |
LIMIT n | garde les n premières lignes |
IS NULL | teste l'absence de valeur |
Détails : La base relationnelle et SELECT.
Écrire des données
INSERT INTO recettes (titre, temps_minutes) VALUES ('Crêpes', 30) RETURNING id;
UPDATE recettes SET temps_minutes = 50 WHERE id = 4;
DELETE FROM recettes WHERE id = 5;
UPDATE et DELETE sans WHERE touchent toute la table. Teste le WHERE avec un SELECT d'abord. Détails : Ajouter, modifier et supprimer des lignes.
Créer des tables
CREATE TABLE recettes (
id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
titre text NOT NULL,
temps_minutes integer CHECK (temps_minutes > 0),
categorie_id bigint REFERENCES categories (id)
);
| Contrainte | Règle |
|---|---|
PRIMARY KEY | identifie la ligne |
NOT NULL | valeur obligatoire |
UNIQUE | pas de doublon |
CHECK (...) | condition sur la valeur |
REFERENCES t (col) | clé étrangère |
DEFAULT v | valeur par défaut |
Détails : Créer des tables.
Jointures
SELECT r.titre, c.nom
FROM recettes AS r
JOIN categories AS c ON c.id = r.categorie_id;
| Jointure | Lignes gardées |
|---|---|
INNER JOIN (ou JOIN) | correspondance des deux côtés |
LEFT JOIN | toute la table de gauche |
RIGHT JOIN | toute la table de droite |
Détails : Les jointures.
Agrégats et index
SELECT c.nom, COUNT(r.id) AS nb
FROM categories AS c
LEFT JOIN recettes AS r ON r.categorie_id = c.id
GROUP BY c.nom
HAVING COUNT(r.id) > 1;
CREATE INDEX idx_recettes_titre ON recettes (titre);
| Fonction | Calcule |
|---|---|
COUNT, SUM, AVG | nombre, somme, moyenne |
MIN, MAX | plus petit, plus grand |
WHERE filtre les lignes, HAVING filtre les groupes. EXPLAIN montre le plan d'exécution. Détails : Agrégats et index.
Transactions et paramètres
BEGIN;
UPDATE recettes SET temps_minutes = 40 WHERE id = 1;
COMMIT; -- ou ROLLBACK; pour annuler
await client.query('SELECT * FROM recettes WHERE titre = $1', [titre])
Ne colle jamais du texte d'utilisateur dans une requête : passe-le en paramètre ($1, $2). Détails : Transactions et injection SQL.
Sources officielles
Ensuite
- Projet
- Lignes de code
- Niveau
- Cave
- Appartement
- SQL
- Pièce
- 7/7
- Plan n°
- sql/index