Accéder au contenu principal
Documents
Gestion des tableaux et des schémasSyntaxe de baseDéclencheursBases de donnéesFonctions de la dateFonctions des chaînes de caractèresFonctions mathématiquesFonctions JSONIndexes

PostgreSQL CROSS JOIN

La fonction `CROSS JOIN` de PostgreSQL produit un produit cartésien de deux tableaux, ce qui signifie qu'elle renvoie toutes les combinaisons possibles de lignes des tableaux joints. Cette syntaxe de base est particulièrement utile lorsque vous devez combiner chaque ligne d'un tableau avec chaque ligne d'un autre tableau.

Un produit cartésien est le résultat de la combinaison de chaque ligne d'un tableau avec chaque ligne d'un autre tableau, ce qui conduit à un ensemble de données où le nombre de lignes est le produit des nombres de lignes des tableaux individuels.

Utilisation

La fonction `CROSS JOIN` est utilisée lorsque vous souhaitez associer chaque ligne d'un tableau à chaque ligne d'un autre tableau, sans tenir compte des valeurs correspondantes. Cela peut s'avérer utile lorsque vous avez besoin de toutes les combinaisons possibles de données provenant de deux ensembles de données.

SELECT *
FROM table1
CROSS JOIN table2;

Dans cette syntaxe, `CROSS JOIN` combine chaque ligne de `table1` avec chaque ligne de `table2`. L'ordre des tableaux dans l'instruction `CROSS JOIN` peut affecter la séquence des données résultantes, mais pas le contenu lui-même.

Exemples

1. Base CROSS JOIN

SELECT *
FROM products
CROSS JOIN categories;

Cet exemple génère un produit cartésien entre `produits` et `catégories`, en produisant toutes les combinaisons possibles de produits et de catégories. Si `products` a 10 lignes et `categories` a 5 lignes, le jeu de résultats contiendra 50 lignes.

2. CROSS JOIN avec colonnes sélectionnées

SELECT products.product_name, categories.category_name
FROM products
CROSS JOIN categories;

Ici, le `CROSS JOIN` est utilisé pour combiner des colonnes spécifiques de `products` et de `categories`, ce qui permet d'obtenir un ensemble de résultats plus ciblé. La taille de l'ensemble des résultats reste la même, mais seules les colonnes sélectionnées sont affichées.

3. CROSS JOIN avec des filtres supplémentaires

SELECT a.name, b.course
FROM students a
CROSS JOIN courses b
WHERE b.is_active = true;

Cet exemple applique un filtre après l'exécution d'une `CROSS JOIN`, ce qui permet d'obtenir un produit cartésien composé uniquement des cours actifs et de tous les étudiants. La taille de l'ensemble des résultats dépend du nombre de cours actifs.

4. CROSS JOIN avec de petits ensembles de données

SELECT x.item, y.value
FROM small_table1 x
CROSS JOIN small_table2 y;

Lorsque vous travaillez avec de petits ensembles de données, une "CROSS JOIN" peut être pratique sans problème de performance. Par exemple, en combinant 3 lignes de `small_table1` avec 4 lignes de `small_table2`, on obtient seulement 12 lignes.

Conseils et bonnes pratiques

  • Comprendre la taille des ensembles de résultats. Étant donné que la fonction "CROSS JOIN" multiplie le nombre de lignes, soyez prudent quant à la possibilité d'obtenir des ensembles de données volumineux, ce qui peut entraîner des problèmes de performance.
  • Utilisez-le de manière sélective. N'appliquez la fonction "CROSS JOIN" que lorsqu'un produit cartésien est vraiment nécessaire, par exemple pour générer des combinaisons à des fins de test ou de rapport.
  • Combinez avec des filtres. Utilisez les clauses `WHERE` pour limiter les résultats aux combinaisons pertinentes après avoir effectué une `CROSS JOIN`.
  • Envisagez des alternatives. Si des critères de correspondance spécifiques sont nécessaires, une `INNER JOIN` ou `LEFT JOIN` peut être plus appropriée. Par exemple, utilisez un `INNER JOIN` lorsque vous avez besoin de faire correspondre des tableaux sur la base de conditions spécifiques, ou un `LEFT JOIN` pour inclure toutes les lignes d'un tableau avec les lignes correspondantes d'un autre tableau.