Bases de données PDF Gratuit

Cours SQL en PDF (Avancé)

Base du langage SQL et des bases de données : ce qu'il faut savoir. Définition : ensemble de commandes standardisées pour interroger, manipuler et définir des données dans des SGBD relationnels populaires comme MySQL, PostgreSQL, SQL Server et Oracle. Le langage couvre la lecture (SELECT), la manipulation (INSERT, UPDATE, DELETE), la définition de schéma (CREATE/ALTER/DROP) et les opérations d'optimisation (index, EXPLAIN). Document conçu comme référence pratique au format PDF, téléchargeable, avec exemples et syntaxes annotées pour différents environnements.

🎯 Ce que vous allez apprendre

Exemples applicables sur MySQL, PostgreSQL, SQL Server et Oracle, avec indications de variantes de syntaxe et recommandations d'optimisation. Le contenu met l'accent sur les patterns utiles en production et les adaptations nécessaires selon l'implémentation ciblée.

  • Lecture et filtrage de données (SELECT, WHERE, ORDER BY, LIMIT) — maîtrise des formes de SELECT et de l'ordre d'évaluation des clauses pour construire des jeux de résultats pertinents; exemples concrets de sélection multi‑colonnes et contexte d'usage du joker *.
    SELECT column_name FROM table WHERE condition;
  • Jointures relationnelles (INNER, LEFT, RIGHT, FULL, CROSS, SELF, NATURAL) — sémantiques de jointure, effets sur la cardinalité et stratégies pour choisir INNER vs OUTER en évitant duplication ou exclusion de lignes.
  • Regroupement et agrégation (GROUP BY, HAVING, DISTINCT, CASE) — fonctions d'agrégat et filtres post‑agrégation pour produire statistiques et rapports synthétiques; bonnes pratiques d'optimisation de DISTINCT vs GROUP BY.
  • Opérations sur ensembles et sous‑requêtes (UNION, INTERSECT, EXCEPT, EXISTS, ANY) — opérateurs d'ensemble et sous‑requêtes corrélées ou non corrélées pour exprimer logiques complexes; critères de choix entre BETWEEN, IN, EXISTS ou opérateurs d'ensemble pour lisibilité et performance.
  • DML et contrôle d'intégrité (INSERT INTO, UPDATE, DELETE, MERGE, ON DUPLICATE KEY) — gestion sûre des modifications de données et des conflits d'écriture; stratégies de mise à jour atomique et préservation de l'intégrité référentielle.
  • Performance et indexation (CREATE INDEX, index, EXPLAIN) — principes d'indexation et lecture d'un plan d'exécution via EXPLAIN; identification de scans séquentiels coûteux, recommandations d'index et interprétation de métriques de coût et de cardinalité.

📑 Sommaire du document

  • SQL SELECT
  • SQL GROUP BY
  • SQL UNION
  • SQL INSERT INTO
  • SQL UPDATE
  • SQL CREATE TABLE
  • Jointure SQL
  • Index SQL

Comparatif des syntaxes SQL : MySQL vs PostgreSQL

Les différences de syntaxe et de capacités entre MySQL et PostgreSQL influent sur la façon d'écrire et d'optimiser des requêtes. Le tableau suivant synthétise des écarts fréquentement rencontrés pour les jointures et pour les constructions d'agrégation avancées, afin de faciliter les adaptations lors d'un portage ou d'une optimisation.

Fonctionnalité MySQL PostgreSQL
FULL OUTER JOIN Pas de prise en charge directe dans la plupart des versions : on émule via LEFT JOIN/RIGHT JOIN + UNION. Prise en charge native de FULL OUTER JOIN, simplifiant l'expression et souvent le plan d'exécution.
Agrégats conditionnels Absence du mot‑clé FILTER ; on utilise des agrégats avec CASE ou expressions conditionnelles (ex. SUM(CASE WHEN cond THEN val ELSE 0 END)). Supporte la clause FILTER (WHERE ...) pour des agrégats plus lisibles et parfois plus performants dans certains scénarios.
Plan d'exécution (EXPLAIN) Présentation orientée tables, types de jointure et index possibles ; format et métriques spécifiques au moteur (ex. InnoDB). Affiche coûts estimés, rows estimate et méthodes de jointure (hash, merge, nested loop) ; facilitateur pour analyser choix d'algorithmes de l'optimiseur.

Optimisation des performances : au‑delà des index

L'indexation est nécessaire mais pas suffisante pour des gains durables. Cette section développe des leviers complémentaires : collecte et actualisation des statistiques, réécriture de requêtes pour réduire le volume de données scannées, partitionnement pour limiter la portée des lectures, et choix judicieux d'algorithmes de jointure. Dans le cadre de l'optimisation requêtes SQL, privilégiez d'abord l'analyse des plans (EXPLAIN), la vérification des estimations de cardinalité et la réduction des projections inutiles. Pour les jointures SQL avancées, testez différentes formes (réordonnancement des tables, usage de CTE matérialisés vs sous‑requêtes) et mesurez l'impact sur I/O et temps CPU. Ce tutoriel SQL MySQL PostgreSQL présente des cas concrets et des techniques reproductibles pour évaluer les bénéfices avant déploiement en production.

