随笔 - 0, 文章 - 11, 评论 - 0, 引用 - 0
数据加载中……

Oracle 联合查询

联合查询种类:
1、Cross Join(全连接)
2、Inner Join(内连接)
3、Left Join(左连接)
4、Right Join(右连接)
5、Full Out Join(全外连接)

准备演示环境:

班级表:CLASS


5条记录,5个唯一的班级,其中班级5中没有学生。


学生表:STUDENT


6条记录,其中学生1与学生2是同班同学,学生6没有对应的班级。


那么Oracle中怎么实现五类联合查询呢?它们是什么意思呢?

1、Cross Join(全连接)
代码语句:
1 SELECT * FROM STUDENT STU , CLASS CLS

执行结果:
返回 30 条记录 ,将 学生表的总条数(6 ROWS) 乘以 班级表的总条数(5 ROWS)(笛卡儿集):


2、Inner Join(内连接)
执行代码:
1 SELECT * FROM STUDENT STU
2                     , CLASS CLS
3             WHERE STU.CLASS_ID = CLS.CLASS_ID

执行结果:
返回 5 条记录 ,学生表的CLASS_ID匹配班级表的CLASS_ID,符合条件的查询出结果:


3、Left Join(左连接)注意:左连接“(+)”号在 右边
执行代码:
1 SELECT * FROM STUDENT STU  
2                     , CLASS CLS
3             WHERE STU.CLASS_ID = CLS.CLASS_ID(+)
执行结果:
返回 6 条记录 ,执行可分解为两步:
1、先将学生表的CLASS_ID匹配班级表的CLASS_ID查询出来(此例为5条记录)
2、再将左(Student)表中CLASS_ID 没有匹配 右(CLASS)表CLASS_ID的记录查询出来(此例为1条记录)
4、Right Join(右连接)  注意:右连接“(+)”号在 左边
执行代码:
1 SELECT * FROM STUDENT STU  
2                     , CLASS CLS
3             WHERE STU.CLASS_ID(+= CLS.CLASS_ID
执行结果:
返回 6 条记录 ,执行可分解为两步:
1、先将班级表的CLASS_ID匹配学生表的CLASS_ID查询出来(此例为5条记录)
2、再将左(CLASS)表中CLASS_ID 没有匹配 右(STUDENT)表CLASS_ID的记录查询出来(此例为1条记录)


5、Full Out Join(全外连接)
执行代码:
1 SELECT * FROM   STUDENT STU 
2 FULL OUTER JOIN CLASS CLS
3                    ON STU.CLASS_ID = CLS.CLASS_ID
执行结果:
返回 7 条记录 ,执行可分解为三步:
1、先将班级表的CLASS_ID匹配学生表的CLASS_ID查询出来(此例为5条记录)
2、再将左(Student)表中CLASS_ID 没有匹配 右(CLASS)表CLASS_ID的记录查询出来(此例为1条记录)
3、再将左(CLASS)表中CLASS_ID 没有匹配 右(STUDENT)表CLASS_ID的记录查询出来(此例为1条记录)

posted on 2014-05-10 18:37 00001000 阅读(203) 评论(0)  编辑  收藏 所属分类: 数据库


只有注册用户登录后才能发表评论。


网站导航: