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表结构如下
接着建立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表结构如下
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;
返回结果:
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;
返回结果:
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;
返回结果:
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;
返回结果:
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;
返回结果: