sql >> Databasteknik >  >> RDS >> Oracle

Skillnaden mellan ON- och WHERE-satser i SQL-tabellen ansluter

Den största skillnaden är när du använder olika joins.

Vanligtvis bör du se samma resultat om du skulle använda inre kopplingar, men när du väl börjar använda LEFT-kopplingar kommer resultaten att ändras.

Ta en titt på följande exempel

SQL Fiddle DEMO

Och ta en titt på följande artikel (mycket förklarande)

EDIT för @ShannonSeverance

Schema och testdata

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

och tester

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;


  1. Byt ut SQL-markörer med alternativ för att undvika prestandaproblem

  2. Ta reda på datatypen för kolumnerna som returneras i en resultatuppsättning i SQL Server

  3. Finns det en timeout för inaktiva PostgreSQL-anslutningar?

  4. MariaDB USER() Förklarat