首页 文章

一个奇怪的Oracle SQL,有3个表但只留下了where子句中的连接2?

提问于
浏览
0

我经常看到“从”2个表和“加入”2个表的例子 . 这就是为什么当我看到以下Oracle SQL语句时,我感到很奇怪:

select a.oid, m.acct, p.cdate
from a, p, m
where a.oid = p.oid(+) and a.uid = m.uid
  • 在DBMS中实际发生了什么?

  • 什么是等效的MySQL语法?

  • JOIN 只是在where子句中表达某些条件的另一种方式吗?例如a.id = b.id上的左连接b实际上只是在where子句中表达a.id = b.id或a.id而不是(从b中选择b.id)的另一种方式

1 回答

  • 2

    这相当于:

    select a.oid, m.acct, p.cdate
    from a left outer join p on (a.oid = p.oid)
    inner join m on (a.uid = m.uid)
    

    您发布的查询是用旧语法编写的,但与上面的选择完全相同 . 有一个更简单的例子:

    select * from a, b where a.id = b.id;
    

    也相当于:

    select * from a inner join b on (a.id = b.id);
    

    两个查询都应该由优化器以相同的方式处理 . 加入顺序也由优化器确定 . 因此,回到原始示例优化器将定义是否首先应用 inner join 然后 left join 或相反 .

相关问题