Oracle
 sql >> Base de données >  >> RDS >> Oracle

Différence entre les clauses ON et WHERE dans les jointures de table SQL

La principale différence est lorsque vous utilisez différentes jointures.

En règle générale, vous devriez voir le même résultat si vous utilisiez des jointures internes, mais une fois que vous commencez à utiliser des jointures LEFT, les résultats changeront.

Regardez l'exemple suivant

DÉMO SQL Fiddle

Et jetez un oeil à l'article suivant (très explicatif)

MODIFIER pour @ShannonSeverance

Schéma et données de test

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');

et Essais

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;