表连接的几种类型:自连接、内连接、左外连接、右外连接。
1、自连接
自连接:即表本身和自己连接。
准备两个表:
一个学生表stu,字段有:stu_id,stu_name,stu_cls
一个课程表class,字段有:cls_id,cls_name,cls_stu_id(选课学生id)
2、内连接
语法:
select 查找字段.. from 左表 inner join 右表 on 查找条件;
查找出所有选了课的学生的名字,和所选课程名称
select stu_name,cls_namefrom stu
inner join class
on stu_id= clas_stu_id;
3、左外连接
左外连接:返回左表中所有的数据和右表中符合条件的数据。
通用语法:
select 查找字段..
from 左表
left join右表
on 左表字段 = 右表字段 ;
oracle中有特有的连接语法:
select 查找字段..
from 左表,右表
where 左表字段 = 右表字段(+);
需求:查找出所有学生的姓名和学生选的课的名称。(与上面内连接的区别在于这里查找的是所有学生的名字,因为有的学生有可能没有选课,在内连接中没有选课的学生并没有查找。)
通用语法:
select stu_name,cls_name
from stu
left join class
on stu_id = cls_stu_id;
oracle特有语法实现:
select stu_name,cls_name
from stu,class
where stu_id = cls_stu_id(+);
4、右外连接
右外连接:返回右表中所有的数据和左表中符合条件的数据。(右外连接和左外连接其实可以互相转换的,如果把左连接中的左表作为右表,就成了右连接)
通用语法:
select 左表字段,右表字段
from 左表
right join 右表
on 左表字段 = 右表字段;
特有语法:
select 左表字段,右表字段
from 左表,右表
where 左表字段(+) = 右表字段;
需求:用右连接找到所有学生姓名,和所有被学生选的课程。
通用语法
select cls_name,stu_name
from class
right join stu
on cls_stu_id = stu_id;
特有语法;
select cls_name,stu_name
from class,stu
where cls_stu_id(+) = stu_id;
<br/>