多语言展示
当前在线:428今日阅读:99今日分享:20

oracle表的连接查询-join

oracle表的连接查询-join
工具/原料
1

centos7

2

oracle11g、 secureCRT

方法/步骤
1

连接查询也就是多表查询连接方式有以下几种相同点   都可以在结尾加上  where条件不同点   除了cross join外 其它连接都必须加上on 关键字1.自然连接    自然连接就是在两张表中寻找出数据类型与列名相同的字段,然后将它们自动的连接起来,并返回所有符合条件的结果。自然连接不能添加限定条件下图中添加了限定条件,所以会报错

2

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

3

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

4

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

5

(1.3)也可以使用where条件的方式把两张表连接起来进行查询通过关联字段,把两张表的关系连接起来select a.employee_id,a.first_name,a.salary,a.department_id,b.department_name fromemployees a,departments b where a.department_id=b.department_id; 返回的结果也是106行

6

2.左连接  left join 根据指定条件以左表为主,返回左表中的所有记录和右表中的连接字段相等的记录在上几张图中可以看到,雇员表中的数据有一条没有部门的数据,始终不会显示出来。想要把雇员表中的所有数据都显示出来,只能通过左连接或者右连接来进行查询。

7

3.右连接 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);

8

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

9

5.交叉连接 cross join。交叉连接不带on子名,它返回被连接的两个表的所有数据行,行数的结果是第一个表中符合查询条件的行数乘以第二个表中符合查询条件的数据行数。在有where条件的情况下返回的结果与  join on  返回的结果是一样的

10

在无条件下返回的结果

11

6.除了以上连接方式外oracle自身也有特有的连接方式(6.1)使用where代替join on的自然连接两张表之间使用,隔开,使用where代替join on

12

(6.2)左/右连接(+) (+)在哪边代表哪张边允许为空select e.first_name,e.salary,d.department_name from employees e, departments d where (e.department_id(+)=d.department_id);当(+)在条件左边时,可以看到右边表的数据是全部显示出来的

13

当(+)在条件右边时,可以看到左边表的数据是全部显示出来的select e.first_name,e.salary,d.department_name from employees e, departments d where (e.department_id=d.department_id(+));

注意事项

此经验由勇敢的choy原创,觉得此经验对你有帮助,请点击下面【投票】予以支持,也可以点击上面的【五角星】来收藏!

推荐信息