Guide détaillé syntaxe SQL
Résumé
Ce guide complet couvre l’ensemble des concepts fondamentaux de SQL, des opérations de base jusqu’aux fonctionnalités avancées.
N’en faites pas une lecture exhaustive mais cherchez-y des solutions aux problèmes rencontrés.
Table des matières
1. Agrégation et Regroupement
Les fonctions d’agrégation permettent de calculer des statistiques sur des ensembles de données. Combinées avec GROUP BY, elles permettent d’analyser les données par sous-groupes.
GROUP BY
Fonctionnalité: Regroupe les lignes ayant les mêmes valeurs dans les colonnes spécifiées. Essentiel pour l’analyse de données par catégories ou caractéristiques communes.
Syntaxe:
Points importants:
- Toute colonne dans le
SELECTqui n’est pas dans une fonction d’agrégation doit apparaître dans leGROUP BY - L’ordre des colonnes dans
GROUP BYn’affecte pas le résultat - Peut être utilisé avec plusieurs colonnes pour créer des sous-groupes plus précis
Exemple:
Explication: Cette requête analyse les habitudes d’achat par client en:
- Comptant le nombre total d’achats de chaque client (
COUNT(*)) - Calculant le montant total dépensé par client (
SUM(p.Prix)) - Le regroupement par
NumeroClientassure que nous obtenons une ligne par client
HAVING
Fonctionnalité: Filtre les résultats après l’agrégation, contrairement à WHERE qui filtre avant l’agrégation.
Syntaxe:
Points importants:
- S’utilise uniquement avec
GROUP BY - Utilise des fonctions d’agrégation dans ses conditions
- S’exécute après le
GROUP BY, contrairement àWHEREqui s’exécute avant
Exemple:
Explication: Cette requête identifie les clients fidèles en:
- Regroupant d’abord toutes les ventes par client
- Ne conservant que les clients ayant effectué plus de 5 achats ET dépensé plus de 1000€
SUM
Fonctionnalité: Calcule la somme totale des valeurs d’une colonne numérique.
Syntaxe:
Points importants:
- Ignore automatiquement les valeurs
NULL - Ne peut être utilisé qu’avec des colonnes numériques
- Peut être combiné avec GROUP BY pour des sous-totaux
Exemple:
Explication: Cette requête analyse les dépenses des clients en:
- Calculant le montant total des achats pour chaque client
- Calculant également le panier moyen (total divisé par nombre d’achats)
- Le regroupement par nom de client permet de voir ces statistiques par client
AVG
Fonctionnalité: Calcule la moyenne des valeurs d’une colonne numérique.
Syntaxe:
Points importants:
- Ignore automatiquement les valeurs
NULL - Ne fonctionne que sur les colonnes numériques
- Peut donner des résultats avec décimales même sur des entiers
- Souvent utilisé avec ROUND() pour formater le résultat
Exemple:
Explication: Cette requête analyse l’évolution des ventes en:
- Regroupant les ventes par année
- Calculant le panier moyen pour chaque année
- Comptant le nombre de ventes pour contexte
2. Tri et Filtrage
ORDER BY
Fonctionnalité: Trie les résultats selon un ou plusieurs critères.
Syntaxe:
Points importants:
ASCest le tri par défaut (croissant)- Peut utiliser plusieurs colonnes pour un tri hiérarchique
- Peut trier sur des colonnes non sélectionnées
- Peut trier sur des expressions ou des calculs
Exemple:
Explication: Cette requête classe les clients par valeur en:
- Calculant leurs statistiques d’achat
- Les triant d’abord par montant total dépensé
- À montant égal, les triant par nombre d’achats
DISTINCT
Fonctionnalité: Élimine les valeurs dupliquées dans un jeu de résultats.
Syntaxe:
Points importants:
- S’applique à toutes les colonnes listées dans le
SELECT - Pour être considérées comme dupliquées, les lignes doivent avoir des valeurs identiques dans TOUTES les colonnes sélectionnées
- Une seule occurrence de chaque combinaison de valeurs est retournée
- Peut impacter les performances sur de grands ensembles de données
Exemple:
Explication: Cette requête identifie toutes les combinaisons uniques de catégories et fournisseurs pour les produits vendus durant la dernière année, permettant d’analyser la diversité du portefeuille de ventes.
LIKE
Fonctionnalité: Permet la recherche de motifs dans les chaînes de caractères.
Syntaxe:
Points importants:
- % : représente n’importe quel nombre de caractères (y compris zéro)
- _ : représente exactement un caractère
- Sensible à la casse par défaut (utiliser
ILIKEpour ignorer la casse) - On peut utiliser
NOT LIKEpour inverser la correspondance
Exemple:
Explication: Cette requête analyse les produits gaming en:
- Recherchant les produits avec “Gaming” ou “Gamer” dans leur description
- Comptant leurs ventes
- Les classant par popularité
BETWEEN
Fonctionnalité: Simplifie la sélection d’une plage de valeurs.
Syntaxe:
Points importants:
- Inclusif des deux bornes
- Fonctionne avec des nombres, dates, et caractères
- Équivalent à:
colonne >= valeur1 AND colonne <= valeur2 - La première valeur doit être inférieure à la seconde
Exemple:
Explication: Cette requête analyse les ventes de produits de gamme moyenne en:
- Sélectionnant les produits entre 100€ et 500€
- Ne gardant que les ventes de 2023
- Calculant les statistiques de vente
AVG
Fonctionnalité: Calcule la moyenne des valeurs d’une colonne numérique.
Syntaxe:
Points importants:
- Ignore automatiquement les valeurs
NULL - Ne fonctionne que sur les colonnes numériques
- Peut donner des résultats avec décimales même sur des entiers
- Souvent utilisé avec
ROUND()pour formater le résultat
Exemple:
Explication: Cette requête analyse l’évolution des ventes en:
- Regroupant les ventes par année
- Calculant le panier moyen pour chaque année
- Comptant le nombre de ventes pour contexte
2. Tri et Filtrage
ORDER BY
Fonctionnalité: Trie les résultats selon un ou plusieurs critères.
Syntaxe:
Points importants:
ASCest le tri par défaut (croissant)- Peut utiliser plusieurs colonnes pour un tri hiérarchique
- Peut trier sur des colonnes non sélectionnées
- Peut trier sur des expressions ou des calculs
Exemple:
Explication: Cette requête classe les clients par valeur en:
- Calculant leurs statistiques d’achat
- Les triant d’abord par montant total dépensé
- À montant égal, les triant par nombre d’achats
LIKE
Fonctionnalité: Permet la recherche de motifs dans les chaînes de caractères.
Syntaxe:
Points importants:
%: représente n’importe quel nombre de caractères (y compris zéro)_: représente exactement un caractère- Sensible à la casse par défaut (utiliser
ILIKEpour ignorer la casse) - Peut utiliser
NOT LIKEpour inverser la correspondance
Exemple:
Explication: Cette requête analyse les produits gaming en:
- Recherchant les produits avec “Gaming” ou “Gamer” dans leur description
- Comptant leurs ventes
- Les classant par popularité
BETWEEN
Fonctionnalité: Simplifie la sélection d’une plage de valeurs.
Syntaxe:
Points importants:
- Inclusif des deux bornes
- Fonctionne avec des nombres, dates, et caractères
- Équivalent à:
colonne >= valeur1 AND colonne <= valeur2 - La première valeur doit être inférieure à la seconde
Exemple:
Explication: Cette requête analyse les ventes de produits de gamme moyenne en:
- Sélectionnant les produits entre 100€ et 500€
- Ne gardant que les ventes de 2023
- Calculant les statistiques de vente
3. Relations et Jointures
Jointure
En informatique et plus particulièrement dans les bases de données relationnelles, la jointure ou appariement est l’opération permettant d’associer plusieurs tables ou vues de la base par le biais d’un lien logique de données entre les différentes tables ou vues, le lien étant vérifié par le biais d’un prédicat. Le résultat de l’opération est une nouvelle table.
Source : Définition de jointure sur Wikipedia, Consultée le 29 avril 2020
JOIN (INNER JOIN)
Fonctionnalité: Combine les lignes de deux tables lorsqu’elles correspondent aux critères de jointure.

