oracle表的连接查询-join

2025-10-08 15:25:33

1、连接查询也就是多表查询

连接方式有以下几种

相同点   都可以在结尾加上  where条件

不同点   除了cross join外 其它连接都必须加上on 关键字

1.自然连接    自然连接就是在两张表中寻找出数据类型与列名相同的字段,然后将它们自动的连接起来,并返回所有符合条件的结果。自然连接不能添加限定条件

下图中添加了限定条件,所以会报错

oracle表的连接查询-join

2、下图中列出两张表之间的关系,有两个字段数据类型,与列名相同所以在进行自然连接查询的时候会把两个字段条件都满足的结果查询出来。 一共查询出32条数据,但雇员表中是有107条数据的,所以这样查询出来的结果并不准确。

oracle表的连接查询-join

oracle表的连接查询-join

3、(1.1)可以使用using子句来给两张表指定限定条件,但在使用using的时候 前面的natural join 只需要写成  join  即可  下图中的查询结果为106条,因为有一条数据没有部门

select first_name,department_name,department_id from employees join departments using (department_id);

oracle表的连接查询-join

4、(1.2)也可以使用on来给两张表指定限定条件,但在使用on 时 natural join 也只能使用 join  查询结果也为106

oracle表的连接查询-join

5、(1.3)也可以使用where条件的方式把两张表连接起来进行查询

通过关联字段,把两张表的关系连接起来

select a.employee_id,a.first_name,a.salary,a.department_id,b.department_name from

employees a,departments b where a.department_id=b.department_id; 返回的结果也是106行

oracle表的连接查询-join

6、左连接  left join 根据指定条件以左表为主,返回左表中的所有记录和右表中的连接字段相等的记录

在上几张图中可以看到,雇员表中的数据有一条没有部门的数据,始终不会显示出来。想要把雇员表中的所有数据都显示出来,只能通过左连接或者右连接来进行查询。

oracle表的连接查询-join

7、右连接 right join     以右表为主,返回右表中的所有记录和左表中连接字段相等的记录

如果把雇员表写在右边可以使用right join ...on   来实现查询出所有雇员的数据

select e.department_id,e.first_name,d.department_name from departments d right join employees e on (e.department_id=d.department_id);

oracle表的连接查询-join

8、全部外连接 full  join  ......on  把两张表满足条件以外的所有数据都查询出来

oracle表的连接查询-join

9、交叉连接 cross join。

交叉连接不带on子名,它返回被连接的两个表的所有数据行,行数的结果是第一个表中符合查询条件的行数乘以第二个表中符合查询条件的数据行数。

在有where条件的情况下返回的结果与  join on  返回的结果是一样的

oracle表的连接查询-join

10、在无条件下返回的结果

oracle表的连接查询-join

11、除了以上连接方式外oracle自身也有特有的连接方式

(6.1)使用where代替join on的自然连接

两张表之间使用,隔开,使用where代替join on

oracle表的连接查询-join

12、(6.2)左/右连接(+) (+)在哪边代表哪张边允许为空

select e.first_name,e.salary,d.department_name from employees e, departments d where (e.department_id(+)=d.department_id);

当(+)在条件左边时,可以看到右边表的数据是全部显示出来的

oracle表的连接查询-join

13、当(+)在条件右边时,可以看到左边表的数据是全部显示出来的

select e.first_name,e.salary,d.department_name from employees e, departments d where (e.department_id=d.department_id(+));

oracle表的连接查询-join

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