sql >> Database >  >> RDS >> PostgreSQL

Waarom werken CROSS JOIN-voorwaarden niet in de 'ON'-clausule, alleen in de WHERE-clausule?

CROSS JOIN is de SQL-operator om een ​​volledig cartesiaans product tussen twee tabellen uit te voeren. Omdat het een cartesiaans product is, staat het geen enkele voorwaarde toe tijdens de operatie , kunt u het resultaat alleen beperken met een filterbewerking (de WHERE-voorwaarde).

JOIN (INNER en OUTER JOIN, dat wil zeggen) operators zijn gewoon een cartesiaans product samen met de filteroperator uitgedrukt in het ON-gedeelte van de operator (en in feite was er in de oorspronkelijke syntaxis van SQL geen JOIN-operator, gewoon de "komma" notatie om het product aan te duiden met de join-voorwaarde die altijd wordt uitgedrukt in het WHERE-gedeelte).

Voorbeelden:

"oude" notatie:

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

equivalent aan de "moderne" notatie:

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

terwijl, voor het cartesiaanse product:

"oude" notatie:

SELECT ...
FROM table1 t1, table2 t2

equivalent aan de "moderne" notatie:

SELECT ...
FROM table1 t1 CROSS JOIN table2 t2

Met andere woorden, een CROSS JOIN waarvoor een voorwaarde is vereist, is eigenlijk een soort INNER JOIN.




  1. UNPIVOT op meerdere kolommen om meerdere kolommen te retourneren

  2. verklaringen voorbereid met behulp van psycopg

  3. Optimaliseer de django-query om de externe sleutel en de django-taggit-relatie op te halen

  4. Tabelalias gebruiken in een andere query om een ​​boomstructuur te doorlopen