sql >> Databáze >  >> RDS >> Sqlserver

Budou dotazy ANSI JOIN vs. dotazy bez ANSI JOIN fungovat jinak?

Tyto dva dotazy jsou stejné, až na to, že druhý je syntaxe ANSI-92 SQL a první je starší syntaxe SQL, která nezahrnuje klauzuli spojení. Měly by vytvořit přesně stejný plán interních dotazů, i když možná budete chtít zkontrolovat.

Syntaxi ANSI-92 byste měli použít z několika důvodů

  • Použití klauzule JOIN odděluje logiku vztahu od logiky filtru (WHERE), a je tedy čistší a snáze pochopitelné.
  • Na tomto konkrétním dotazu nezáleží, ale existuje několik okolností, kdy je starší syntaxe vnějšího spojení (pomocí + ) nejednoznačná a výsledky dotazu jsou tedy závislé na implementaci – nebo dotaz nelze vyřešit vůbec. Ty se u ANSI-92 nevyskytují
  • Je to dobrá praxe, protože většina vývojářů a dba bude v dnešní době používat ANSI-92 a měli byste se řídit standardem. Všechny moderní dotazovací nástroje jistě vygenerují ANSI-92.
  • Jak zdůraznil @gbn, má tendenci se vyhýbat náhodným křížovým spojením.

Sám jsem ANSI-92 nějakou dobu odolával, protože stará syntaxe má mírnou koncepční výhodu, protože je snazší představit si SQL jako hromadné kartézské spojení všech použitých tabulek, po kterém následuje operace filtrování – mentální technika, která může být užitečná. pro pochopení toho, co dělá SQL dotaz. Před několika lety jsem se však rozhodl, že musím jít s dobou a po relativně krátké době přizpůsobení tomu nyní silně dávám přednost - především z prvního důvodu uvedeného výše. Jediné místo, kde byste se měli odchýlit od syntaxe ANSI-92, nebo raději tuto možnost nepoužívat, jsou přirozené spoje, které jsou implicitně nebezpečné.



  1. Proč při navazování připojení k serveru SQL došlo k chybě související se sítí nebo specifickou instancí?

  2. 2 způsoby, jak vrátit Juliánský den v SQLite

  3. Jak vytvořit pohled na SQL Server

  4. Nasazení relačních databází MySQL na Ubuntu 12.04 (Precise Pangolin)