Oracle SQL语法:内部联接

Wil*_*ill 1 sql oracle syntax inner-join

我现在无法访问Oracle数据库,所以我在这里发布我的问题:

以下语句是否有效Oracle SQL语法?

SELECT a1
FROM t1 INNER JOIN t2
Run Code Online (Sandbox Code Playgroud)

我特别想知道是否需要为内连接指定连接属性.

最好的,威尔

Con*_*rix 8

你错过了 ON

喜欢

SELECT a1
FROM t1 INNER JOIN t2
ON t1.SomeID = t2.SomeID
Run Code Online (Sandbox Code Playgroud)


APC*_*APC 7

所以,这是你想到的查询......

SQL> select e.ename
  2         , d.dname
  3  from emp e inner join dept d
  4  /
from emp e inner join dept d
                           *
ERROR at line 3:
ORA-00905: missing keyword


SQL>
Run Code Online (Sandbox Code Playgroud)

我们可以看到,它失败了.INNER JOIN语法要求我们提供要加入的列...

SQL> select e.ename
  2         , d.dname
  3  from emp e inner join dept d
  4      on ( d.deptno = e.deptno )
  5  /

ENAME      DNAME
---------- --------------
SCHNEIDER  ACCOUNTING
BOEHMER    ACCOUNTING
KISHORE    ACCOUNTING
ROBERTSON  RESEARCH
...
FEUERSTEIN HOUSEKEEPING
PODER      HOUSEKEEPING
TRICHLER   HOUSEKEEPING

21 rows selected.

SQL>
Run Code Online (Sandbox Code Playgroud)

还有一种替代语法,即NATURAL JOIN.此语法将根据共享相同名称的所有列自动连接两个表.

SQL> select e.ename
  2         , d.dname
  3  from emp e natural join dept d
  4  /

ENAME      DNAME
---------- --------------
SCHNEIDER  ACCOUNTING
BOEHMER    ACCOUNTING
KISHORE    ACCOUNTING
ROBERTSON  RESEARCH
...
FEUERSTEIN HOUSEKEEPING
PODER      HOUSEKEEPING
TRICHLER   HOUSEKEEPING

21 rows selected.

SQL>
Run Code Online (Sandbox Code Playgroud)

这是一个巧妙的技巧,但实际上不应该依赖于生产代码; 这是一个等待发生的错误.