关于基本表的连接操作left 、right、inner、cross、natural

 

第一、连接操作符可分成:点此下载其中包含了全部说明文档及所需ORACLE与SQLSERVER数据库

1、连接类型:连接类型决定了如何处理连接条件中不匹配的元组。

2、连接条件:连接条件决定了两个关系中哪些元组应该匹配以及连接结果中应该出现哪些属性(控制属性的显示只有在Oracle中才支持)

 

连接类型(4个)

INNER  JOIN

内连接

LEFT (OUTER) JOIN

左外连接

RIGHT (OUTER) JOIN

右外连接

FULL (OUTER) JOIN

完全连接

连接条件(3个)

NATURAL

应写在连接类型的左边(ORACLE才支持)

ON等值连接条件

应写在连接类型的右边

USING(A1,A2,….An)

应写在连接类型的右边(ORACLE才支持)

下面是与连接操作有关的解释和说明:

1)      连接类型分成内连接外连接两种。内连接是等值连接,外连接又分成左、右、完全外连接三种。连接类型中INNEROUTER字样可不写。

1)      连接条件分成三种:

n  NATURAL:表示两个关系执行自然连接操作,即在两个的公共属性上作等值连接,运算结果中公共属性只出现一次(这一功能非常好当两个表的字段很多时,就可以不用写字段名称了)。

n  ON等值连接条件:具体列出两个关系在哪些相应属性(具有相同域可以是不同列名)上做等值连接。

n  USINGA1,A2,…,An: 类似于NATURAL形式,这里A1,A2,…,An是两个关系上的公共属性,但可以不是全部公共属性。在连接的结果中,公共属性A1A2An只出现一次。

学生信息表(StuInfo):

stuNo           stuName stuSex   stuAge     stuDept

200215121     李勇       男             20            CS
200215122     刘晨       女             19            CS
200215123     王敏       女             21            MA
200215124     张立       男             17             IS
200215125     陆俊飞    男             18             IS
200215126     王东       男             22             CS
200215127     毕晓玉    女             23             MA
200215128     梁晓龙    男             20             IS
200215129     殷宏海    男             23             CS
200215131     万霞       女             24             CS
200215132     李国前    男             24             CS
200215133     陈玲       女             24             CS
200215134     董亮       男             24             CS
200215135     江斌       男             23             CS
200215136     朱长明    男             24             CS
200215137     王庆乐    男             24             CS
200215138     李勇       女             20             CS
200215139     钱进       男             20             CS
200215140     陆洋       男             22             CS
200215141     卢再举    男             26             CS
200215142     段磊       男             24             CS

 

课程信息表(SC):

stuNo       courNo      scGrade
----------- ----------- -------
200215121   1           92
200215121   2           79
200215121   3           88
200215122   2           85
200215122   3           80
200215123   1           0
200215124   1           56

 

SQLSERVER中事例:

右连接(right)事例:

sql:select * from StuInfo a right outer join SC b on a.stuNo=b.stuNo

stuNo       stuName              stuSex stuAge stuDept              stuNo       courNo      scGrade
----------- -------------------- ------ ------ -------------------- ----------- ----------- -------
200215121   李勇                   男      20     CS                   200215121          1           92
200215121   李勇                   男      20     CS                   200215121          2           79
200215121   李勇                   男      20     CS                   200215121          3           88
200215122   刘晨                   女      19     CS                   200215122          2           85
200215122   刘晨                   女      19     CS                   200215122          3           80
200215123   王敏                   女      21     MA                   200215123          1           0
200215124   张立                   男      17     IS                    200215124          1           56

 

则可以用下面的sql代替这个右连接操作如:

 

select *,(select b.stuName from StuInfo b where b.stuNo=a.stuNo) stuName,(select c.stuSex from StuInfo c where c.stuNo=a.stuNo) stuSex from SC a

stuNo       courNo      scGrade stuName              stuSex
----------- ----------- ------- -------------------- ------
200215121   1           92            李勇                   男
200215121   2           79            李勇                   男
200215121   3           88            李勇                   男
200215122   2           85            刘晨                   女
200215122   3           80            刘晨                   女
200215123   1           0              王敏                   女
200215124   1           56            张立                   男 

注意: 

1、最外层的表a的是大表(即左连接的左表、右连接的右表)。内层表元组小于外层表a的元组。

 

2、当子结构查询(select col_name  from b where b.colname=a.colname),(select col_name  from  c  where c.colname_a.colname)的结果唯一时这种方法才可替代左连接或右连接最外面表的元组可不唯一但子查询结构的子查询结果要唯一

Sqlselect * from StuInfo a right outer join SC b on a.stuNo=b.stuNo

 

左连接(left)事例:

学生表(StuInfo)对选课表(SC)进行左连接事例:

Sqlselect * from StuInfo a left outer join SC b on a.stuNo=b.stuNo

 

 stuNo       stuName              stuSex stuAge stuDept              stuNo       courNo      scGrade
