PaliSkill
SQL Intermédiaire

Leçon 2 / 9 — Chapitre 4: CTE et opérateurs ensemblistes

Le piège de l'ordre des colonnes dans un UNION

UNION fait correspondre les colonnes des deux requêtes par position, jamais par nom. Si les deux SELECT n'énumèrent pas leurs colonnes dans le même ordre, les valeurs se retrouvent mélangées sous les mauvais en-têtes — sans la moindre erreur, tant que les types restent compatibles.

SELECT nom, categorie FROM produits WHERE prix >= 500
UNION
SELECT categorie, nom FROM produits WHERE categorie = 'hygiene';

La première requête renvoie des paires (nom, categorie) : (Cahier, papeterie), (Jus, boisson), (Dentifrice, hygiene). La seconde, avec les colonnes inversées, renvoie des paires (categorie, nom) pour la catégorie hygiène : (hygiene, Savon), (hygiene, Dentifrice).

Le résultat final affiche ces deux séries sous les en-têtes de la première requête (nom, categorie) — la colonne nom du résultat contient donc, pour ces lignes-là, la valeur 'hygiene', et la colonne categorie contient 'Savon' ou 'Dentifrice'. Comme nom et categorie sont toutes deux du texte, aucune erreur ne se déclenche : le mélange passe silencieusement.

À retenir :

  • UNION associe les colonnes par position (1ʳᵉ avec 1ʳᵉ, 2ᵉ avec 2ᵉ...), jamais par nom d'en-tête.
  • Deux requêtes aux colonnes de même type mais dans un ordre différent s'exécutent sans erreur — et produisent un résultat sémantiquement faux.
  • Toujours vérifier que l'ordre des colonnes énumérées dans le SELECT est identique des deux côtés d'un UNION, pas seulement leur nombre et leur type.

À vous de jouer : corrigez la seconde requête ci-dessus pour qu'elle énumère ses colonnes dans le même ordre que la première (nom, categorie), et vérifiez que le résultat a de nouveau un sens.

🔒

Continuez ce module

Débloquez les leçons restantes ainsi que la certification finale.

2 500 XOF / 3,81 € / 4,15 $

Débloquez les 80 leçons restantes de ce module

Votre paiement est vérifié avant l'activation de l'accès