Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Filtrowanie JOIN:GDZIE vs. ON

Dostarczono link @Gratzy jest pomocne

Rozróżnienie między warunkami w klauzuli ON i klauzuli WHERE jest z pewnością szare.

Dla INNER JOINS są one równoważne. W przypadku OUTER JOINS rozumiesz, że klauzula WHERE jest koncepcyjnie stosowana po ocenie warunku WŁĄCZENIA.

Ale w wielu przypadkach różnica polega bardziej na intencji niż funkcjonalności. Często występuje różnica semantyczna między warunkami ON a klauzulą ​​WHERE.

Na przykład starsze wersje SQL Server rzeczywiście implementowały składnię ON przy użyciu warunków w klauzuli WHERE, wykorzystując *= lub =* składnia sugerująca sprzężenia LEFT lub RIGHT (co prowadziło w niektórych przypadkach do dziwnie subtelnie różniących się wyników od odpowiedników LEFT i RIGHT JOIN)

Ogólnie radzę zawsze używać odpowiednich pól kluczowych w klauzuli ON, aby łączyć rekordy na podstawie logiki kojarzenia rekordów ze sobą. Użyj klauzuli WHERE, aby zastosować warunki filtrowania, które stopniowo ograniczają ten zestaw wyników.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pivot bez funkcji agregującej w MSSQL 2008 R2

  2. Jak przywrócić do innej bazy danych w SQL Server?

  3. SQL Server DATEPART() vs DATENAME() — jaka jest różnica?

  4. varbinary do ciągu w SQL Server

  5. Jak uzyskać kolejną wartość sekwencji SQL Server w Entity Framework?