SQL の場合、次のように暗黙的に結合するのではなく、常に「内部結合」という言葉を使用することが望ましいようになったのはいつですか。
select * from t1, t2 where t1.ID = t2.ID;
? スタイルのためか、外部結合を区別するためだけですか、それとも他の理由がありますか?
SQL の場合、次のように暗黙的に結合するのではなく、常に「内部結合」という言葉を使用することが望ましいようになったのはいつですか。
select * from t1, t2 where t1.ID = t2.ID;
? スタイルのためか、外部結合を区別するためだけですか、それとも他の理由がありますか?
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
つまり、保存されていないテーブルのフィルタリングを結合の前に適用するか、結合の後に適用するかについてはあいまいです。
外部結合の実装との矛盾を処理するために新しい構文が追加されたとき、それは望ましいものになりました。
外部結合と内部結合 (および特定の両方向の外部結合) を古い構文で結合することは多くの場合あいまいであるため、プログラマが結合の順序とグループ化について 100% 明確にできるようにするために、新しい構文を作成して実装する必要がありました。条項。
ただし、古いスタイルの内部結合を単独で作成することは依然として完全に合法ですが、古いスタイルの外部結合はあらゆる形で廃止され、完全に取り除かれています。
それが可能になったときにそれは望ましいものになりました...
キーワードはjoin
、「古典的な」結合の意図をよりよく説明しています。また、クエリに多数の結合がある場合、すべてのテーブルを1つの場所に配置し、すべての条件を別の場所に配置するのではなく、結合するテーブルと使用する条件を並べて表示します。
それはANSI規格だと思います。ONキーワードを省略すると、エラーが返されるはずです。(IMO)は、より宣言的なスタイルです。
ansi-92 標準 うーん、それは難しいですね 1992