1.多表连接
语法:
select t1.字段1,t1.字段2......,t2.字段1,t2.字段2......from table1 t1,table2 t2 where t1.column = t2.column(建立两者连接的column)
说明:
两个表通过关联字段关联,分别在select中分别表的别名查询出目标字段
实例:
create table mytest( id number(11) primary key, name varchar2(10), age number(3) ) insert into mytest values(1,'one',18); insert into mytest values(2,'two',18); insert into mytest values(3,'three',22); commit; create table myline( id number(11) primary key, mytest_id number(11), any_comment varchar(225) ) insert into myline values(1,1,'第一'); insert into myline values(2,2,'第二'); insert into myline values(3,3,'第三'); commit; select mt.id,mt.name,mt.age,me.any_comment from mytest mt,myline me where mt.id = me.mytest_id;
2.连接类型
(1)等值连接
where子句可以通过and增加多个连接条件,用表的别名简化查询,
select mt.id,mt.name,mt.age,me.any_comment from mytest mt,myline me where mt.id = me.mytest_id;
(2)非等值连接
使用不等号等建立连接关系
(3)自然连接(natural join)
基于两个表的同名列建立连接
select id,mt.name,mt.age,me.any_comment from mytest mt natural join myline memytest表的id与myline表的id同名,根据两者建立两个表的关联关系。
同名列前不能有前缀,如上id为两个表的同名列,前面不能有前缀,显示两个同名列相同的数据行。
(4)Using
对于natural join连接时,是自动去匹配同名列,我们可以使用using指定两个表之间的连接桥梁,
参照列名id不能带前缀。
select id,mt.name,mt.age,me.any_comment from mytest mt join myline me using(id)
(5)on
非同名列建立连接,通过on建立两个表之间的等值连接或任意不同名之间的关联。
select mt.id,mt.name,mt.age,me.any_comment from mytest mt left outer join myline me on mt.id = me.mytest_id
(6)外链接
左外连接:以左边的表为主,返回左右能关联的数据,同时返回左边不能关联的数据,右边不能关联的不显示。
select mt.id,mt.name,mt.age,me.any_comment from mytest mt,myline me where mt.id(+) = me.mytest_id; select mt.id,mt.name,mt.age,me.any_comment from mytest mt left outer join myline me on mt.id = me.mytest_id
右外连接:以右边的表为主,返回左右能关联的数据,同时返回右边不能关联的数据,左边不能关联的不显示。
select mt.id,mt.name,mt.age,me.any_comment from mytest mt,myline me where mt.id = me.mytest_id(+); select mt.id,mt.name,mt.age,me.any_comment from mytest mt right outer join myline me on mt.id = me.mytest_id
全外连接:
(7)交叉连接
select mt.id,mt.name,mt.age,me.any_comment from mytest mt cross join myline me
查询所有满足连接条件的数据。
select mt.id,mt.name,mt.age,me.any_comment from mytest mt inner join myline me on mt.id = me.mytest_id