Syntaxe:
Points importants:
- Ne retourne que les lignes ayant des correspondances dans les deux tables
- Peut utiliser plusieurs conditions de jointure avec
AND/OR - L’ordre des tables peut affecter les performances mais pas le résultat
INNER JOINetJOINsont équivalents
Exemple:
Explication: Cette requête analyse l’historique d’achat récent en:
- Combinant les informations des trois tables
- Ne gardant que les correspondances exactes
- Calculant le nombre total d’achats pour chaque client
LEFT JOIN
Fonctionnalité: Retourne toutes les lignes de la table de gauche et les correspondances de la table de droite.

Syntaxe:
Points importants:
- Le mot
OUTERest optionnel - Les lignes sans correspondance ont des
NULLdans les colonnes de la table de droite - L’ordre des tables est important car il détermine quelle table est “complète”
- Utile pour trouver des éléments manquants ou pour des rapports exhaustifs
Exemple:
Explication: Cette requête analyse le catalogue complet en:
- Gardant tous les produits, même ceux jamais vendus
- Comptant les ventes pour chaque produit
- Catégorisant les produits selon leurs performances
RIGHT JOIN
Fonctionnalité: Similaire au LEFT JOIN mais garde toutes les lignes de la table de droite.

Syntaxe:
Points importants:
- Moins couramment utilisé que
LEFT JOIN - Peut toujours être réécrit en
LEFT JOINen inversant l’ordre des tables - Utile quand la table principale est à droite dans la requête
Exemple:
Explication: Cette requête préserve l’historique des ventes en:
- Gardant toutes les ventes, même si le client a été supprimé
- Utilisant COALESCE pour gérer les clients manquants
- Ne montrant que les 90 derniers jours
FULL OUTER JOIN
Fonctionnalité: Combine les résultats d’un LEFT JOIN et d’un RIGHT JOIN.

