1

重複の可能性:
ANSI 結合と「where 句」結合

以下のアプローチを使用して2つのテーブルをクエリできますよね?

SELECT customer.name
FROM customer
INNER JOIN order
ON customer.cus_id=order.cus_id
ORDER BY customer.name


SELECT c.name
FROM customer c, order o
WHERE 
c.cus_id=o.cus_id
ORDER BY c.name

後者よりも結合を使用する利点は何ですか?

4

3 に答える 3

4

実行に違いはありません。これら 2 つのクエリは同じクエリですが、書き方が異なるだけです。

于 2012-11-27T17:05:31.250 に答える
2

これら 2 つの正確なクエリには違いはありません。クエリ プランナーは、まったく同じクエリ プランを作成します。

一般的に言えば、 の使用joinはより柔軟ですが、 、 、inner joinもあります。left outer joinright outer joincross join

「古いスタイル」の結合にはこれらのバリエーションの構文がありますが、それは非標準であり、たとえば SQL Server 2005 では推奨されていません。

于 2012-11-27T17:24:48.337 に答える
1

INNER JOIN価値があるのは、対「通常の」クエリの区別が不正確であることです。

コンマ スタイルの結合構文は、ANSI SQL-89 標準で定義されています。その後、その構文では一部のタイプの結合を実行できないことに気付きました。@Guffa が言及しているように、Oracle と Sybase は、外部結合を処理する結合構文に対する独自の拡張機能を発明しました。

ANSI SQL-92 では、標準でINNER/OUTER JOIN構文オプションが導入されました。しかし、下位互換性のために古い構文もサポートされており、現在でも仕様に含まれています。なのでどちらも標準です。

明示的な結合構文が公式の SQL 標準の一部になってから、文字通り 20 年が経過しました。それを「通常の」構文として受け入れる時が来ました。

どちらがより良いパフォーマンスを発揮しますか? どちらもまったく同じように機能します。すべての適切な SQL 実装は結合を同じ方法で処理し、両方の構文形式が同じコードを呼び出します。

SQL-92 JOIN 構文の方が明確です。多くのテーブルの結合がある場合、結合式を結合されたテーブルに隣接して配置できます。古い構文を使用すると、WHERE 句が多くの用語で乱雑になり、各用語がどの結合テーブルに対応するかを分類するのが難しくなります。

古い SQL-89 スタイルの方が明確であると主張する人もいますが、それは誤りです。:-)

于 2012-11-27T17:51:20.013 に答える