5

SQL の場合、次のように暗黙的に結合するのではなく、常に「内部結合」という言葉を使用することが望ましいようになったのはいつですか。

select * from t1, t2 where t1.ID = t2.ID;

? スタイルのためか、外部結合を区別するためだけですか、それとも他の理由がありますか?

4

5 に答える 5

3

INNERおよびOUTERJOIN構文は、SQL-92仕様で形式化されました。MySQLやSQLServerなどの多くのデータベース製品では、内部結合から「INNER」という単語を省略して、単に「JOIN」を使用できます。同様に、多くのデータベース製品では、「OUTER」という単語を省略し、外部結合に「LEFTJOIN」または「RIGHTJOIN」を使用することができます。多くの状況で、古い外部結合構文*=または=*作成されたあいまいさ。多くの製品は、古い外部結合構文のサポートを終了するか、まもなく終了します。

SQL-92仕様以前は、ベンダーはそれぞれ独自の構文を使用して外部結合を示していました。つまり、*=普遍的ではありませんでした(誰かが使用したことを覚えているようです?=)。さらに、彼らは普遍的な方法で外部結合を実装していませんでした。次の例を見てください。

Table1
Col1    Col2
1       Alice
2       Bob

Table2
Col1    Col2
1           1
2           2
3           3
4           4

Select 
From Table1, Table2
Where Table2.Col1 *= Table1.Col1

上記のクエリは一般的に次のようになります。

1   1   1       Alice
2   2   2       Bob
3   3   Null    Null
4   4   Null    Null

今試してみてください:

Select 
From Table1, Table2
Where Table2.Col1 *= Table1.Col1
    And Table2.Name = 'Alice'

一部のデータベース製品では、次のようになります。

1   1   1       Alice

他の人には:

1   1   1       Alice
2   2   Null    Null
3   3   Null    Null
4   4   Null    Null

つまり、保存されていないテーブルのフィルタリングを結合の前に適用するか、結合の後に適用するかについてはあいまいです。

于 2010-04-24T23:14:53.383 に答える
2

外部結合の実装との矛盾を処理するために新しい構文が追加されたとき、それは望ましいものになりました。

外部結合と内部結合 (および特定の両方向の外部結合) を古い構文で結合することは多くの場合あいまいであるため、プログラマが結合の順序とグループ化について 100% 明確にできるようにするために、新しい構文を作成して実装する必要がありました。条項。

ただし、古いスタイルの内部結合を単独で作成することは依然として完全に合法ですが、古いスタイルの外部結合はあらゆる形で廃止され、完全に取り除かれています。

于 2010-04-24T23:07:11.417 に答える
0

それが可能になったときにそれは望ましいものになりました...

キーワードはjoin、「古典的な」結合の意図をよりよく説明しています。また、クエリに多数の結合がある場合、すべてのテーブルを1つの場所に配置し、すべての条件を別の場所に配置するのではなく、結合するテーブルと使用する条件を並べて表示します。

于 2010-04-24T23:26:29.860 に答える
0

それはANSI規格だと思います。ONキーワードを省略すると、エラーが返されるはずです。(IMO)は、より宣言的なスタイルです。

于 2010-04-24T23:29:17.973 に答える
0

ansi-92 標準 うーん、それは難しいですね 1992

于 2010-04-25T08:23:41.967 に答える