数据库表的连接的几种类型

表连接的几种类型

1、自连接
2、内连接
3、左外连接
4、右外连接

自连接

含义:自连接是表本身和自己进行连接
例子:
创建一个emp表,字段有emp_no(员工id),emp_name(员工名),emp_manger_id(该员工的领导)

需求:查找每个员工的姓名,和他领导的姓名

分析:本表中有员工的姓名,可以很好的找到
但是无法直接找到该员工的领导姓名,然而我们可以知道该员工领导的编号,
通过该领导的编号就能知道领导姓名

实现:

select first.emp_name  || '的领导是' || second.emp_name
from emp first,emp second
where first.emp_id = second.emp_id;

这里准备两个表,
一个学生表stu,字段有:stu_id,stu_name,stu_cls
一个课程表class,字段有:cls_id,cls_name,cls_stu_id(选课学生id)

内连接

语法:

select 查找字段..
from 左表
inner join 右表
on 查找条件;

返回左右两个表符合条件中的数据
查找出所有选了课的学生的名字,和所选课程名称

select stu_name,cls_name
from stu
inner join class
on stu_id= clas_stu_id;

左外连接

返回左表中所有的数据和右表中符合条件的数据
通用语法:

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(+)

右外连接

返回右表中所有的数据和左表中符合条件的数据
右外连接和左外连接其实可以互相转换的,如果把左连接中的左表作为右表,就成了右连接

通用语法:
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;
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值