Compatibilité SGBD et standards SQL

Le contenu se réfère aux pratiques et standards SQL actuels et signale les différences de comportement entre implémentations. Les exemples sont annotés pour distinguer les constructions portables des extensions spécifiques aux fournisseurs, facilitant l'adaptation du code selon le SGBD ciblé. Cette approche permet d'utiliser ce manuel SQL avancé comme base pour des optimisations concrètes et pour l'analyse de plans d'exécution sur MySQL, PostgreSQL, SQL Server ou Oracle.

Différences MySQL vs PostgreSQL pour les jointures : PostgreSQL implémente nativement FULL OUTER JOIN, tandis que MySQL ne le propose pas directement et requiert généralement une combinaison de LEFT JOIN et RIGHT JOIN avec UNION pour obtenir un effet équivalent. Le comportement et les algorithmes d'exécution varient : PostgreSQL propose des plans incluant hash join, merge join et nested loop, avec un optimiseur orienté coûts, alors que MySQL (selon le moteur, ex. InnoDB) privilégie souvent des stratégies basées sur les index et nested loops ; ces différences influent sur le choix des index et sur les réécritures de requêtes pour l'optimisation.

💡 Pourquoi choisir ce cours ?

Rédigé par Tony Archambeau, auteur et praticien expérimenté en bases de données relationnelles, le document propose une progression pratique : exemples, cas concrets et syntaxes applicables immédiatement dans un SGBD. La licence mentionnée ci‑dessous facilite le partage et la réutilisation non commerciale. Mise à jour : 2026, avec conseils d'optimisation et retours d'expérience applicables aux principaux SGBD.

Document sous licence Creative Commons (Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0).

La mention de licence renforce la transparence et l'accès au contenu pour un public technique. Les chapitres consacrés à l'optimisation requêtes SQL et aux jointures SQL avancées comportent des exemples de réécriture et des recommandations spécifiques pour MySQL et PostgreSQL.

👤 À qui s'adresse ce cours ?

  • Public cible : développeurs backend, administrateurs de bases de données et data engineers qui construisent ou optimisent des requêtes SQL dans des SGBD relationnels.
  • Prérequis : notions de modèle relationnel, connaissance des requêtes SELECT de base, familiarité avec un SGBD (ligne de commande ou interface) et compréhension élémentaire des schémas et clés.

❓ Foire Aux Questions (FAQ)

Quelle différence existe‑t‑il entre UNION et UNION ALL ? UNION élimine les doublons via une étape de déduplication, tandis que UNION ALL concatène les ensembles sans suppression des doublons, plus performant si la déduplication n'est pas nécessaire.

Comment interpréter un plan EXPLAIN pour optimiser une jointure complexe ? Recherchez les indices utilisés, la méthode de jointure (nested loop, hash join, merge join) et les écarts entre estimations et mesures réelles de cardinalité; la présence de scans séquentiels élevés ou d'une forte divergence d'estimation indique souvent le besoin d'un index ou d'une réécriture de requête.

Exemples de cas d'usage réels

  • Reporting financier consolidé : utilisation de jointures et d'agrégats pour agréger transactions par compte, période et devises, puis application de filtres post‑agrégation (HAVING) pour détecter anomalies et grands écarts. Les techniques d'optimisation requêtes SQL présentées réduisent le temps de génération des rapports mensuels.
  • Analyse e‑commerce (panier et comportement) : combiner tables commandes, articles et sessions pour produire métriques comme taux d'abandon, valeur moyenne du panier et cohortes; usage de fenêtres (OVER()) pour calculer totaux cumulés et tendances hebdomadaires tout en limitant les lectures grâce à des index ciblés.
  • Tableaux de bord temps réel : requêtes de rapprochement (joins) optimisées pour restituer KPIs récents avec latence minimale ; stratégies recommandées : pré‑agrégation, materialized views (si supportées) et limitation des colonnes projetées.
  • Nettoyage et migration de données : sous‑requêtes corrélées et opérations DML sûres pour corriger doublons, maintenir intégrité référentielle et préparer jeux de données avant migration entre MySQL et PostgreSQL, en tenant compte des différences de syntaxe et de performances.

Exemples de requêtes SQL avancées

La section fournit des requêtes illustrant des patterns avancés : agrégations conditionnelles, fenêtres (OVER()), jointures complexes avec sous‑requêtes corrélées, et techniques pour limiter les effets de cardinalité élevée. Ces exemples accompagnent le manuel SQL PDF et montrent des approches concrètes d'optimisation (réduction des lectures, réécriture pour l'utilisation d'index, transformation d'opérations coûteuses en étapes plus efficientes). Les blocs de code sont fournis avec une annotation pour faciliter l'adaptation à MySQL ou PostgreSQL et pour améliorer l'accessibilité des exemples.