gpt4 book ai didi

sql - oracle中的内部连接

转载 作者:太空狗 更新时间:2023-10-30 01:50:30 25 4
gpt4 key购买 nike

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

假设您有两个关系 loan(loan_number, branch_name, amount) 和 borrower(customer_name, loan_number)。 loan_number 是两个表共有的属性。现在,Oracle 为您提供了两种表示内部联接的方法:

select * 
from loan, borrower
where loan.loan_number = borrower.loan_number;

上面的语句等价于:

select * 
from loan
inner join borrower
on loan.loan_number = borrower.loan_number;

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

select * 
from loan, borrower;

以下语句在语法上是错误的:

select * 
from loan
inner join borrower;

这是无效的; Oracle 期望子句的 ON... 部分

鉴于inner join只是一个带过滤条件的cross join,你们认为这是Oracle SQL实现中的不一致吗?我错过了什么吗?我有兴趣听听其他意见。谢谢。

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

select * 
from loan cross join borrower;

即使我不知道上面的语法,我仍然认为它不一致。除了允许没有连接条件的内部连接之外,还可以使用交叉连接关键字。 cross join其实就是inner join without join condition,为什么不表达成inner join without join condition呢?

最佳答案

我同意它不一致。

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

  • 当您进行连接时,您几乎总是希望包含过滤条件,因此 ON 部分是必需的。
  • 如果您真的、真的不想有过滤条件(您真的确定吗?),您必须使用CROSS JOIN sytax 明确地告诉 Oracle。

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

关于sql - oracle中的内部连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1777813/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com