CaveSQL SQLPièce 7/7Mémo

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;
ClauseRôle
WHEREfiltre les lignes
ORDER BY ... ASC/DESCtrie
LIMIT ngarde les n premières lignes
IS NULLteste 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)
);
ContrainteRègle
PRIMARY KEYidentifie la ligne
NOT NULLvaleur obligatoire
UNIQUEpas de doublon
CHECK (...)condition sur la valeur
REFERENCES t (col)clé étrangère
DEFAULT vvaleur 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;
JointureLignes gardées
INNER JOIN (ou JOIN)correspondance des deux côtés
LEFT JOINtoute la table de gauche
RIGHT JOINtoute 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);
FonctionCalcule
COUNT, SUM, AVGnombre, somme, moyenne
MIN, MAXplus 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
Lignes de code · fiches rédigées à partir des documentations officielles, sources citées en bas de chaque page.