Oracle中的JOIN

简介:

一、两张表

Student表

SID                  SNAME                CLASSID

-------------------- -------------------- --------------------
001                  小明                 1
002                  小红                 2
003                  小张                 4

Class表
ID                   NAME
-------------------- --------------------
1                    一班
2                    二班
3                    三班


二、自连接
只返回两张表连接列的匹配项。以下三种效果相同
select * from student s inner join class c on s.classid = c.id;
select * from student s join class c on s.classid = c.id;
select * from student s,class c where s.classid = c.id;

SID                  SNAME                CLASSID              ID                   NAME
-------------------- -------------------- -------------------- -------------------- --------------
001                  小明                 1                    1                    一班
002                  小红                 2                    2                    二班

 

三、笛卡儿乘积连接
即不加任何条件,达到 M*N 的结果集。以下两种查询结果一样。
select * from student s cross join class c;
select * from student,class;

SID                  SNAME                CLASSID              ID                   NAME
-------------------- -------------------- -------------------- -------------------- --------------
001                  小明                 1                    1                    一班
001                  小明                 1                    2                    二班
001                  小明                 1                    3                    三班
002                  小红                 2                    1                    一班
002                  小红                 2                    2                    二班
002                  小红                 2                    3                    三班
003                  小张                 4                    1                    一班
003                  小张                 4                    2                    二班
003                  小张                 4                    3                    三班

除了cross join不可以加on外,其它join连接都必须加上on关键字,后都可加where条件。加上条件,产生跟自连接一样的结果。
select * from student s cross join class c where s.classid = c.id;


四、左连接
列出左边表全部的,及右边表符合条件的,不符合条件的以空值代替。在(+)计算时,哪个带(+)哪个需要条件符合的,另一个全部的。即放左即右连接,放右即左连接。以下结果集相同。

select * from student s left join class c on s.classid = c.id;
select * from student s,class c where s.classid = c.id(+);

SID                  SNAME                CLASSID              ID                   NAME
-------------------- -------------------- -------------------- -------------------- --------------
001                  小明                 1                    1                    一班
002                  小红                 2                    2                    二班
003                  小张                 4


五、右连接
与左连接一样,列出右边表全部的,及左边表符合条件的,不符合条件的用空值替代。(+)一样,它的位置与连接相反。
select * from student s right join class c on s.classid = c.id;
select * from student s,class c where s.classid(+) = c.id;

SID                  SNAME                CLASSID              ID                   NAME
-------------------- -------------------- -------------------- -------------------- --------------
001                  小明                 1                    1                    一班
002                  小红                 2                    2                    二班
                                                                      3                    三班  

六、全连接
产生M+N的结果集,列出两表全部的,不符合条件的,以空值代替。
select * from student s full join class c on s.classid = c.id;

SID                  SNAME                CLASSID              ID                   NAME
-------------------- -------------------- -------------------- -------------------- --------------
001                  小明                 1                    1                    一班
002                  小红                 2                    2                    二班
003                  小张                 4                                        

                                                                      3                    三班

七、总结

(+)连接符只能Oracl中应用,join等语句其他数据库也适用。


原帖地址:http://www.cnblogs.com/lovemoon714/archive/2012/03/02/2376782.html


目录
相关文章
|
7月前
|
SQL Oracle 关系型数据库
避坑,Oracle中left join 与 (+) 的区别
避坑,Oracle中left join 与 (+) 的区别
|
SQL Oracle 关系型数据库
解决:Oracle数据库中Left join on 后面为null时匹配不上
解决:Oracle数据库中Left join on 后面为null时匹配不上
317 0
|
7月前
|
SQL Oracle 关系型数据库
Oracle查询优化-left join、right join、inner join、full join和逗号的区别
【1月更文挑战第5天】【1月更文挑战第13篇】实际查询时,多表联查是常规操作,但是连接方式有多种。
598 0
|
Oracle 关系型数据库 数据库
一篇文章带你了解Oracle 数据库中 CROSS JOIN(cross join) 语法的作用
一篇文章带你了解Oracle 数据库中 CROSS JOIN(cross join) 语法的作用
993 0
|
SQL Oracle 关系型数据库
oracle left join ... on 后跟条件不生效
oracle left join ... on 后跟条件,结果集过滤不生效
1290 0
|
Oracle 关系型数据库 Linux
Oracle 左连接(left join) 排序问题
项目环境:linux、tomcat8.5、SSM框架、oracle11g 项目中一个列表查询,使用了左连接(left join),类似这样: select * from A left join B on A.
3053 0
|
SQL Oracle 关系型数据库
ORACLE的SQL JOIN方式小结
在ORACLE数据库中,表与表之间的SQL JOIN方式有多种(不仅表与表,还可以表与视图、物化视图等联结),官方的解释如下所示   A join is a query that combines rows from two or more tables, views, or materialized views.
1261 0
|
SQL Oracle 关系型数据库
Oracle中表连接方式(Nested Loop、Hash join)对于表访问次数的测试
介绍了sql多表连接的几种方式,如有不正确的地方请指正。
4331 0

推荐镜像

更多