联合查询种类:
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
1、先将班级表的CLASS_ID匹配学生表的CLASS_ID查询出来(此例为5条记录)
2、再将左(Student)表中CLASS_ID 没有匹配 右(CLASS)表CLASS_ID的记录查询出来(此例为1条记录)
3、再将左(CLASS)表中CLASS_ID 没有匹配 右(STUDENT)表CLASS_ID的记录查询出来(此例为1条记录)
