Utiliser des jointures croisées

Effectué

Une jointure croisée est simplement un produit cartésien de deux tables. À l’aide de la syntaxe ANSI SQL-89, vous pouvez créer une jointure croisée en désactivant simplement le filtre qui connecte les deux tables. L’utilisation de la syntaxe ANSI-92 est un peu plus difficile, ce qui est bien, car en général vous n’avez pas forcément envie d’utiliser une jointure croisée. Avec la syntaxe ANSI-92, il est très peu probable que vous finissiez avec une jointure croisée par inadvertance.

Pour créer explicitement un produit cartésien, vous utilisez l’opérateur CROSS JOIN.

Cette opération crée un jeu de résultats avec toutes les combinaisons possibles de lignes d’entrée :

SELECT <select_list>
FROM table1 AS t1
CROSS JOIN table2 AS t2;

Bien que ce résultat ne soit généralement pas une sortie souhaitée, quelques applications pratiques demandent l’écriture d’une jointure croisée explicite :

  • Création d’une table de nombres, avec une ligne pour chaque valeur possible d’une plage.
  • Génération de grands volumes de données à des fins de test. Quand une table de 100 lignes a une jointure croisée avec elle-même, vous obtenez facilement 10 000 lignes de sortie sans beaucoup de travail.

Syntaxe d’une jointure croisée

Quand vous écrivez des requêtes avec des jointures croisées, tenez compte des indications suivantes :

  • Aucune correspondance des lignes n’est effectuée et aucune clause ON n’est donc utilisée. (C’est une erreur d’utiliser une clause ON avec CROSS JOIN.)
  • Pour utiliser la syntaxe ANSI SQL-92, séparez les noms de table d’entrée par l’opérateur CROSS JOIN.

La requête suivante est un exemple d’utilisation de jointure croisée pour créer toutes les combinaisons d’employés et de produits :

SELECT emp.FirstName, prd.Name
FROM HR.Employee AS emp
CROSS JOIN Production.Product AS prd;