Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Unterschied zwischen ON- und WHERE-Klauseln in SQL-Tabellenverknüpfungen

Der Hauptunterschied besteht darin, wenn Sie verschiedene Joins verwenden.

Normalerweise sollten Sie das gleiche Ergebnis sehen, wenn Sie Inner Joins verwenden würden, aber sobald Sie beginnen, LEFT Joins zu verwenden, werden sich die Ergebnisse ändern.

Sehen Sie sich das folgende Beispiel an

SQL-Geige DEMO

Und schau dir den folgenden Artikel an (sehr erklärend)

BEARBEITEN für @ShannonSeverance

Schema- und Testdaten

CREATE TABLE Table1 (
  ID INT,
  Val VARCHAR(20)
 );

INSERT INTO Table1 VALUES (1,'a');
INSERT INTO Table1 VALUES (2,'a');

CREATE TABLE Table2 (
  ID INT,
  Val VARCHAR(20)
 );

INSERT INTO Table2 VALUES (1,'a');

und Tests

SELECT t1.ID,
t1.Val,
t2.ID ID2,
t2.Val Val2
FROM Table1 t1 INNER JOIN
Table2 t2 ON t1.ID = t2.ID AND t1.Val = t2.Val;

SELECT  t1.ID,
t1.Val,
t2.ID ID2,
t2.Val Val2
FROM Table1 t1,Table2 t2 
WHERE t1.ID = t2.ID
 AND t1.Val = t2.Val;

SELECT  t1.ID,
t1.Val,
t2.ID ID2,
t2.Val Val2
FROM Table1 t1 LEFT JOIN
Table2 t2 ON t1.ID = t2.ID  AND t1.Val = t2.Val;

SELECT  t1.ID,
t1.Val,
t2.ID ID2,
t2.Val Val2
FROM Table1 t1 LEFT JOIN
Table2 t2 ON t1.ID = t2.ID  
WHERE t1.Val = t2.Val;