当前位置:   article > 正文

数据库表的连接的几种类型_表连接的几种方式

表连接的几种方式

表连接的几种类型

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;
  • 1
  • 2
  • 3

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

内连接

语法:

select 查找字段..
from 左表
inner join 右表
on 查找条件;
  • 1
  • 2
  • 3
  • 4

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

select stu_name,cls_name
from stu
inner join class
on stu_id= clas_stu_id;
  • 1
  • 2
  • 3
  • 4

左外连接

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

select 查找字段..
from 左表
left join右表
on 左表字段  = 右表字段 ;
  • 1
  • 2
  • 3
  • 4

oracle中有特有的连接语法;

select 查找字段..
from 左表,右表
where 左表字段 = 右表字段(+);
  • 1
  • 2
  • 3

注意点:在内连接的基础上在连接条件部分进行了变化,在做连接中实在右表字段后面添加(+)

需求:
查找出所有学生的姓名和学生选的课的名称。
与上面内连接的区别在于这里查找的是所有学生的名字,因为有的学生有可能没有选课,在内连接中没有选课的学生并没有查找。
实现:

通用语法:
select stu_name,cls_name
from stu
left join class
on stu_id = cls_stu_id;
  • 1
  • 2
  • 3
  • 4
  • 5
oracle特有语法实现:
select stu_name,cls_name
from stu,class
where stu_id = cls_stu_id(+)
  • 1
  • 2
  • 3
  • 4

右外连接

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

通用语法:
select 左表字段,右表字段
from 左表
right join 右表
on 左表字段 = 右表字段;
  • 1
  • 2
  • 3
  • 4
  • 5
特有语法:
select 左表字段,右表字段
from 左表,右表
where 左表字段(+= 右表字段;
  • 1
  • 2
  • 3
  • 4

需求:用右连接找到所有学生姓名,和所有被学生选的课程

通用语法
select cls_name,stu_name
from class
right join stu
on cls_stu_id = stu_id;
  • 1
  • 2
  • 3
  • 4
  • 5
特有语法;
select cls_name,stu_name
from class,stu
where cls_stu_id(+) = stu_id;
  • 1
  • 2
  • 3
  • 4
本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/正经夜光杯/article/detail/816895
推荐阅读
相关标签
  

闽ICP备14008679号