您当前的位置: 首页 >  sql

liaowenxiong

暂无认证

  • 2浏览

    0关注

    1171博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Oracle/MySQL数据库的表间关联查询_多表关联查询的SQL语句详解

liaowenxiong 发布时间:2021-01-04 22:52:57 ,浏览量:2

文章目录
  • 内连接 inner join
      • 示例
  • 外连接 outer join
    • left outer join 左外连接
      • 示例
    • right outer join 右外连接
      • 示例
    • full outer join 全外连接
      • 示例
    • 外连接总结

内连接 inner join

内连接又称为等值连接,语法结构:

表1 inner join 表2 on 条件 -- inner可以省略
  1. 表 1 叫做驱动表(参照表/匹配表) , 表 2 叫做被匹配表(被参照表)
  2. 等值连接方式下 , 驱动表和被匹配表位置可以互换 , 不影响结果集
  3. 执行方式:无论谁做驱动表 , 都会遍历驱动表 , 在被匹配表中查找匹配数据,不匹配的数据舍弃

PS.外键所在的表叫子表或者从表,主键所在的表叫父表或者主表,所谓驱动表,就是必须遍历的表

示例
select ename , dname , location
from emp_xxx t1 join dept_xxx t2 --t1 驱动表 , t2 被匹配表
on t1.deptno = t2.deptno ;

上述连接的方式可以称之为“显式内连接”,下面这种方式称之为“隐式内连接”:

select ename, dname, location 
from emp_xxx t1,dept_xxx t2 
where t1.deptno = t2.deptno;
外连接 outer join left outer join 左外连接

左外连接的语法结构:

表 1 left outer join 表 2 on 条件 -- outer可以省略

1.左外连接以左边的表为驱动表,并且左边的表的记录必须全部保留,所以左边的表亦称之为保留表。 2.驱动表和被匹配表不能互换

示例

下面的例子中,驱动表:emp_xxx;被匹配表:dept_xxx,结果集中包括有部门的员工和没有部门的员工:

select e.empno , ename , d.deptno , d.dname , d.location
from emp_xxx e left outer join dept_xxx d on e.deptno = d.deptno ;
right outer join 右外连接

右外连接语法结构:

表 1 right outer join 表 2 on 条件 -- outer可以省略

1.右外连接以右边的表为驱动表,并且右边的表的记录必须全部保留,所以右边的表又称之为保留表 2.驱动表和被匹配表不能互换

示例

下面的语句中,驱动表:emp_xxx;被匹配表:dept_xxx,结果集中包括有部门的员工和没有部门的员工:

select e.empno , ename , d.deptno , d.dname , d.location from dept_xxx d right outer join emp_xxx e
on e.deptno = d.deptno ;
full outer join 全外连接

全外连接语法结构:

表 1 full outer join 表 2 on 条件

1.全外连接左右两张表互为驱动表和被匹配表,即两张表都会遍历一遍 2.全外连接可以把两个表中的记录全部查出来。左右两张表的记录全部都保留,即两张表都是保留表 3.全外连接的结果集 = 内连接的结果集 + 两张表找不到匹配数据的记录(对应的被匹配表的字段为空值)

示例
select e.empno , e.ename , d.deptno , d.dname
from emp_xxx e full outer join dept_xxx d on e.deptno = d.deptno ;
外连接总结

1.如果驱动表在被匹配表中找不到匹配记录 , 则匹配一行空行 2.外连接的结果集 = 内连接的结果集 + 驱动表在被匹配表中匹配不上的记录(对应被匹配表的字段都是空值) 3.外连接的本质是驱动表中的数据一个都不能少 4.写外连接的习惯:

a.先写内连接

from 表1 join 表2 on 条件

b.再确定谁做驱动表,从而决定写 left、right、full 关键是确定谁做驱动表

关注
打赏
1661566967
查看更多评论
立即登录/注册

微信扫码登录

0.0540s