oracle多表连接查询

连接查询分为:内连接(相等内连接,非等内连接,自连接),外连接(左外连接,右外连接,全外连接),交叉连接,自然连接

一、内连接

1、相等内连接(使用等号(=)指定连接条件的连接查询)

①使用WHERE关键字的连接查询

  select *
  from 表1,表2
  where 表1.字段1=表2.字段1;

②使用JOIN关键字的连接查询--------- [inner] join    on

 select *
 from 表1 [inner] join 表2 on 表1.字段1=表2.字段1;

说明:使用JOIN关键字的内连接与使用WHERE子句的连接查询等价,即查询结果中只包含两个表中相匹配的行。在ON后面给出的连接条件使用等号(=)运算符比较被连接的两张表的公共字段,其查询结果中只包含两表的公共字段值相等的行,列可以是两表中任意列。

例如:

显示雇员的名称和所在的部门的编号和名称。

执行以下查询:

SELECT ename,emp.deptno,dname FROM emp JOIN dept

ON emp.deptno=dept.deptno;

 

2、非等值连接(非等内连接是在连接条件中使用除“=”运算符以外的其它运算符比较被连接的公共字段。)

例:

显示雇员名称,工资和所属工资等级。

执行以下查询:

SELECT e.ename,e.sal,s.grade FROM emp e,salgrade s

WHERE e.sal BETWEEN s.losal AND s.hisal;

3、自连接(自连接就是一个表,同本身进行连接。使用自连接可以将自身表的一个镜像当作另一个表来对待,从而能够得到一些特殊的数据。)

例:

显示雇员名称和雇员的经理名称。

执行以下查询:

SELECT worker.ename||’的经理是’||manager.ename AS 雇员经理

FROM emp worker,emp manager

WHERE worker.mgr=manager.empno;

执行结果为:

二、外连接

1、左外连接(左侧的表中的全部数据都会被显示出来,但是右侧表的数据,
                        只有和左侧匹配上的字段才会被查询出来!否则都会显示null!)

图示:

①使用WHERE关键字的左外连接查询

例:

显示雇员的名称、工资和所在的部门名称及没有属于任何部门的雇员。

执行以下查询:

SELECT ename,sal,dname FROM emp,dept

WHERE emp.deptno=dept.deptno(+);

--------注:emp表为主表

执行结果为:

②使用LEFT JOIN或LEFT OUTER JOIN关键字的左外连接查询

上述操作可变为:

SELECT ename,sal,dname FROM emp LEFT JOIN dept

ON emp.deptno=dept.deptno;

2、右外连接( 右侧的表中的全部数据都会被显示出来,但是左侧表的数据,
                        只有和右侧匹配上的字段才会被查询出来!否则都会显示null!)

图示:

①使用WHERE关键字的右外连接查询

例:

显示雇员的名称、工资和所在的部门名称及没有任何雇员的部门。

执行以下查询:

SELECT ename,sal,dname FROM emp,dept

WHERE emp.deptno(+)=dept.deptno;

执行结果为:

②使用RIGHT JOIN或RIGHT OUTER JOIN关键字的右外连接查询

上述操作变为:

SELECT ename,sal,dname FROM emp RIGHT JOIN dept

ON emp.deptno=dept.deptno;

3、全外连接(这种是左外连接和右外连接的并集,可完全显示两个表,且没有匹配的记录为空。)

-------full/all outer join

图示:

例:

使用emp表和dept表执行完全外连接查询。

SELECT ename,sal,dname FROM emp FULL JOIN dept

ON emp.deptno=dept.deptno;

执行结果为:

三、交叉连接(表与表之间做笛卡尔积查询!,交叉连接不带ON子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到 结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查 询条件的数据行数。)

 例:

select * from emp cross join dept;  

等同于:

select * from emp ,dept;

 

四、自然连接(属性值相同的就保留下来,如果属性值不相同则去掉,连接后的表的属性值个数为原来两个表的属性之和减去公共属性的个数,如果两个表没公共属性则自然连接就是笛卡尔乘积。)

select * from emp NATURAL join dept;

等同于:

select * from empt, dept where emp.deptno=dept.deptno;

 

参考博客:https://blog.csdn.net/u013044310/article/details/82258530

                  https://blog.csdn.net/qq_36249352/article/details/79649119

 

 

 

 

 

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值