sql >> Databáze >  >> RDS >> Mysql

Proč v dotazech MySQL používat join místo kde?

Jakýkoli dotaz zahrnující více než jednu tabulku vyžaduje určitou formu přidružení k propojení výsledků z tabulky „A“ s tabulkou „B“. Tradiční (ANSI-89) způsob, jak toho dosáhnout, je:

  1. Uveďte seznam tabulek zahrnutých do seznamu odděleného čárkami v klauzuli FROM
  2. Napište asociaci mezi tabulkami do klauzule WHERE

    SELECT *
      FROM TABLE_A a,
           TABLE_B b
     WHERE a.id = b.id
    

Zde je dotaz přepsaný pomocí syntaxe ANSI-92 JOIN:

SELECT *
  FROM TABLE_A a
  JOIN TABLE_B b ON b.id = a.id

Z hlediska výkonu:

Tam, kde jsou podporovány (Oracle 9i+, PostgreSQL 7.2+, MySQL 3.23+, SQL Server 2000+), neexistuje žádná výkonnostní výhoda při použití jedné syntaxe oproti druhé. Optimalizátor je vidí jako stejný dotaz. Složitější dotazy však mohou těžit z použití syntaxe ANSI-92:

  • Možnost ovládat pořadí JOIN – pořadí, ve kterém jsou tabulky skenovány
  • Možnost použít kritéria filtru na stůl před připojením

Z pohledu údržby:

Existuje mnoho důvodů, proč používat syntaxi ANSI-92 JOIN oproti ANSI-89:

  • Čitelnější, protože kritéria JOIN jsou oddělená od klauzule WHERE
  • Menší pravděpodobnost, že nesplníte kritéria JOIN
  • Konzistentní podpora syntaxe pro typy JOIN jiné než INNER, což usnadňuje použití dotazů v jiných databázích
  • Klauzule WHERE slouží pouze jako filtrace kartézského součinu spojených tabulek

Z pohledu designu:

Syntaxe ANSI-92 JOIN je vzor, ​​nikoli anti-vzor:

  • Účel dotazu je zřejmý; sloupce používané aplikací jsou přehledné
  • Řídí se pravidlem modularity o používání striktního psaní, kdykoli je to možné. Explicitní je téměř všeobecně lepší.

Závěr

Kromě známosti a/nebo pohodlí nevidím žádnou výhodu v dalším používání klauzule ANSI-89 WHERE místo syntaxe ANSI-92 JOIN. Někdo by si mohl stěžovat, že syntaxe ANSI-92 je podrobnější, ale právě proto je explicitní. Čím explicitnější, tím snazší je pochopit a udržovat.



  1. Jak zobrazit serverové řazení v MySQL

  2. Jak nastavit Oracle EBS Auditing

  3. SQL Server pojmenovaná instance s projektem instalačního programu Visual Studio 2017

  4. Formátování čísel s čárkou v SQLite