数据库 连接(JOIN)

连接也称为θ连接。它是从两个关系的笛卡尔积中选取属性间满足一定条件的元组。

连接运算中有两种最为重要的连接,一种是等值连接(Equijoin),另一种是自然连接(Nature Join)等值连接是从关系R和S中的笛卡尔积中选取A,B属性值相等的那些元组;自然连接它要求两个关系中进行比较的分量必须是相同的属性组,并且把结果中重复的属性列去掉。

Example:  

create table R (
   A varchar2(10),
   B varchar2(10),
   C varchar2(10)
);

insert into R(A,B,C) values ('a1','b1','5');
insert into R(A,B,C) values ('a1','b2','6');
insert into R(A,B,C) values ('a2','b3','8');
insert into R(A,B,C) values ('a2','b4','12');

create table S(
     B varchar2(10),
     D varchar2(10)
);

insert into S(B,D) values ('b1','3');
insert into S(B,D) values ('b2','7');
insert into S(B,D) values ('b3','10');
insert into S(B,D) values ('b3','2');
insert into S(B,D) values ('b5','2');
commit;  

R

A

B

C

a1

b1

5

a1

b2

6

a2

b3

8

a2

b4

12

S

B

D

b1

3

b2

7

b3

10

b3

2

b5

2

关系R和关系S分别如上图所示。

1、一般连接(C<D)

R-S(C<E)

A

R.B

C

S.B

D

a1

b1

5

b1

3

a1

b1

5

b2

10

a1

b2

6

b2

7

a1

b2

6

b3

10

a2

b3

8

b3

10

2、等值连接(select * from (select * from R) R join (select * from S) S on R.B=S.B)

A

R.B

C

S.B

D

a1

b1

5

b1

3

a1

b2

6

b2

7

a2

b3

8

b3

10

a2

b3

8

b3

2

3、自然连接(select A,S.B(R.B)as B,C,D from (select * from R) R join (select * from S) S on R.B=S.B)

A

B

C

D

a1

b1

5

3

a1

b2

6

7

a2

b3

8

10

a2

b3

8

2

4、外连接(Outer JOIN)

A

B

C

D

a1

b1

5

3

a1

b2

6

7

a2

b3

8

10

a2

b3

8

2

a2

b4

12

NULL

NULL

b5

NULL

2

4.1 左外连接(Left Join:select A,S.B(R.B) as B,C,D from (select * from R) R Left join (select * from S) S on R.B=S.B)

只保留左边关系R中要舍弃的元组。

A

B

C

D

a1

b1

5

3

a1

b2

6

7

a2

b3

8

10

a2

b3

8

2

a2

b4

12

NULL

4.2 右外连接(Right Join:select A,S.B(R.B) as B,C,D from (select * from R) R right join (select * from S) S on R.B=S.B)

只保留右边关系S中要舍弃的元组。

A

B

C

D

a1

b1

5

3

a1

b2

6

7

a2

b3

8

10

a2

b3

8

2

NULL

b5

NULL

2

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏JavaEdge

为什么java中用枚举实现单例模式会更好代码简洁

代码简洁 这是迄今为止最大的优点,如果你曾经在Java5之前写过单例模式代码,那么你会知道即使是使用双检锁你有时候也会返回不止一个实例对象。虽然这种问题通过...

61240
来自专栏爱撒谎的男孩

Mybatis之ResultMap

42740
来自专栏杨建荣的学习笔记

MySQL中需要注意的字段长度问题

在MySQL的表结构设计中,突然想起来几个地方碰到的问题比较多,大体来说一个就是字符集,一个就是数据类型。 而字符集和数据类型结合起来,就有一个蛮有意思的细节,...

41760
来自专栏JAVA高级架构

面试中单例模式有几种写法

“你知道茴香豆的‘茴’字有几种写法吗?” 纠结单例模式有几种写法有用吗?有点用,面试中经常选择其中一种或几种写法作为话头,考查设计模式和coding style...

30060
来自专栏学习力

《Java从入门到放弃》框架入门篇:hibernate查询——HQL

21370
来自专栏互联网技术栈

MySQL 高性能表设计规范

良好的逻辑设计和物理设计是高性能的基石, 应该根据系统将要执行的查询语句来设计schema, 这往往需要权衡各种因素。

10020
来自专栏java达人

sql server 获取每一个类别中值最大的一条数据

数据如下: name val memo a 2 a2(a的第二个值) a 1 a1--a的第一个值 a 3 a3:a的第三...

18590
来自专栏程序猿DD

漫画:什么是单例模式?(整合版)

————— 第二天 ————— 单例模式第一版: public class Singleton { private Singleton() {} ...

240100
来自专栏Java大联盟

Java面试手册:数据库 ②

14720
来自专栏chenssy

【死磕Sharding-jdbc】---重写

核心源码就在sharding-jdbc-core模块的com.dangdang.ddframe.rdb.sharding.rewrite目录下,包含两个文件SQ...

13530

扫码关注云+社区

领取腾讯云代金券