Catalogue

Notions SQL

Explorez, apprenez et maîtrisez les concepts essentiels pour progresser à votre rythme.

147 notions
Niveau
147 résultats
DQL – Fonctions scalaires & manipulationNiveauDébutant

ABS – valeur absolue

ABS retourne la valeur absolue d'un nombre (supprime le signe).

Découvrir
Qualité SQL – Lisibilité, maintenabilité & professionnalismeNiveauDébutant

absence de SELECT *

Éviter SELECT * améliore la clarté. Vous savez exactement ce que vous renvoyez. Moins de risques si le schéma change.

Découvrir
Qualité SQL – Lisibilité, maintenabilité & professionnalismeNiveauDébutant

alias explicites

Des alias explicites clarifient les colonnes. Préférer order_total à t. Évite les collisions de noms.

Découvrir
DQL – Lecture & filtresNiveauDébutant

BETWEEN / NOT BETWEEN

BETWEEN vérifie qu'une valeur est dans un intervalle (inclus aux deux bornes). Fonctionne avec les nombres et les dates.

Découvrir
DQL – Jointures & relationsNiveauDébutant

clés primaires et étrangères

Une clé primaire identifie une ligne de façon unique. Une clé étrangère référence une autre table. orders. customer_id → customers. idproducts...

Découvrir
Qualité SQL – Lisibilité, maintenabilité & professionnalismeNiveauDébutant

colonnes explicitement listées

Lister les colonnes rend la requête stable. Évite des colonnes inutiles. Facilite la review.

Découvrir
DQL – Fonctions scalaires & manipulationNiveauDébutant

CONCAT et assemblage de chaînes

CONCAT assemble plusieurs chaînes. On peut aussi utiliser l'opérateur || en PostgreSQL.

Découvrir
DDL – Modélisation & schémaNiveauDébutant

CREATE TABLE

CREATE TABLE crée une table. Vous définissez colonnes, types et contraintes. À exécuter une seule fois.

Découvrir
DQL – Fonctions scalaires & manipulationNiveauDébutant

DATE_PART – extraire une composante de date

DATE_PART extrait une composante d'une date (année, mois, jour, heure…). Syntaxe alternative à EXTRACT.

Découvrir
DQL – Lecture & filtresNiveauDébutant

DISTINCT

DISTINCT supprime les doublons. Il s’applique aux colonnes sélectionnées. Attention : ça peut coûter plus cher en performance.

Découvrir
DDL – Modélisation & schémaNiveauDébutant

DROP TABLE

DROP TABLE supprime la table. Action destructive. À éviter en prod.

Découvrir
DQL – Fonctions scalaires & manipulationNiveauDébutant

Fonctions d'arrondi : ROUND, CEIL, FLOOR

ROUND arrondit un nombre. CEIL arrondit au supérieur. FLOOR arrondit à l'inférieur.

Découvrir
DDL – Modélisation & schémaNiveauDébutant

FOREIGN KEY

Une FOREIGN KEY lie deux tables. Elle assure la cohérence. Elle empêche des références invalides.

Découvrir
Qualité SQL – Lisibilité, maintenabilité & professionnalismeNiveauDébutant

formatage SQL standardisé

Un SQL standardisé est plus simple à relire. Même style partout. Moins d’ambiguïté.

Découvrir
DQL – Lecture & filtresNiveauDébutant

FROM

FROM indique la table source. Une requête lit d’abord les données depuis cette table. Vous pourrez ensuite filtrer avec WHERE.

Découvrir
DQL – Lecture & filtresNiveauDébutant

gestion des NULL

Un NULL signifie « valeur inconnue / absente ». Écrire = NULL ne marche pas : utilisez IS NULL ou IS NOT NULL.

Découvrir
Qualité SQL – Lisibilité, maintenabilité & professionnalismeNiveauDébutant

gestion explicite des NULL

Gérer les NULL évite des résultats inattendus. Utilisez COALESCE si besoin. Utilisez IS NULL pour filtrer.

Découvrir
Qualité SQL – Lisibilité, maintenabilité & professionnalismeNiveauDébutant

granularité maîtrisée

La granularité = le niveau de détail d’une ligne. Commande ≠ ligne de commande. Un JOIN peut changer la granularité.

Découvrir
DQL – Fonctions scalaires & manipulationNiveauDébutant

