違いはありますか
SELECT *
FROM TABLE_A a
JOIN TABLE_B b
ON a.propertyA = b.propertyA
そしてクエリ
SELECT * from TABLE_A a, TABLE_B b where a.propertyA=b.propertyA.
INNER JOIN
最初の構文で使用するANSI(SQL-92)構文です。特に多くのテーブルを結合する場合は、一般的に読みやすいと見なされます。
(SQL-89WHERE syntax
)は、よりリレーショナルなモデル指向です。2つのテーブルが結合された結果は、結合列が一致する行のみを選択するフィルターが適用されるテーブルのデカルト積です。
WHERE構文を使用すると、これを簡単に確認できます。
ANSI
句をなんらかの方法で省略するON
とエラーが生成されるのに対し、句の条件を省略すると古いタイプの結合でwhere
はエラーメッセージが生成されず、デカルト積が生成されるため、join型を使用します。
2つの例は同じです。どちらもINNERJOIN操作を実行し(2番目の例ではJOINだけであっても)、基本的にON句に関連する一致する結果を含むすべての行を返します。
私の推測では、JOINおよびINNER JOIN操作は、その特定の目的のために設計されているため、少し高速ですが、SELECTステートメントを変更してさらに多くのことを実行できます。
「結合」バージョンは約20年前のものであり、結果のフィルタリングに使用される述語ではなく、結合に使用される述語を明確に識別するため、推奨されています。
また、一緒に使用すると外部結合も可能になりleft join
ます(table_bに一致する行がない場合でも、table_aの行を取得できます)。
「コンマ」バージョンでは、外部結合は許可されていません(table_bに一致する行がない場合、table_aの行は取得されません)