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

Hvorfor fungerer CROSS JOIN-betingelser ikke i 'ON'-klausulen, kun WHERE-klausulen?

CROSS JOIN er SQL-operatøren til at udføre et fuldt kartesisk produkt mellem to tabeller. Da det er et kartesisk produkt, tillader det ingen tilstand under operationen , kan du kun begrænse resultatet med en eller anden filtreringsoperation (WHERE-betingelsen).

JOIN (INNER og OUTER JOIN, det vil sige) operatorer, er simpelthen kartesiske produkter sammen med filtreringsoperatoren udtrykt i ON-delen af ​​operatoren (og faktisk i den oprindelige SQL-syntaks var der ingen JOIN-operator, blot "kommaet" notation for at angive produktet med sammenføjningsbetingelsen, der altid er udtrykt i WHERE-delen).

Eksempler:

"gammel" notation:

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

svarende til den "moderne" notation:

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

mens, for det kartesiske produkt:

"gammel" notation:

SELECT ...
FROM table1 t1, table2 t2

svarende til den "moderne" notation:

SELECT ...
FROM table1 t1 CROSS JOIN table2 t2

Med andre ord er en CROSS JOIN, der kræver en betingelse, faktisk en slags INNER JOIN.




  1. Problem med Oracle-char-type i Hibernate HQL-forespørgsel

  2. PostgreSQL gener_series() med SQL-funktion som argumenter

  3. hvordan sorteres rækkefølgen af ​​LEFT JOIN i SQL-forespørgsel?

  4. Find ud af, om et objekt er en fremmednøgle med OBJECTPROPERTY() i SQL Server