PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Perché le condizioni CROSS JOIN non funzionano nella clausola 'ON', ma solo nella clausola WHERE?

CROSS JOIN è l'operatore SQL per eseguire un prodotto cartesiano completo tra due tabelle. Trattandosi di un prodotto cartesiano, non ammette alcuna condizione durante l'operazione , puoi limitarne il risultato solo con alcune operazioni di filtro (la condizione WHERE).

Gli operatori JOIN (INNER e OUTER JOIN, cioè), sono semplicemente prodotti cartesiani insieme all'operatore di filtraggio espresso nella parte ON dell'operatore (e infatti nella sintassi originale di SQL non c'era l'operatore JOIN, semplicemente la “virgola” notazione per denotare il prodotto con la condizione di join espressa sempre nella parte DOVE).

Esempi:

notazione "vecchia":

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

equivalente alla notazione "moderna":

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

mentre, per il prodotto cartesiano:

notazione "vecchia":

SELECT ...
FROM table1 t1, table2 t2

equivalente alla notazione "moderna":

SELECT ...
FROM table1 t1 CROSS JOIN table2 t2

In altre parole, un CROSS JOIN che richiede una condizione è in realtà una sorta di INNER JOIN.