GREATEST et LEAST

GREATEST retourne la plus grande valeur parmi une liste d'arguments. LEAST retourne la plus petite. Ce sont des fonctions scalaires, contrairement aux agrégats MAX/MIN.

Découvrir
DQL – Lecture & filtresNiveauDébutant

IN / NOT IN

IN teste si une valeur est dans une liste. NOT IN exclut. Attention avec NOT IN et NULL.

Découvrir
Qualité SQL – Lisibilité, maintenabilité & professionnalismeNiveauDébutant

indentation cohérente

Une indentation cohérente rend les blocs évidents. Utile surtout avec JOIN/CTE. Réduit les erreurs de lecture.

Découvrir
DQL – Fonctions scalaires & manipulationNiveauDébutant

LENGTH

LENGTH retourne le nombre de caractères d'une chaîne.

Découvrir
DQL – Fonctions scalaires & manipulationNiveauDébutant

LIKE et ILIKE

LIKE filtre par motif avec % (n'importe quoi) et _ (un caractère). ILIKE est la variante insensible à la casse.

Découvrir
DQL – Lecture & filtresNiveauDébutant

LIMIT

LIMIT limite le nombre de lignes renvoyées. Utile pour tester une requête. Souvent combiné avec ORDER BY.

Découvrir
DQL – Fonctions scalaires & manipulationNiveauDébutant

LTRIM, RTRIM, BTRIM

Supprime les espaces ou caractères en début/fin de chaîne.

Découvrir
DQL – Fonctions scalaires & manipulationNiveauDébutant

MAKE_DATE, CURRENT_TIME, CURRENT_TIMESTAMP

MAKE_DATE construit une date depuis ses composantes. CURRENT_TIME retourne l'heure courante. CURRENT_TIMESTAMP retourne la date et l'heure actuelles avec timezone.

Découvrir
DQL – Fonctions scalaires & manipulationNiveauDébutant

MOD, POWER, SQRT, TRUNC

MOD retourne le reste d'une division, POWER calcule une puissance, SQRT la racine carrée, et TRUNC tronque un nombre sans arrondir.

Découvrir
Qualité SQL – Lisibilité, maintenabilité & professionnalismeNiveauDébutant

mots-clés SQL en majuscules

Mettre les mots-clés en majuscules améliore la lecture. SELECT, FROM, WHERELes identifiants restent en minuscules.

Découvrir
Qualité SQL – Lisibilité, maintenabilité & professionnalismeNiveauDébutant

noms de CTE descriptifs

Une CTE doit avoir un nom qui décrit son rôle. Ex : order_totals, active_customers.

Découvrir
DQL – Lecture & filtresNiveauDébutant

opérateurs logiques et de comparaison

Les opérateurs comparent et combinent des conditions. Comparaison : =, <, >=Logique : AND, OR, NOT

Découvrir
DQL – Lecture & filtresNiveauDébutant

ORDER BY

ORDER BY trie le résultat. ASC = croissant. DESC = décroissant.

Découvrir
DDL – Modélisation & schémaNiveauDébutant

PRIMARY KEY

Une PRIMARY KEY identifie une ligne. Unique. Non NULL.

Découvrir
DQL – Lecture & filtresNiveauDébutant

SELECT

SELECT sert à choisir les colonnes à afficher. Vous pouvez afficher une ou plusieurs colonnes. Évitez SELECT * si possible.

Découvrir
DQL – Fonctions scalaires & manipulationNiveauDébutant

TRIM

TRIM supprime les espaces en début et fin d'une chaîne.

Découvrir
DDL – Modélisation & schémaNiveauDébutant

types de données

Le type définit le format stocké. VARCHAR : texteINT : entierDECIMAL : montantTIMESTAMP : date/heure

Découvrir
Qualité SQL – Lisibilité, maintenabilité & professionnalismeNiveauDébutant

une intention par CTE

Une CTE = une intention. Une étape claire. Pas un « fourre-tout ».

Découvrir
DQL – Fonctions scalaires & manipulationNiveauDébutant

UPPER et LOWER

UPPER met une chaîne en majuscules, LOWER en minuscules — pour normaliser avant comparaison.

Découvrir
DQL – Lecture & filtresNiveauDébutant

WHERE

WHERE filtre les lignes. Sans WHERE, vous récupérez tout. Avec WHERE, vous limitez à une condition.

Découvrir
DDL – Modélisation & schémaNiveauIntermédiaire

ALTER TABLE

ALTER TABLE modifie la structure. Ajouter une colonne. Ajouter une contrainte.

Découvrir
DQL – Tableaux (Arrays)NiveauIntermédiaire

ANY, ALL avec tableaux

ANY teste si une valeur correspond à au moins un élément d'un tableau (comme IN). ALL teste si elle correspond à tous. @>, <@ et && sont les opérateurs de containment.

Découvrir
DQL – Fonctions scalaires & manipulationNiveauIntermédiaire

Arithmétique de dates et intervalles

On ajoute une durée à une date avec INTERVAL. On soustrait deux dates pour obtenir un nombre de jours. AGE() calcule l'écart entre deux dates.

Découvrir
DQL – Agrégations & regroupementsNiveauIntermédiaire

ARRAY_AGG

ARRAY_AGG agrège des valeurs d'un groupe en un tableau PostgreSQL. Utile pour regrouper des identifiants ou valeurs sans les concaténer en texte.

Découvrir
DQL – Tableaux (Arrays)NiveauIntermédiaire

array_append, array_prepend, array_cat, array_remove

Ajoute, supprime ou concatène des éléments dans un tableau PostgreSQL.

Découvrir
DQL – Tableaux (Arrays)NiveauIntermédiaire

array_to_string, array_position, cardinality

Convertit un tableau en chaîne, cherche un élément, ou compte les éléments.

Découvrir
DQL – Tableaux (Arrays)NiveauIntermédiaire

ARRAY[], UNNEST, array_length

ARRAY[] crée un tableau littéral. UNNEST décompose un tableau en lignes. array_length retourne la longueur d'un tableau selon sa dimension.

Découvrir
DQL – Fonctions scalaires & manipulationNiveauIntermédiaire

AT TIME ZONE

Convertit un timestamp vers un fuseau horaire différent.

Découvrir
DQL – Jointures & relationsNiveauIntermédiaire

Auto-jointure (self-join)

Une auto-jointure joint une table avec elle-même. Utile pour comparer des lignes de la même table.

Découvrir
DQL – Agrégations & regroupementsNiveauIntermédiaire

AVG

AVG calcule une moyenne. Ignore les NULL. Souvent pertinent sur price ou des paniers.

Découvrir
DQL – Agrégations & regroupementsNiveauIntermédiaire

BOOL_AND et BOOL_OR

BOOL_AND retourne TRUE si toutes les lignes d'un groupe satisfont une condition. BOOL_OR retourne TRUE si au moins une ligne la satisfait.

Découvrir
DQL – Fonctions scalaires & manipulationNiveauIntermédiaire

Calcul de différence entre dates

Pour calculer l'écart entre deux dates : date1 - date2 donne des jours, AGE() donne un intervalle lisible. PostgreSQL n'a pas de DATE_DIFF.

Découvrir
DQL – Fonctions scalaires & manipulationNiveauIntermédiaire

CAST et conversion de types

CAST convertit une valeur d'un type à un autre. PostgreSQL supporte aussi la syntaxe :: (ex: '2024-01-01'::date).

Découvrir
DDL – Modélisation & schémaNiveauIntermédiaire

CHECK

CHECK impose une règle sur une colonne. Ex : prix > 0. Ex : quantité > 0.

Découvrir
Qualité SQL – Lisibilité, maintenabilité & professionnalismeNiveauIntermédiaire

choix approprié WHERE vs HAVING

WHERE filtre avant l’agrégation, HAVING après. WHERE = lignes brutes. HAVING = résultats agrégés.

Découvrir
DQL – Fonctions scalaires & manipulationNiveauIntermédiaire

COALESCE et NULLIF

COALESCE retourne le premier argument non NULL. NULLIF retourne NULL si les deux arguments sont égaux.

Découvrir
DQL – Agrégations & regroupementsNiveauIntermédiaire

COUNT

COUNT compte des lignes. COUNT(*) compte toutes les lignes. COUNT(col) ignore les NULL.

Découvrir
DDL – Modélisation & schémaNiveauIntermédiaire

CREATE INDEX et types d'index

Crée un index pour accélérer les requêtes, avec différents types selon le cas d'usage.

Découvrir
DCL – Sécurité & gouvernanceNiveauIntermédiaire

CREATE ROLE et ALTER ROLE

Crée et configure des rôles de base de données avec attributs et appartenances.

Découvrir
DDL – Modélisation & schémaNiveauIntermédiaire

CREATE SEQUENCE

Crée un générateur de nombres séquentiels indépendant ou lié à une colonne.

Découvrir
DDL – Modélisation & schémaNiveauIntermédiaire

CREATE TYPE ENUM

Crée un type énuméré avec une liste fixe de valeurs autorisées.

Découvrir
DDL – Modélisation & schémaNiveauIntermédiaire

CREATE VIEW

Une VIEW est une requête sauvegardée comme une table virtuelle. Elle simplifie les requêtes complexes et abstrait la logique métier.

Découvrir
DQL – Fonctions scalaires & manipulationNiveauIntermédiaire

DATE_TRUNC – tronquer une date

DATE_TRUNC tronque une date à la précision voulue (mois, semaine, année…). Indispensable pour les agrégations temporelles.

Découvrir
DML – Écriture & modificationNiveauIntermédiaire

DELETE

DELETE supprime des lignes. Sans WHERE, vous supprimez tout. Attention aux cascades (ex: order_items).

Découvrir
DQL – Requêtes avancéesNiveauIntermédiaire

EXCEPT et INTERSECT

EXCEPT retourne les lignes du premier SELECT absentes du second. INTERSECT retourne les lignes communes aux deux SELECT.

Découvrir
DQL – Requêtes avancéesNiveauIntermédiaire

EXISTS / NOT EXISTS

EXISTS vérifie qu'une sous-requête retourne au moins une ligne. Plus efficace que IN pour les grandes tables.

Découvrir
Performance et optimisationNiveauIntermédiaire

EXPLAIN et EXPLAIN ANALYZE

Affiche le plan d'exécution d'une requête pour identifier les goulots d'étranglement.

Découvrir
DQL – Agrégations & regroupementsNiveauIntermédiaire

FILTER (WHERE) dans les agrégations

Filtre conditionnel appliqué à une agrégation, sans affecter les autres agrégats.

Découvrir
Qualité SQL – Lisibilité, maintenabilité & professionnalismeNiveauIntermédiaire

filtres appliqués le plus tôt possible

Filtrer tôt réduit le volume de données. WHERE avant JOIN quand possible. Sous-requête filtrée avant jointure.

Découvrir
DQL – Fonctions scalaires & manipulationNiveauIntermédiaire

Fonctions de date : NOW, CURRENT_DATE, EXTRACT

NOW() retourne la date et heure courante. CURRENT_DATE retourne la date du jour. EXTRACT extrait une partie d'une date.

Découvrir
DQL – Jointures & relationsNiveauIntermédiaire

FULL OUTER JOIN

FULL OUTER JOIN retourne toutes les lignes des deux tables, avec NULL quand il n'y a pas de correspondance.

Découvrir
Qualité SQL – Lisibilité, maintenabilité & professionnalismeNiveauIntermédiaire

granularité maîtrisée

La granularité = le niveau de détail d’une ligne. Commande ≠ ligne de commande. Un JOIN peut changer la granularité.

Découvrir
DQL – Agrégations & regroupementsNiveauIntermédiaire

GROUP BY

GROUP BY regroupe les lignes pour agréger. Toute colonne non agrégée doit être dans le GROUP BY. Chaque groupe produit une ligne.

Découvrir
DQL – Agrégations & regroupementsNiveauIntermédiaire

HAVING

HAVING filtre les groupes (après agrégation). WHERE filtre les lignes. HAVING filtre les résultats agrégés.

Découvrir
Performance et optimisationNiveauIntermédiaire

Index et performance des requêtes

Stratégies d'indexation pour optimiser les performances des requêtes PostgreSQL.

Découvrir
DQL – Jointures & relationsNiveauIntermédiaire

INNER JOIN

INNER JOIN garde uniquement les correspondances. Si ça ne match pas, la ligne disparaît. Utile pour relier des faits et des dimensions.

Découvrir
DML – Écriture & modificationNiveauIntermédiaire

INSERT

INSERT ajoute des lignes dans une table. Respectez les contraintes (NOT NULL, CHECK). Faites attention aux clés étrangères.

Découvrir
DML – Écriture & modificationNiveauIntermédiaire

intégrité des données

L’intégrité des données garantit la cohérence. Contraintes NOT NULL, UNIQUE, CHECK, FK. Évite les orphelins et valeurs incohérentes.

Découvrir
Qualité SQL – Lisibilité, maintenabilité & professionnalismeNiveauIntermédiaire

jointures justifiées

Chaque JOIN doit apporter une information utilisée. Un JOIN inutile alourdit la requête et peut créer des doublons.

Découvrir
DQL – Jointures & relationsNiveauIntermédiaire

LEFT JOIN

LEFT JOIN garde toutes les lignes de gauche. Si pas de match, les colonnes de droite sont NULL. Parfait pour trouver des « manquants ».

Découvrir
DQL – Requêtes avancéesNiveauIntermédiaire

logique conditionnelle simple (CASE WHEN)

CASE WHEN renvoie une valeur différente selon des conditions, dans le SELECT.

Découvrir
Qualité SQL – Lisibilité, maintenabilité & professionnalismeNiveauIntermédiaire

maîtrise des doublons

Les doublons faussent les agrégations. Un JOIN peut multiplier les lignes. Vérifier avec COUNT(*) vs COUNT(DISTINCT).

Découvrir
DQL – Agrégations & regroupementsNiveauIntermédiaire

MAX

MAX renvoie la plus grande valeur. Marche avec des nombres et des dates. Souvent couplé à un filtre.

Découvrir
DQL – Agrégations & regroupementsNiveauIntermédiaire

MIN

MIN renvoie la plus petite valeur. Marche avec des nombres et des dates. Utile pour trouver un premier achat.

Découvrir
DQL – JSON & données semi-structuréesNiveauIntermédiaire

Opérateurs -> et ->>

-> retourne un sous-document JSON, ->> retourne le texte. #> et #>> permettent l'accès par chemin. Utilisés sur des colonnes de type JSONB.

Découvrir
DQL – JSON & données semi-structuréesNiveauIntermédiaire

Opérateurs de containment JSONB : @>, <@, ?

Teste si un JSON contient, est contenu dans, ou possède certaines clés.

Découvrir
Qualité SQL – Lisibilité, maintenabilité & professionnalismeNiveauIntermédiaire

protection contre les divisions par zéro

Une division par zéro provoque une erreur. Utiliser NULLIF(x, 0) ou CASE WHEN. Fréquent dans les calculs de ratios.

Découvrir
DQL – Fonctions scalaires & manipulationNiveauIntermédiaire

RANDOM et GENERATE_SERIES

RANDOM() génère un nombre aléatoire entre 0 et 1. GENERATE_SERIES produit une série de valeurs numériques ou de dates avec un pas défini.

Découvrir
DQL – Fonctions scalaires & manipulationNiveauIntermédiaire

REPLACE et SPLIT_PART

REPLACE remplace toutes les occurrences d'une sous-chaîne. SPLIT_PART extrait la n-ième partie d'une chaîne découpée par un délimiteur.

Découvrir
DML – Écriture & modificationNiveauIntermédiaire

RETURNING

Retourne les lignes insérées, modifiées ou supprimées sans SELECT supplémentaire.

Découvrir
DQL – Jointures & relationsNiveauIntermédiaire

RIGHT JOIN

RIGHT JOIN garde toutes les lignes de droite. Souvent évitable : un LEFT JOIN inversé suffit. À connaître pour lire du SQL existant.

Découvrir
DQL – JSON & données semi-structuréesNiveauIntermédiaire

row_to_json et jsonb_each

Convertit une ligne en JSON ou décompose un objet JSON en paires clé-valeur.

Découvrir
DQL – Agrégations & regroupementsNiveauIntermédiaire

STRING_AGG

STRING_AGG concatène des valeurs d'un groupe en une chaîne séparée par un délimiteur. Supporte ORDER BY à l'intérieur de l'agrégat.

Découvrir
DQL – Fonctions scalaires & manipulationNiveauIntermédiaire

SUBSTRING et extraction de texte

SUBSTRING extrait une partie d'une chaîne. LEFT/RIGHT extraient depuis les extrémités. STRPOS trouve la position d'un sous-texte.

Découvrir
DQL – Agrégations & regroupementsNiveauIntermédiaire

SUM

SUM additionne des valeurs numériques. Souvent utilisé avec GROUP BY. Attention aux types et aux NULL.

Découvrir
DQL – Fonctions scalaires & manipulationNiveauIntermédiaire

TO_CHAR – formater une date en texte

TO_CHAR formate une date (ou un nombre) en chaîne de caractères selon un masque de format.

Découvrir
DQL – Fonctions scalaires & manipulationNiveauIntermédiaire

TO_DATE et TO_TIMESTAMP – parser une date

TO_DATE et TO_TIMESTAMP convertissent un texte en date ou timestamp selon un format donné.

Découvrir
DQL – JSON & données semi-structuréesNiveauIntermédiaire

to_jsonb, jsonb_build_object, jsonb_agg

to_jsonb convertit une valeur en JSONB. jsonb_build_object construit un objet JSON depuis des paires clé/valeur. jsonb_agg agrège des lignes en tableau JSON.

Découvrir
DDL – Modélisation & schémaNiveauIntermédiaire

TRUNCATE TABLE

Vide une table entière rapidement, avec option de reset des séquences.

Découvrir
DDL – Modélisation & schémaNiveauIntermédiaire

UNIQUE

UNIQUE empêche les doublons. Souvent utilisé sur email. Peut être multi-colonnes.

Découvrir
DML – Écriture & modificationNiveauIntermédiaire

UPDATE

UPDATE modifie des lignes existantes. Sans WHERE, vous modifiez toute la table. Testez d’abord avec un SELECT.

Découvrir
Qualité SQL – Lisibilité, maintenabilité & professionnalismeNiveauAvancé

absence de logique dupliquée

La logique dupliquée est source de bugs. Utiliser des CTE pour factoriser. Un calcul = un seul endroit.

Découvrir
DQL – Agrégations & regroupementsNiveauAvancé

agrégations conditionnelles

Une agrégation conditionnelle agrège selon une condition. Souvent via SUM(CASE WHEN ... THEN ... END). Permet plusieurs métriques en une requête.

Découvrir
DQL – Fonctions analytiquesNiveauAvancé

Agrégats glissants : SUM() OVER, AVG() OVER

SUM, AVG, COUNT, MIN, MAX peuvent s'utiliser comme fonctions de fenêtrage pour calculer des cumuls progressifs ou des moyennes glissantes sur N lignes.

Découvrir
DQL – Jointures & relationsNiveauAvancé

anti-join

Un anti-join sert à trouver les lignes sans correspondance. Souvent : LEFT JOIN + WHERE ... IS NULL. Utile pour identifier des clients inactifs.

Découvrir
DQL – Jointures & relationsNiveauAvancé

cardinalités

La cardinalité décrit la relation entre tables.1-N : categories → products1-N : orders → order_itemsComprendre ça évite les duplications.

Découvrir
DDL – Modélisation & schémaNiveauAvancé

CREATE FUNCTION et CREATE PROCEDURE

Crée des fonctions et procédures stockées réutilisables dans la base de données.

Découvrir
DQL – Requêtes avancéesNiveauAvancé

CTE (WITH)

Une CTE (WITH) est une table temporaire lisible. Améliore la clarté. Permet de découper en étapes.

Découvrir
DQL – Fonctions analytiquesNiveauAvancé

DENSE_RANK

DENSE_RANK classe avec ex-aequo sans trous. Deux valeurs égales → même rang. Le rang suivant ne saute pas.

Découvrir
DQL – Fonctions scalaires & manipulationNiveauAvancé

Expressions régulières : ~, REGEXP_REPLACE, REGEXP_MATCHES

~ et ~* filtrent via des expressions régulières. REGEXP_REPLACE remplace des occurrences correspondant à un pattern. REGEXP_MATCHES retourne les groupes capturés.

Découvrir
DQL – Fonctions analytiquesNiveauAvancé

FIRST_VALUE, LAST_VALUE, NTH_VALUE

FIRST_VALUE, LAST_VALUE et NTH_VALUE accèdent à des positions spécifiques dans la fenêtre. Attention au cadre par défaut de LAST_VALUE.

Découvrir
DQL – Fonctions analytiquesNiveauAvancé

Frames de fenêtre : ROWS BETWEEN / RANGE BETWEEN

Définit précisément le sous-ensemble de lignes pour une fonction de fenêtrage.

Découvrir
DCL – Sécurité & gouvernanceNiveauAvancé

GRANT

GRANT donne des droits. Dépend de la base (PostgreSQL, etc.). Important en production.

Découvrir
DQL – Jointures & relationsNiveauAvancé

jointures multiples

Une jointure multiple chaîne plusieurs tables. Utilisez des alias courts. Vérifiez la granularité (risque de doublons).

Découvrir
DQL – JSON & données semi-structuréesNiveauAvancé

jsonb_array_elements, jsonb_object_keys

jsonb_array_elements décompose un tableau JSON en lignes. jsonb_object_keys liste les clés d'un objet JSON. Fonctions set-returning très utiles pour explorer du JSON.

Découvrir
DQL – JSON & données semi-structuréesNiveauAvancé

jsonb_set et jsonb_insert

jsonb_set modifie une valeur dans un document JSONB. jsonb_insert insère dans un tableau JSONB. Le chemin est spécifié sous forme de tableau text[].

Découvrir
DQL – Fonctions analytiquesNiveauAvancé

LAG

LAG lit la valeur précédente dans un ordre. Très utile pour comparer dans le temps. Fonctionne avec OVER (PARTITION BY ... ORDER BY ...).

Découvrir
DQL – Fonctions analytiquesNiveauAvancé

LEAD

LEAD lit la valeur suivante dans un ordre. Utile pour anticiper un événement suivant. Même logique que LAG, mais vers l’avant.

Découvrir
DQL – Requêtes avancéesNiveauAvancé

logique conditionnelle avancée

La logique conditionnelle se fait souvent avec CASE. Permet de créer des catégories. Utile pour du reporting.

Découvrir
DML – Écriture & modificationNiveauAvancé

MERGE / UPSERT

Un UPSERT insère ou met à jour selon l’existence. Très pratique sur des clés uniques (ex: customers. email). Syntaxe dépend du SGBD.

Découvrir
DDL – Modélisation & schémaNiveauAvancé

normalisation

La normalisation réduit la redondance. On sépare les entités (clients, commandes, items). On relie via des clés.

Découvrir
DQL – Fonctions analytiquesNiveauAvancé

NTILE

NTILE(n) répartit les lignes en n groupes égaux selon un ordre. Idéal pour créer des quartiles, déciles ou centiles.

Découvrir
DQL – Fonctions analytiquesNiveauAvancé

ORDER BY (fenêtrage)

Dans une window function, ORDER BY définit l’ordre du calcul. Ce n’est pas le tri final (même si lié). Impacte LAG, LEAD, ranking.

Découvrir
DQL – Fonctions analytiquesNiveauAvancé

OVER

OVER définit la fenêtre d’une fonction analytique. Sans OVER, pas de window function. Vous définissez l’ordre et/ou le partitionnement.

Découvrir
DQL – Fonctions analytiquesNiveauAvancé

PARTITION BY

PARTITION BY découpe le résultat en groupes dans une fenêtre. Chaque groupe est traité séparément. Très utile par customer_id ou category_id.

Découvrir
DQL – Agrégations & regroupementsNiveauAvancé

PERCENTILE_CONT et PERCENTILE_DISC

PERCENTILE_CONT calcule un percentile interpolé, PERCENTILE_DISC retourne la valeur existante la plus proche. La fraction 0.5 donne la médiane.

Découvrir
DCL – Sécurité & gouvernanceNiveauAvancé

permissions

Les permissions contrôlent les actions autorisées. SELECT, INSERT, UPDATE, DELETEPeuvent être par table.

Découvrir
DDL – Modélisation & schémaNiveauAvancé

PRIMARY KEY / FOREIGN KEY (rappel)

PK/FK définissent le modèle relationnel. PK = identifiant. FK = lien. Sans ça, les JOIN deviennent risqués.

Découvrir
DCL – Sécurité & gouvernanceNiveauAvancé

principe du moindre privilège

Le moindre privilège = donner le minimum nécessaire. Réduit le risque. Limite les erreurs humaines.

Découvrir
DQL – Fonctions analytiquesNiveauAvancé

RANK

RANK classe avec des ex-aequo (trous possibles). Deux valeurs égales → même rang. Le rang suivant peut sauter un numéro.

Découvrir
Qualité SQL – Lisibilité, maintenabilité & professionnalismeNiveauAvancé

requête robuste face aux données imparfaites

Les données réelles sont imparfaites : NULL, doublons, valeurs aberrantes. Anticiper les cas limites avec COALESCE, NULLIF.

Découvrir
DQL – Requêtes avancéesNiveauAvancé

requêtes imbriquées

Une requête imbriquée empile des niveaux. Utile pour : calculer puis filtrer puis classer. Une CTE est souvent plus lisible.

Découvrir
DCL – Sécurité & gouvernanceNiveauAvancé

REVOKE

REVOKE retire des droits. Complément de GRANT. Utile quand un accès n’est plus nécessaire.

Découvrir
DCL – Sécurité & gouvernanceNiveauAvancé

rôles

Un rôle regroupe des permissions. Plus simple à gérer. Moins d’erreurs.

Découvrir
DML – Écriture & modificationNiveauAvancé

rollback

ROLLBACK annule les changements d’une transaction non validée. Utile en test. Évite des modifications accidentelles.

Découvrir
DCL – Sécurité & gouvernanceNiveauAvancé

Row Level Security (RLS)

Restreint l'accès aux lignes d'une table selon l'utilisateur, sans changer les requêtes.

Découvrir
DQL – Fonctions analytiquesNiveauAvancé

ROW_NUMBER

ROW_NUMBER numérote les lignes dans une fenêtre. Utile pour prendre le « premier » élément d’un groupe. Nécessite OVER(...).

Découvrir
DCL – Sécurité & gouvernanceNiveauAvancé

séparation des environnements

Séparer dev / staging / prod évite les accidents. Pas d’écriture en prod pour tout le monde. Accès contrôlés par rôle.

Découvrir
Qualité SQL – Lisibilité, maintenabilité & professionnalismeNiveauAvancé

simplicité et sobriété de la solution

La simplicité est une qualité. Pas de sous-requête quand un JOIN suffit. Le code le plus simple est le plus maintenable.

Découvrir
DQL – Requêtes avancéesNiveauAvancé

sous-requêtes

Une sous-requête est une requête dans une autre. Elle peut être dans WHERE, FROM ou SELECT. Utile si vous voulez filtrer par une agrégation.

Découvrir
DQL – Agrégations & regroupementsNiveauAvancé

STDDEV et VARIANCE

STDDEV mesure l'écart-type et VARIANCE la variance d'un ensemble de valeurs. Les variantes _POP calculent sur la population complète, les variantes _SAMP sur un échantillon.

Découvrir
DQL – Fonctions analytiquesNiveauAvancé

top N par groupe

Le top N par groupe consiste à garder les N meilleures lignes par partition. Solution classique : ROW_NUMBER puis filtre rn <= N.

Découvrir
Qualité SQL – Lisibilité, maintenabilité & professionnalismeNiveauAvancé

traçabilité de la logique métier

La traçabilité permet de comprendre le pourquoi. Noms de CTE explicites. Commentaires orientés métier.

Découvrir
DML – Écriture & modificationNiveauAvancé

transactions

Une transaction regroupe plusieurs actions en une unité. Soit tout passe, soit rien. Utile pour maintenir la cohérence.

Découvrir
DQL – Requêtes avancéesNiveauAvancé

UNION / UNION ALL

UNION combine deux résultats en supprimant les doublons. UNION ALL combine sans supprimer les doublons. Les colonnes doivent être compatibles.

Découvrir
Performance et optimisationNiveauAvancé

VACUUM et ANALYZE

Récupère l'espace et met à jour les statistiques pour maintenir les performances.

Découvrir
DDL – Modélisation & schémaNiveauAvancé

Vues matérialisées

Une MATERIALIZED VIEW stocke physiquement le résultat d'une requête. Plus rapide mais nécessite REFRESH pour mettre à jour.

Découvrir
DML – Écriture & modificationNiveauAvancé

WITH dans les DML (CTE modifiantes)

Utilisez des CTE avec INSERT/UPDATE/DELETE pour des modifications complexes atomiques.

Découvrir
DQL – Requêtes avancéesNiveauExpert

CTE récursif (WITH RECURSIVE)

WITH RECURSIVE permet de faire des requêtes récursives, utiles pour traverser des hiérarchies.

Découvrir