SQL では、関連テーブル内の行の存在を確認するためのオプションが 2 つあります: EXISTS と JOIN。場合によっては、それらが生成する結果は同一である場合もありますが、その基礎となる仕組みと使用シナリオは大きく異なります。
EXISTS キーワードは、サブクエリかどうかをテストするために使用されます。あらゆる結果を返します。少なくとも 1 つの行がサブクエリ条件を満たす場合は TRUE と評価され、サブクエリが 0 行を返す場合は FALSE と評価されます。
一方、JOIN ステートメントは、共通の列に基づいて行を照合することで 2 つ以上のテーブルを結合します。 JOIN の結果は、結合されたテーブルのすべての列を含む新しいテーブルです。
使用上の主な違いは、EXISTS はブール値のみを返すのに対し、JOIN は返すことです。満席のテーブル。したがって、EXISTS は、追加のデータを取得せずに、存在のみを確認する必要がある場合に適しています。
EXISTS が推奨されるいくつかの特定のシナリオには、次のようなものがあります。
一般に、サブクエリが使用されるシナリオでは、EXISTS は JOIN よりわずかに高速です。は単純で、関連テーブルには結合列に適切なインデックスがあります。ただし、JOIN はより明確で読みやすい構文を提供するため、クエリの保守とトラブルシューティングが容易になります。
タイトルとその価格を検索することを目的とした次の 2 つのクエリについて考えてみましょう。 #titles テーブル。 #sales テーブルに販売が存在し、販売数量が30:
クエリ 1 (EXISTS):
SELECT title, price FROM #titles WHERE EXISTS (SELECT * FROM #sales WHERE #sales.title_id = #titles.title_id AND qty > 30)
クエリ 2 (JOIN):
SELECT t.title, t.price FROM #titles t INNER JOIN #sales s ON t.title_id = s.title_id WHERE s.qty > 30
どちらのクエリも同じ結果を生成しますが、アプローチは異なります。クエリ 1 は EXISTS を使用して #sales テーブル内の行の存在を確認し、クエリ 2 は INNER JOIN を使用して両方のテーブルから一致する行を取得します。
EXISTS の選択JOIN はクエリの特定の要件によって異なります。ブール値のみが必要な場合は EXISTS が適切ですが、関連テーブルから追加のデータを取得する必要がある場合は JOIN が推奨されます。これら 2 つのキーワードの違いとそのパフォーマンスへの影響を理解すると、クエリを最適化し、コードの読みやすさを向上させることができます。
以上がEXISTS と JOIN: SQL でそれぞれをいつ使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。