----------- -------------------- ------ ------ -------------------- ----------- ----------- -------
10001       test                 女      20     OS                   NULL        NULL        NULL
200215121   李勇                   男      20     CS                   200215121   1           92
200215121   李勇                   男      20     CS                   200215121   2           79
200215121   李勇                   男      20     CS                   200215121   3           88
200215122   刘晨                   女      19     CS                   200215122   2           85
200215122   刘晨                   女      19     CS                   200215122   3           80
200215123   王敏                   女      21     MA                   200215123   1           0
200215124   张立                   男      17     IS                   200215124   1           56
200215125   陆俊飞                  男      18     IS                   NULL        NULL        NULL
200215126   王东                   男      22     CS                   NULL        NULL        NULL
200215127   毕晓玉                  女      23     MA                   NULL        NULL        NULL
200215128   梁晓龙                  男      20     IS                   NULL        NULL        NULL
200215129   殷宏海                  男      23     CS                   NULL        NULL        NULL
200215131   万霞                   女      24     CS                   NULL        NULL        NULL
200215132   李国前                  男      24     CS                   NULL        NULL        NULL
200215133   陈玲                   女      24     CS                   NULL        NULL        NULL
200215134   董亮                   男      24     CS                   NULL        NULL        NULL
200215135   江斌                   男      23     CS                   NULL        NULL        NULL
200215136   朱长明                  男      24     CS                   NULL        NULL        NULL
200215137   王庆乐                  男      24     CS                   NULL        NULL        NULL
200215138   李勇                   女      20     CS                   NULL        NULL        NULL
200215139   钱进                   男      20     CS                   NULL        NULL        NULL
200215140   陆洋                   男      22     CS                   NULL        NULL        NULL
200215141   卢再举                  男      26     CS                   NULL        NULL        NULL
200215142   段磊                   男      24     CS                   NULL        NULL        NULL 

1)      若连接操作是“INNER  JOIN,未提及连接条件,那么这个操作等价于笛卡儿积SQL2中把定义为“CROSS  JOIN”操作。

2)      若连接操作是“FULL  OUTER  JOIN  ON  FALSE”,这里连接条件总是false,那么这个操作类似于 “外部并(OUTER UNION)”操作,但也有区别。这里操作结果要把两个关系的属性全部包括进去。SQL2把此操作定义为“UNION  JOIN”操作。

 

内连接(inner)事例: 

select * from StuInfo a inner join SC b on a.stuNo=b.stuNo

stuNo       stuName              stuSex stuAge stuDept              stuNo       courNo      scGrade
----------- -------------------- ------ ------ -------------------- ----------- ----------- -------
200215121   李勇                   男      20     CS                   200215121   1           92
200215121   李勇                   男      20     CS                   200215121   2           79
200215121   李勇                   男      20     CS                   200215121   3           88
200215122   刘晨                   女      19     CS                   200215122   2           85
200215122   刘晨                   女      19     CS                   200215122   3           80
200215123   王敏                   女      21     MA                   200215123   1           0
200215124   张立                   男      17     IS                   200215124   1           56

全部连接(full)也称完全连接事例:

select * from StuInfo a full join SC b on a.stuNo=b.stuNo

stuNo       stuName              stuSex stuAge stuDept              stuNo       courNo      scGrade
----------- -------------------- ------ ------ -------------------- ----------- ----------- -------
200215121   李勇                   男      20     CS                   200215121   1           92
200215121   李勇                   男      20     CS                   200215121   2           79
200215121   李勇                   男      20     CS                   200215121   3           88
200215122   刘晨                   女      19     CS                   200215122   2           85
200215122   刘晨                   女      19     CS                   200215122   3           80
200215123   王敏                   女      21     MA                   200215123   1           0
200215124   张立                   男      17     IS                   200215124   1           56
200215125   陆俊飞                  男      18     IS                   NULL        NULL        NULL
200215126   王东                   男      22     CS                   NULL        NULL        NULL
200215127   毕晓玉                  女      23     MA                   NULL        NULL        NULL
200215128   梁晓龙                  男      20     IS                   NULL        NULL        NULL
200215129   殷宏海                  男      23     CS                   NULL        NULL        NULL
200215131   万霞                   女      24     CS                   NULL        NULL        NULL
200215132   李国前                  男      24     CS                   NULL        NULL        NULL
200215133   陈玲                   女      24     CS                   NULL        NULL        NULL
200215134   董亮                   男      24     CS                   NULL        NULL        NULL
200215135   江斌                   男      23     CS                   NULL        NULL        NULL
200215136   朱长明                  男      24     CS                   NULL        NULL        NULL
200215137   王庆乐                  男      24     CS                   NULL        NULL        NULL
200215138   李勇                   女      20     CS                   NULL        NULL        NULL
200215139   钱进                   男      20     CS                   NULL        NULL        NULL
200215140   陆洋                   男      22     CS                   NULL        NULL        NULL
200215141   卢再举                  男      26     CS                   NULL        NULL        NULL
200215142   段磊                   男      24     CS                   NULL        NULL        NULL

在ORACLE中的应用请见下载sql脚本:点此下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值