Oracle内连接:两张表通过某个字段进行内关联,查询结果是通过该字段按关系运算符匹配出的数据行。其中可以包括:
1、等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列。
2、不等连接:在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值,这些关系运算符包括>、>=、<=、!>、!。
案例所需表结构:学生信息系统。
案例1、查询学生信息表(stuinfo)的学生信息,关联查询该学生的班级信息(class)。
代码如下:select a.stuid,
a.stuname,
a.classno,
b.classno,
b.classname,
b.monitorid,
b.monitorname,
b.classaddress
from stuinfo a, class b
where a.classno = b.classno;
结果如下:
外连接:
外连接,返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外连接或左连接))、右表(右外连接或右连接)或两个边接表(全外连接)中的所有数据行。
1、left join(左联接)等价于(left outer join)返回包括左表中的所有记录和右表中联结字段相等的记录。
2、right join(右联接)等价于(right outer join)返回包括右表中的所有记录和左表中联结字段相等的记录。
3.、full join (全连接)等价于(full outer join)查询结果等于左外连接和右外连接的和。
下面案例利用学生信息表(stuinfo)和之前的备份表(stuinfo_2018)做案例解析:
stuinfo表数据:
stuinfo_2018表数据:
案例2、left join(左联接)
代码:--左外连接(stuinfo表中数据都存在,stuinfo_2018不在stuinfo中存在的学生相关字段为null值)
select a.*, b.stuid, b.stuname
from stuinfo a
left join stuinfo_2018 b
on a.stuid = b.stuid;
--左外连接(利用(+)在右边)另外一种写法
select a.*, b.stuid, b.stuname
from stuinfo a,stuinfo_2018 b
where a.stuid=b.stuid(+);
结果如下:
案例3、right join(右连接)
代码:--右外连接(stuinfo_2018表中数据都存在,stuinfo不在stuinfo_2018存在的学生相关字段为null值)
select a.*, b.stuid, b.stuname
from stuinfo a
right join stuinfo_2018 b
on a.stuid = b.stuid;
--右外连接(利用(+)在左边)另外一种写法
select a.*, b.stuid, b.stuname
from stuinfo a,stuinfo_2018 b
where a.stuid(+)=b.stuid;
结果如下:
案例4、full join(全外连接)
代码:--(全外连接(stuinfo、stuinfo_2018表中数据都存在,
--stuinfo不在stuinfo_2018存在的学生相关字段为null值,
--stuinfo_2018不在stuinfo存在的学生相关字段为null值)
select a.*, b.stuid, b.stuname
from stuinfo a
full join stuinfo_2018 b
on a.stuid = b.stuid;
结果如下: