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

Czy zapytania ANSI JOIN i inne niż ANSI JOIN będą działać inaczej?

Te dwa zapytania są takie same, z wyjątkiem tego, że drugie to składnia SQL ANSI-92, a pierwsze to starsza składnia SQL, która nie zawiera klauzuli join. Powinny generować dokładnie taki sam wewnętrzny plan zapytań, chociaż możesz to sprawdzić.

Powinieneś używać składni ANSI-92 z kilku powodów

  • Użycie klauzuli JOIN oddziela logikę relacji od logiki filtra (GDZIE) i dzięki temu jest czystsze i łatwiejsze do zrozumienia.
  • Nie ma to znaczenia w przypadku tego konkretnego zapytania, ale jest kilka sytuacji, w których starsza składnia sprzężenia zewnętrznego (przy użyciu + ) jest niejednoznaczna, a wyniki zapytania są w związku z tym zależne od implementacji - lub zapytanie nie może być w ogóle rozwiązane. Nie występują z ANSI-92
  • To dobra praktyka, ponieważ większość programistów i dba używa obecnie ANSI-92 i powinieneś przestrzegać tego standardu. Z pewnością wszystkie nowoczesne narzędzia do zapytań wygenerują ANSI-92.
  • Jak wskazuje @gbn, pozwala to uniknąć przypadkowych połączeń krzyżowych.

Ja sam przez jakiś czas opierałem się ANSI-92, ponieważ starą składnię ma niewielką przewagę koncepcyjną, ponieważ łatwiej jest wyobrazić sobie SQL jako masowe złączenie kartezjańskie wszystkich używanych tabel, po którym następuje operacja filtrowania - technika mentalna, która może być przydatna do zrozumienia, co robi zapytanie SQL. Jednak kilka lat temu zdecydowałem, że muszę iść z duchem czasu i po stosunkowo krótkim okresie dostosowawczym teraz zdecydowanie wolę to - głównie z pierwszego powodu podanego powyżej. Jedynym miejscem, w którym należy odejść od składni ANSI-92, a raczej nie używać tej opcji, są naturalne złączenia, które są domyślnie niebezpieczne.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Uzyskaj listę kont pocztowych bazy danych w SQL Server (T-SQL)

  2. Jak używać instrukcji Case do formatowania warunkowego w wybranym zapytaniu — samouczek SQL Server / TSQL, część 116

  3. Agreguj LUB bitowe w podzapytaniu

  4. Metody eksportu i importu tabel bazy danych SQL Server

  5. Jak zwrócić nazwy kolumn tabeli?