PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Pourquoi les conditions CROSS JOIN ne fonctionnent-elles pas dans la clause 'ON', uniquement dans la clause WHERE ?

CROSS JOIN est l'opérateur SQL pour effectuer un produit cartésien complet entre deux tables. Comme il s'agit d'un produit cartésien, il n'autorise aucune condition pendant l'opération , vous ne pouvez restreindre son résultat qu'avec une opération de filtrage (la condition WHERE).

Les opérateurs JOIN (INNER et OUTER JOIN, c'est-à-dire) sont simplement un produit cartésien avec l'opérateur de filtrage exprimé dans la partie ON de l'opérateur (et en fait, dans la syntaxe originale de SQL, il n'y avait pas d'opérateur JOIN, simplement la "virgule" notation pour désigner le produit avec la condition de jointure exprimée toujours dans la partie WHERE).

Exemples :

notation "ancienne" :

SELECT ...
FROM table1 t1, table2 t2
WHERE t1.attribute = t2.attribute

équivalent à la notation "moderne" :

SELECT ...
FROM table1 t1 INNER JOIN table2 t2 ON t1.attribute = t2.attribute

tandis que, pour le produit cartésien :

notation "ancienne" :

SELECT ...
FROM table1 t1, table2 t2

équivalent à la notation "moderne" :

SELECT ...
FROM table1 t1 CROSS JOIN table2 t2

En d'autres termes, un CROSS JOIN qui nécessite une condition est en fait une sorte de INNER JOIN.