oracle之连接实战

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 me
   mytest表的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

 (8)内连接

  查询所有满足连接条件的数据。

select mt.id,mt.name,mt.age,me.any_comment 
from mytest mt inner join myline me on mt.id = me.mytest_id

你可能感兴趣的:(JOIN,using,连接)