私は、Oracle の SQL 実装における内部結合の構文について考えていましたが、ここに少し矛盾しているように見えるものがあります。
ローン (ローン番号、支店名、金額) と借り手 (顧客名、ローン番号) の 2 つのリレーションがあるとします。ローン番号は、両方のテーブルに共通の属性です。現在、Oracle では、内部結合を表現する 2 つの方法を提供しています。
select *
from loan, borrower
where loan.loan_number = borrower.loan_number;
上記のステートメントは次と同等です。
select *
from loan
inner join borrower
on loan.loan_number = borrower.loan_number;
ただし、クロス結合を表現する場合、それを表現する方法は 1 つしかありません。
select *
from loan, borrower;
次のステートメントは構文的に正しくありません。
select *
from loan
inner join borrower;
これは無効です。Oracle は、句の ON... 部分を想定しています。
内部結合がフィルター条件付きの単なるクロス結合であることを考えると、これは Oracle の SQL 実装の矛盾だと思いますか? 何か不足していますか?他の意見も聞いてみたいです。ありがとう。
Davidが回答で指摘したように、構文は次のとおりです。
select *
from loan cross join borrower;
上記の構文を認識していませんでしたが、それでも矛盾していると思います。結合条件なしで内部結合を許可することに加えて、クロス結合キーワードがあれば問題ありません。交差結合は結合条件のない内部結合ですが、結合条件のない内部結合と表現してはいかがでしょうか。