ホームページ >データベース >mysql チュートリアル >SQL 結合: `FROM` 句で複数のテーブルの代わりに、入れ子になった `INNER JOIN` で `LEFT JOIN` を使用するのはなぜですか?
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 JOIN
と INNER JOIN
を使用することを強くお勧めします。
以上がSQL 結合: `FROM` 句で複数のテーブルの代わりに、入れ子になった `INNER JOIN` で `LEFT JOIN` を使用するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。