PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Warum funktionieren CROSS JOIN-Bedingungen nicht in der 'ON'-Klausel, sondern nur in der WHERE-Klausel?

CROSS JOIN ist der SQL-Operator, um ein vollständiges kartesisches Produkt zwischen zwei Tabellen auszuführen. Da es sich um ein kartesisches Produkt handelt, lässt es keine Bedingung während des Betriebs zu , können Sie das Ergebnis nur mit einer Filteroperation (der WHERE-Bedingung) einschränken.

JOIN-Operatoren (d. h. INNER und OUTER JOIN) sind einfach ein kartesisches Produkt zusammen mit dem Filteroperator, der im ON-Teil des Operators ausgedrückt wird (und tatsächlich gab es in der ursprünglichen Syntax von SQL keinen JOIN-Operator, nur das „Komma“ Notation, um das Produkt mit der Join-Bedingung zu bezeichnen, die immer im WHERE-Teil ausgedrückt wird).

Beispiele:

"alte" Schreibweise:

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

Äquivalent zur "modernen" Notation:

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

während für das kartesische Produkt:

"alte" Schreibweise:

SELECT ...
FROM table1 t1, table2 t2

Äquivalent zur "modernen" Notation:

SELECT ...
FROM table1 t1 CROSS JOIN table2 t2

Mit anderen Worten, ein CROSS JOIN, der eine Bedingung erfordert, ist eigentlich eine Art INNER JOIN.