Oracle查连接,Oracle连接查询-Oracle

背景:

emp表中有14条记录:

Qnuamy.jpg

dept表中4条记录:

Vb2Yvm.png

salgrade表中有5条记录:

YRJNZ3.png

一、交叉连接(CROSS JOIN)

交叉连接(CROSS JOIN):有两种,显式的和隐式的,不带ON子句,返回的是两表的乘积,也叫笛卡尔积。

例如:下面的语句1和语句2的结果是相同的(均为56条记录)。

语句1:隐式的交叉连接,没有CROSS JOIN。

select empno,ename,sal,dname,loc from emp,dept

语句2:显式的交叉连接,使用CROSS JOIN

select empno,ename,sal,dname,loc from emp CROSS JOIN dept

二、内连接

内连接是根据指定的连接条件进行连接查询,只有满足连接条件的数据才会出现在结果集中。

当执行两个表内连接查询的时,首先在第一个表中查找到第一个记录,然后从头开始扫描第二个表,逐一查找满足条件的记录,找到后将其与第一个表中的的第一个记录拼接形成结果集中的第一个记录。当第二个表被扫描一遍后,再从第一个表中查询第二个记录,然后再从头扫描第二个表,逐一查找满足条件的记录,找到后将其与第一个表中的第二个记录拼接形成结果集中的一个记录。重复执行,知道第一个表中的全部记录都处理完毕为止。

1. 相等连接

通过两个表具有相同意义的列,可以建立相等连接条件。只有连接列上在两个表中都出现且值相等的行才会出现在查询结果中。

例如,查询10号部门员工的员工号、员工名、工资、部门号和部门名:

SELECT empno,ename,sal,emp.deptno FROM EMP

join DEPT on EMP.DEPTNO = DEPT.DEPTNO and EMP.DEPTNO=10

结果如下图:

UbimYv.png

2、不相等连接

如果连接条件中的运算符不是等号而是其他关系的运算符,这成为不相等连接。

例如,查询10号部门员工的工资等级:

select empno,ename,sal,grade

from emp

join salgrade

on sal>losal and sal

and deptno=10

结果如下图:

3Yniiy.png

3、自身连接

自身连接是指在同一个表或者视图中进行连接,相当于同一个表作为两个或多个表使用。

例如:查询所有员工的员工号、员工名与该员工领导的员工名、员工号:

select work.empno,work.ename,manager.empno,manager.ename

from emp work

join emp manager

on work.mgr=manager.empno

结果如下图:

ieQRby.png

三、外连接

外连接是指在内连接的基础上,将某个连接表中不符合连接条件的记录加入到结果集中。

在左外连接和右外连接时都会以一张表为基表,该表的内容会全部显示,然后加上两张表匹配的内容。 如果基表的数据在另一张表没有记录。 那么在相关联的结果集行中列显示为空值(NULL)。

1、 左外连接

左外连接是指在内连接的基础上,将连接操作符左侧表中不符合连接条件的记录加入到结果集中,与之对应的连接操作符右侧表列用NULL填充。

例如,查询10号部门的部门名 、员工号、员工名和所有其他部门的名称:

select dname,empno,ename

from dept

left join emp

on dept.deptno=emp.deptno

and dept.deptno=10;

结果如下图:

77bIjy.png

2、 右外连接

右外连接是指在内连接的基础上,将连接操作符右侧表中不符合连接条件的记录加入到结果集中,与之对应的连接操作符左侧表列用NULL填充。

例如,查询20号部门的部门名称及其员工号、员工名和所有其他部门的员工号、员工名:

select empno ,ename,dname

from dept

right join emp

on dept.deptno=emp.deptno

and dept.deptno=20;

结果如下图:

AvMbEv.png

3、 全连接

全外连接是指在内外连接的基础上,将连接操作符两侧表中不符合的记录加入到结果集中。

例如,查询所有的部门名和员工名:

select dname,ename

from emp

full join dept

on emp.deptno=dept.deptno

结果如下图:

uA3i6r.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值