oracle 11g中的USING子句

时间:2013-12-26 19:49:45

标签: sql oracle join oracle11g

 select e.employee_id,e.last_name,e.department_id,
         d.department_name,l.city,l.location_id
 from employees e 
 join departments d
      on e.department_id=d.department_id
 join locations l
      on l.location_id=d.location_id
 and e.manager_id=149;

我们可以用'USING'子句替换'ON'子句。 -used员工,部门,地点表在oracle 11g中。 试试吧。

3 个答案:

答案 0 :(得分:2)

USING 子句可以代替ON 子句,但是 仅用USING替换ON是不够的。

  • USING子句不使用等号语法,所以 替换不能一字一句地完成

  • 此URL指出可以使用USING子句代替 ON条款;但这指的是 CLAUSES ,而不仅仅是关键词:

    http://docs.oracle.com/javadb/10.6.2.1/ref/rrefsqljusing.html

  • USING子句的语法是:

          select * from table1 P join table1 S
          using (col1);
    

    此处col1table1都有table2

  • 您不能像使用USING子句中的表前缀一样使用 可以在ON子句中使用(不能在ORACLE的USING语句中使用P.col1)。

答案 1 :(得分:2)

不,您不能将ON替换为USING。但是您可以重写查询以在连接中包含USING子句。请参阅以下正确的语法:

select e.employee_id,
       e.last_name,
       department_id, --Note there is no table prefix
       d.department_name,
       l.city,
       location_id --Note there is no table prefix
  from employees e
  join departments d
 using (department_id)
  join locations l
 using (location_id)
 where e.manager_id = 149;

答案 2 :(得分:1)

我的两分钱。

使用条款:

当多个列共享相同的名称并进行自然连接时。那么你可能不想加入所有这些列。在这种情况下,您可以只显式指定必须用作连接键的列名称!

ON CLAUSE:

当连接表中的列名不同时,我们倾向于准确指定各个表中的列名,以用作JOIN键。


但是当看到屏幕后面时,内部工作将会是一样的。我们对语法的感觉非常舒适。

说,有一天,列名称被更改(Ofcourse它是一个糟糕的模型),但是,您的查询可能会失败并带有USING子句。 所以,为了安全起见,ON条款始终是可取的!取决于个人意见。!

祝你好运!