Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Różnica między klauzulami ON i WHERE w złączeniach tabel SQL

Główna różnica polega na tym, że używasz różnych połączeń.

Zwykle powinieneś zobaczyć ten sam wynik, jeśli użyjesz złączeń wewnętrznych, ale gdy zaczniesz używać złączeń LEWYCH, wyniki ulegną zmianie.

Spójrz na następujący przykład

DEMO SQL Fiddle

I spójrz na następujący artykuł (bardzo wyjaśniający)

EDYTUJ dla @ShannonSeverance

Schemat i dane testowe

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

i testy

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle 11g — Sprawdź ograniczenie za pomocą RegEx

  2. Określanie, czy dane pola w Oracle są typu Liczba

  3. Jak wyeksportować dane do pliku CSV w Oracle za pomocą procedury PL SQL?

  4. Funkcja LOCALTIMESTAMP() w Oracle

  5. Obsługa współbieżnych aktualizacji w trybie hibernacji