2016/09/29 SQL中的join

 

1.建表

首先建tb_a并插入数据。

 

1 createtable tb_a(symbol varchar2(32) , sname varchar2(32)); 2 insertinto tb_a(symbol, sname) values ('A','B'); 3 insertinto tb_a(symbol, sname) values ('G','H');

 

tb_a表结构如下

image

接着建立tb_b并插入数据

 

1 createtable tb_b(symbol varchar2(32) , tdate varchar2(32) ,tclose varchar2(32)); 2 insertinto tb_b(symbol, tdate, tclose) values ('A','C','D'); 3 insertinto tb_b(symbol, tdate, tclose) values ('X','E','F');

 

tb_b表结构如下

image

2.INNER JOIN(内连接)

其中INNER关键字可以省略,并且只有在表a和表b中都有匹配行时,才返回。

 

1 select a.symbol, 2 a.sname, 3 b.tdate, 4 b.tclose 5 from tb_a a 6 innerjoin tb_b b 7 on a.symbol = b.symbol;

 

等价于

 

1 select a.symbol, 2 a.sname, 3 b.tdate, 4 b.tclose 5 from tb_a a, 6 tb_b b 7 where a.symbol = b.symbol;

 

等价于

 

1 select a.symbol, 2 a.sname, 3 b.tdate, 4 b.tclose 5 from tb_a a 6 join tb_b b 7 on a.symbol = b.symbol;

 

返回结果:

image

 

3.OUTER JOIN(外连接)

其中OUTER可省略。分为(LEFT OUTER JOIN,RIGHT OUTER JOIN ,FULL JOIN)。

3.1 LEFT OUTER JOIN

当左表中的行在右表中没有匹配行时,也返回。返回的记录中,选择的右表的内容为NULL。

 

1 select a.symbol, 2 a.sname, 3 b.tdate, 4 b.tclose 5 from tb_a a 6 leftjoin tb_b b 7 on a.symbol = b.symbol;

 

返回结果:

image

3.2 RIGHT OUTER JOIN

当右表中的行在左表中没有匹配行时,也返回。返回的记录中,选择的左表的内容为NULL。

1 select a.symbol, 2 a.sname, 3 b.tdate, 4 b.tclose 5 from tb_a a 6 rightjoin tb_b b 7 on a.symbol = b.symbol;

返回结果:

image

3.3 FULL JOIN

可以理解为LEFT和RIGHT的集合。

1 select a.symbol, 2 a.sname, 3 b.tdate, 4 b.tclose 5 from tb_a a 6 fulljoin tb_b b 7 on a.symbol = b.symbol;

返回结果:

image

4.CROSS JOIN(交叉连接)

笛卡尔积。

 

1 select a.symbol, 2 a.sname, 3 b.tdate, 4 b.tclose 5 from tb_a a 6 crossjoin tb_b b;

 

返回结果:

image

posted @ 2016-09-29 11:10  张有路  阅读(145)  评论(0编辑  收藏  举报