Syntaxe:
Points importants:
- Retourne toutes les lignes des deux tables
- Remplit avec
NULLquand il n’y a pas de correspondance - Utile pour trouver les incohérences dans les données
- Moins fréquemment utilisé que les autres types de
JOIN
Exemple:
Explication: Cette requête vérifie l’intégrité des données en:
- Identifiant les ventes avec clients ou produits manquants
- Montrant toutes les anomalies possibles
- Facilitant le nettoyage des données
4. Alias et Expressions
AS
Fonctionnalité: Renomme temporairement les colonnes ou tables pour plus de clarté.
Syntaxe:
Points importants:
- Le mot-clé
ASest optionnel mais recommandé pour la lisibilité - Les alias de tables doivent être uniques dans la requête
- Utile pour les auto-jointures ou les calculs complexes
- Les alias de colonnes sont utilisables dans
ORDER BYmais pas dansWHERE
Exemple:
Explication: Cette requête utilise les alias pour:
- Simplifier la référence aux tables dans les jointures
- Donner des noms explicites aux calculs
- Créer une sous-requête lisible
- Faciliter la catégorisation des clients
CASE
Fonctionnalité: Crée des conditions pour transformer les données.
Syntaxe:
Points importants:
- Si pas de
ELSE, retourneNULLpour les cas non traités - Peut être imbriqué dans un autre
CASE - Peut être utilisé dans
SELECT,WHERE,ORDER BY, etGROUP BY - Toutes les branches
THENdoivent retourner le même type de données
Exemple:
Explication: Cette requête analyse les produits en:
- Catégorisant les prix en gammes
- Évaluant les performances de vente
- Comparant avec la moyenne générale
COALESCE
Fonctionnalité: Renvoie le premier argument non NULL dans une liste.
Syntaxe:
Points importants:
- Prend un nombre illimité d’arguments
- Les arguments doivent être de types compatibles
- Retourne
NULLuniquement si tous les arguments sontNULL - Très utile pour gérer les valeurs manquantes ou par défaut
Exemple:
Explication: Cette requête utilise COALESCE pour:
- Déterminer la dernière activité du client en prenant la première date non
NULLentre:- Sa dernière vente
- Sa date de création
- Une date par défaut
- Gérer les clients sans achats en remplaçant
NULLpar 0 - Fournir un moyen de contact en priorisant téléphone, puis email
- Utile pour créer des rapports complets sans valeurs manquantes
Cas d’utilisation courants:
- Rapports et exports de données sans
NULL - Chaînes de substitution dans les interfaces utilisateur
- Calculs avec valeurs par défaut
- Fusion de données provenant de différentes sources
INTERVAL
Fonctionnalité: Manipule les dates et les durées.
Syntaxe:
Points importants:
- Unités disponibles:
year,month,day,hour,minute,second - Peut combiner plusieurs unités:
1 year 2 months - Peut être utilisé avec les opérateurs
+et- - Utile pour les calculs de dates et les fenêtres temporelles
Exemple:
Explication: Cette requête analyse les tendances temporelles en:
- Regroupant les ventes par mois
- Comptant les ventes des 30 derniers jours
- Comparant avec la même période l’année précédente
EXTRACT
Fonctionnalité: Extrait une partie spécifique d’une date ou d’un timestamp.
Syntaxe:
Parties disponibles:
CENTURY,DECADE,YEAR,MONTH,DAYHOUR,MINUTE,SECONDDOW(jour de la semaine, 0-6)DOY(jour de l’année, 1-366)WEEK(semaine de l’année)QUARTER(trimestre, 1-4)
Points importants:
- Retourne un nombre
- Peut être utilisé dans
GROUP BYetWHERE - Format 24h pour les heures (0-23)
Exemple:
Explication: Cette requête analyse les patterns temporels en:
- Décomposant les dates en année et mois
- Calculant les statistiques mensuelles
- Identifiant si les ventes ont lieu en semaine/weekend
5. Vues et Droits d’accès
CREATE VIEW
Fonctionnalité: Crée une vue virtuelle permettant de simplifier des requêtes complexes.
Syntaxe:
Points importants:
OR REPLACEpermet de mettre à jour une vue existanteMATERIALIZEDstocke physiquement les résultats (améliore les performances)CHECK OPTIONgarantit que les modifications de données via la vue respectent les conditions définies dans la vue (c’est à dire qu’il est impossible d’ajouter ou de modifier des données qui n’apparaîtraient pas dans la vue)- Les vues peuvent être utilisées comme des tables dans les requêtes
Exemple:
Explication: Cette vue:
- Crée un résumé mensuel des ventes par produit
- Calcule des métriques de base (nombre de ventes, chiffre d’affaires, clients uniques)
- Simplifie l’accès aux analyses courantes
CREATE ROLE
Fonctionnalité: Crée un rôle pour gérer les permissions d’accès.
Syntaxe:
Points importants:
- Un rôle peut représenter un utilisateur ou un groupe
- Les options définissent les capacités globales du rôle
- Les rôles peuvent hériter des permissions d’autres rôles
LOGINpermet au rôle de se connecter à la base
Exemple:
Explication: Cette configuration:
- Crée deux niveaux d’accès distincts
- Limite les commerciaux à la lecture seule des analyses
- Donne plus de droits aux managers
- Maintient la sécurité des données
GRANT
Fonctionnalité: Attribue des privilèges spécifiques à des rôles.
Syntaxe:
Privilèges disponibles:
SELECT: Lecture des donnéesINSERT: Ajout de donnéesUPDATE: Modification des donnéesDELETE: Suppression de donnéesTRUNCATE: Vidage de tableREFERENCES: Création de clés étrangèresTRIGGER: Création de triggersALL PRIVILEGES: Tous les droits
Points importants:
WITH GRANT OPTIONpermet au rôle de transmettre ses privilèges- Les privilèges peuvent être accordés au niveau table/colonne
- Peut accorder des privilèges sur des schémas entiers
- Certains privilèges nécessitent d’être propriétaire de l’objet
Exemple:
Explication: Cette configuration établit:
- Une hiérarchie claire des droits d’accès
- Des restrictions précises par rôle et responsabilité
- Une protection des données sensibles
- Un accès granulaire aux fonctionnalités
REVOKE
Fonctionnalité: Retire des privilèges précédemment accordés.
Syntaxe:
Points importants:
CASCADErévoque aussi les privilèges dépendantsRESTRICTempêche la révocation si des privilèges dépendants existent- Peut révoquer des privilèges spécifiques ou tous les privilèges
- Affecte uniquement les privilèges explicitement accordés
Exemple:
SET ROLE
Fonctionnalité: Change le rôle actif de l’utilisateur pour la session courante.
Syntaxe:
Points importants:
- Change uniquement le rôle actif pour la session en cours
- Nécessite que l’utilisateur soit membre du rôle cible
NONEréinitialise les droits au rôle de connexion initial- Les permissions actives deviennent celles du nouveau rôle
- L’utilisateur doit avoir le droit INHERIT sur le rôle cible
Exemple:
Explication: Cette approche:
- Permet de changer temporairement de contexte de sécurité
- Facilite le test des permissions des différents rôles
- Améliore la sécurité en limitant l’usage des privilèges élevés
- Suit le principe du moindre privilège en adaptant les droits au besoin
6. Requêtes avancées
Common Table Expressions (WITH)
Fonctionnalité: Crée des sous-requêtes temporaires nommées pour simplifier les requêtes complexes.
Syntaxe:
Points importants:
- Peut être récursif avec
RECURSIVE - Améliore la lisibilité des requêtes complexes
- Permet de réutiliser les résultats intermédiaires
- Peut définir plusieurs CTEs dans une seule requête
Exemple:
Explication: Cette requête complexe:
- Décompose l’analyse en étapes claires
- Calcule la croissance mensuelle
- Catégorise les tendances
- Facilite la maintenance et la compréhension