纯自然连接(NATUAL JOIN):
纯自然连接:当源表和目标表共享相同名称的列时,就可以在它们之间执行自然连接,而无需指定连接列。
语法:(SQL:1999)SELECTtable1.column, table2.columnFROMtable1NATURAL JOINtable2;
(传统oracle)SELECTtable1.column, table2.columnFROMtable1, table2;
例:
select region_name
from regions natural join countries
where country_name='Canada';
REGION_NAME
-------------------------
Americas
在使用纯自然连接时,如没有相同的列时,会产生交叉连接(笛卡尔乘积)。
自然JOIN USING连接:
当源表和目标表中有多个相同的列名,而您不希望它们作为连接列时,可以使用JOIN…USING格式。
语法:(SQL:1999)SELECTtable1.column, table2.columnFROMtable1JOINtable2USING(join_column1, join_column2,…);
(传统oracle)SELECTtable1.column, table2.columnFROMtable1, table2WHEREtable1.column=table2.column;
关键字USING与NATURAL不能同时出现。
注:oracle没有强加任何规则表明两个离散表中具有相同名称的列必须彼此相关。
例:
select region_name
from regions join countries
using (region_id)
where country_name='Canada';
REGION_NAME
-------------------------
Americas
自然JOIN ON连接:
显示陈述连接列,可以使用JOIN...ON格式。
语法:(SQL:1999)SELECTtable1.column, table2.columnFROMtable1JOINtable2ON(table1.column=table2.column);
(传统oracle)SELECTtable1.column, table2.columnFROMtable1, table2WHEREtable1.column=table2.column;
关键字ON与NATURAL不能同时出现。
例:
select region_name
from regionsRjoin countriesC
on (R.region_id=C.region_id)
where country_name='Canada';
REGION_NAME
-------------------------
Americas
JOIN...ON子句也可以用来指定一些条件,这些条件限制连接创建的结果集。
例:
Select d.department_name
from departments d join locations l
on(l.location_id=d.location_id and d.department_name like 'P%');
相当于
Select d.department_name
from departments d join locations l
on(l.location_id=d.location_id)
Whered.department_name like 'P%';