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中。 试试吧。
答案 0 :(得分:2)
USING 子句可以代替ON 子句,但是
仅用USING
替换ON
是不够的。
http://docs.oracle.com/javadb/10.6.2.1/ref/rrefsqljusing.html
select * from table1 P join table1 S
using (col1);
此处col1
和table1
都有table2
。
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)
我的两分钱。
当多个列共享相同的名称并进行自然连接时。那么你可能不想加入所有这些列。在这种情况下,您可以只显式指定必须用作连接键的列名称!
当连接表中的列名不同时,我们倾向于准确指定各个表中的列名,以用作JOIN键。
但是当看到屏幕后面时,内部工作将会是一样的。我们对语法的感觉非常舒适。
说,有一天,列名称被更改(Ofcourse它是一个糟糕的模型),但是,您的查询可能会失败并带有USING
子句。
所以,为了安全起见,ON
条款始终是可取的!取决于个人意见。!