ホームページ >データベース >mysql チュートリアル >FROM 句の左結合と複数のテーブル: 最新の SQL 構文を使用する必要があるのはどのような場合ですか?

FROM 句の左結合と複数のテーブル: 最新の SQL 構文を使用する必要があるのはどのような場合ですか?

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-20 11:16:08501ブラウズ

Left Join vs. Multiple Tables in FROM Clause: When Should I Use the Modern SQL Syntax?

モダン SQL 構文: FROM 句での LEFT JOIN と複数のテーブル選択

SQL には 2 つの異なるテーブル接続構文が用意されています: (1) FROM 句内のすべてのテーブルをリストし、WHERE 句を使用して接続条件を指定します。(2) LEFT JOIN および INNER JOIN 構文を使用します。ほとんどの SQL 言語は両方の構文を受け入れますが、特に内部結合を実行する場合は後者の方が推奨されます。

従来の構文: 外部結合の曖昧さ

従来の構文 (FROM 句でテーブルをリストする) は、同じクエリ内で INNER JOIN と OUTER JOIN の両方を使用する場合、曖昧になりがちです。次の例を考えてみましょう:

<code class="language-sql">SELECT *
FROM Company, Department, Employee
WHERE Company.ID *= Department.CompanyID
  AND Department.ID = Employee.DepartmentID</code>

このクエリは、部門のない会社も含め、企業とその部門および従業員を取得するように設計されています。ただし、WHERE 句で内部結合と外部結合の両方を指定すると、あいまいさが発生します。クエリ オプティマイザーのロジックとデータベース エンジンの設定によっては、部門が欠落している企業がクエリから除外され、結果が不正確になる場合があります。

現代文法: 明快さと制御

LEFT JOIN と INNER JOIN を使用する最新の構文では、この曖昧さが解消されています。結合条件を 1 行で指定することで、テーブルの照合方法を明示的に制御できます。上記の例では、最新の構文を使用することでこの問題が解決されます。

<code class="language-sql">SELECT *
FROM Company
LEFT JOIN (
    Department INNER JOIN Employee ON Department.ID = Employee.DepartmentID
) ON Company.ID = Department.CompanyID</code>

上記のクエリ内:

  • Department と Employee 間の INNER JOIN により、従業員がいる部門のみが確実に取得されます。
  • 会社と内部結合結果の間の LEFT JOIN により、部門のない会社を最終出力に含めることができます。

その他の利点

曖昧さの解消に加えて、最新の構文には次のような利点もあります。

  • クエリ プラン生成の改善: クエリ オプティマイザーは結合操作をより明確に理解し、より効率的なクエリ プランを作成できるようになりました。
  • 読みやすさ: 最新の構文は、特に複雑なクエリの場合に、より直感的で理解しやすくなっています。
  • 互換性: 最新の構文はほとんどの最新のデータベースでサポートされており、複数のプラットフォーム間での互換性が保証されています。

従来の構文の廃止

最新の構文の利点により、一部のベンダー (Microsoft など) は、データベース ソフトウェアの新しいバージョンで従来の外部結合構文 (WHERE 句を使用) を廃止しました。

以上がFROM 句の左結合と複数のテーブル: 最新の SQL 構文を使用する必要があるのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。