1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Oracle/MySQL数据库的表间关联查询_多表关联查询的SQL语句详解

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

时间:2024-01-11 23:32:13

相关推荐

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

文章目录

内连接 inner join示例外连接 outer joinleft outer join 左外连接示例right outer join 右外连接示例full outer join 全外连接示例外连接总结

内连接 inner join

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

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

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

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

示例

select ename , dname , locationfrom 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.locationfrom 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 eon e.deptno = d.deptno ;

full outer join 全外连接

全外连接语法结构:

表 1 full outer join 表 2 on 条件

1.全外连接左右两张表互为驱动表和被匹配表,即两张表都会遍历一遍

2.全外连接可以把两个表中的记录全部查出来。左右两张表的记录全部都保留,即两张表都是保留表

3.全外连接的结果集 = 内连接的结果集 + 两张表找不到匹配数据的记录(对应的被匹配表的字段为空值)

示例

select e.empno , e.ename , d.deptno , d.dnamefrom 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

关键是确定谁做驱动表

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。