Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Филтриране на JOINs:WHERE срещу ON

осигурена връзка с @Gratzy е полезно

Разликата между условията в клаузата ON и клаузата WHERE със сигурност е сива.

За INNER JOINS те са еквивалентни. За OUTER JOINS вашето разбиране е правилно, че клаузата WHERE се прилага концептуално, след като условието ON е оценено.

Но в много случаи разликата се свежда повече до намерението, отколкото до функционалността. Често има семантична разлика между условията ON и клаузата WHERE.

Например, по-старите версии на SQL Server наистина прилагаха синтаксиса ON, използвайки условия в клаузата WHERE, използвайки *= или =* синтаксис за подразбиране на ЛЯВИ или ДЯСНИ съединявания (което доведе до странно едва доловимо различни резултати от еквивалентите на ЛЯВИ и ДЕСНИ JOIN в някои случаи)

Като цяло моят съвет е винаги да използвате подходящите ключови полета в клаузата ON, за да обединявате записи въз основа на логиката на това как записите се асоциират един с друг. Използвайте клаузата WHERE, за да приложите условия за филтриране, които постепенно ограничават този набор от резултати.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как мога да клонирам база данни на SQL Server на същия сървър в SQL Server 2008 Express?

  2. SQL заявка за намиране на последния ден от месеца

  3. SQL Server Уникален композитен ключ от две полета с автоматично увеличение на второ поле

  4. Сложен вид поле низ - число - низ

  5. Как да вмъкнете запис и да върнете новосъздадения идентификатор с помощта на една SqlCommand?