ホームページ >データベース >mysql チュートリアル >SQL 結合: `FROM` 句で複数のテーブルの代わりに、入れ子になった `INNER JOIN` で `LEFT JOIN` を使用するのはなぜですか?

SQL 結合: `FROM` 句で複数のテーブルの代わりに、入れ子になった `INNER JOIN` で `LEFT JOIN` を使用するのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-20 11:06:10417ブラウズ

SQL Joins: Why Use `LEFT JOIN` with Nested `INNER JOIN`s Instead of Multiple Tables in the `FROM` Clause?

FROM 句の SQL 左結合と複数テーブル結合: 2 番目の構文

が推奨される理由

従来の SQL 言語では、WHERE 句と LEFT JOIN の両方を使用した結合が可能ですが、特に内部結合を実行する場合には、LEFT JOIN 構文を使用する利点を理解することが重要です。

曖昧さを避ける

最新のデータベースでは、WHERE 句の条件を使用してテーブルをリストする従来の方法は非推奨になりました。同じクエリ内で内部結合と外部結合を組み合わせる場合、この構文は混乱を招く可能性があります。

例: あいまいなレガシー接続

次の例を考えてみましょう:

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

このクエリは、企業、その部門、従業員をリストするように設計されています。ただし、クエリ オプティマイザーは、Department テーブルと Employee テーブル間の内部結合を優先することを選択する場合があり、その結果、部門のない企業が除外されることがあります。

解決策: LEFT JOIN 構文

LEFT JOIN 構文は、接続順序を明示的に指定することで、この曖昧さを解決します。内部結合を括弧で囲み、会社テーブルを使用して左結合を実行すると、前のクエリは次のようになります。

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

この構文では、部門のない会社も含めて、すべての会社が含まれることが保証されます。

さらなる制御と柔軟性

LEFT JOIN 構文では、結合条件をさらに制御することもできます。たとえば、次のクエリは、名前に文字「X」を含む部門をフィルタリングします:

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

結論

LEFT JOIN 構文と内部結合には、FROM 行でテーブルを結合する従来の方法に比べていくつかの利点があります。これにより、曖昧さが取り除かれ、より詳細な制御が提供され、クエリ最適化プロセスが簡素化されます。したがって、最新の SQL アプリケーションでは LEFT JOININNER JOIN を使用することを強くお勧めします。

以上がSQL 結合: `FROM` 句で複数のテーブルの代わりに、入れ子になった `INNER JOIN` で `LEFT JOIN` を使用するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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