oracle中的内连接

nee*_*esh 5 sql database oracle join inner-join

我在考虑Oracle SQL实现中内连接的语法,这里似乎有些不一致:

假设您有两个关系贷款(loan_number,branch_name,金额)和借款人(customer_name,loan_number).loan_number是两个表共有的属性.现在,Oracle为您提供了两种表达内部联接的方法:

select * 
from loan, borrower 
where loan.loan_number = borrower.loan_number;
Run Code Online (Sandbox Code Playgroud)

以上陈述相当于:

select * 
from loan 
     inner join borrower 
     on loan.loan_number = borrower.loan_number;
Run Code Online (Sandbox Code Playgroud)

但是,在表达交叉连接时,只有一种方式来表达它:

select * 
from loan, borrower;
Run Code Online (Sandbox Code Playgroud)

以下语句在语法上是不正确的:

select * 
from loan 
     inner join borrower; 
Run Code Online (Sandbox Code Playgroud)

这是无效的; Oracle期望该条款的ON ...部分

鉴于内连接只是具有过滤条件的交叉连接,您是否认为这是Oracle SQL实现中的不一致?我错过了什么吗?我有兴趣听取其他一些意见.谢谢.

正如大卫在他的回答中指出的那样,语法是:

select * 
from loan cross join borrower;
Run Code Online (Sandbox Code Playgroud)

即使我不知道上面的语法,我仍然认为它是不一致的.除了允许内部连接而没有连接条件之外,使用交叉连接关键字也没关系.交叉连接实际上是没有连接条件的内连接,为什么不将它表示为没有连接条件的内连接?

Tho*_*ten 4

我同意这并不一致。

但我认为 Oracle 的实现是一件好事:

  • 当您进行联接时,您几乎总是希望包含过滤条件,因此该ON部分是强制性的。
  • 如果你真的、真的不想有过滤条件(你真的确定吗?),你必须用CROSS JOINsytax 显式地告诉 Oracle。

对我来说,不保持 100% 一致很有意义——这有助于避免错误。