oracle 连接查询

连接查询指基于两个或两个以上表或视图的查询,在实际应用中,可能仅仅查询单个表无法满足应用程序的实际需求,例如显示SALES部门位置以及雇员名,这种情况就需要进行连接查询(DEPT和EMP表)。

  • 当使用连接查询时,必须在FROM后指定两个或两个以上的表。
  • 当使用连接查询时,应该在列名前加表名作前缀,如果不同表之间的列名不同就不用,但不同表之间存在相同列名时就要加前缀,
  • 当使用连接查询时,必须在WHERE子句中指定有效地连接条件,如果有错失,可能会造成笛卡尔集

 

☆相等连接:用 = 指定连接条件

SELECT e.name,e.sal,d.dname FROM emp e,dept d

WHERE e.deptno = d.deptno AND d.deptno=10;

 

 

☆不等连接:其实是BETWEEN...AND...

SELECT a.ename,a.sal,b.grade FROM emp a,salgrade b

WHERE a.sal BETWEEN b.losal AND b.hisal;

 

 

☆自连接

指同一张表之间的连接查询,主要用在自参照表上显示上下级关系或者层次关系。(自惨表指在不同列之间具有参照关系或主从关系的表),例如,EMP表包含有EMPNO(雇员号)和MGR(管理者号),二者就有参照关系。

 

SELECT manager.enamec FROM emp manager,emp worker

WHERE manager.empno = worker.mgr

AND worker.ename='BLAKE';

 

 

☆内连接和外连接

1.内连接,默认情况下,在执行连接查询时如果没有指定任何连接操作符,都属于内连接

SELECT a.dname,b.ename FROM dept a,emp b

WHERE a.deptno=b.deptno AND a.deptno=10;

 

另外,通过在FROM子句中指定INNER JOIN也可以指定内连接

SELECT adname,b.ename FROM dept a INNER JOIN emp b

ON a.deptno = b.deptno AND a.deptno=10;

 

如果主表的主键列和从表的外部键列名相同,那么还可以使用NATURAL JOIN 关键字自动执行内连接操作

SELECT dname,ename FROM dept NATURAL JOIN emp;

 

2.左外连接

左外连接是通过指定LEFT[OUTER]JOIN选项来实现的。不仅会返回满足连接条件的所有记录,而且还会返回不满足连接条件的连接操作符左别表的其他行。

SELECT a.dname,b.ename FROM dept a LEFT JOIN emp b

ON a.deptno=b.deptno AND a.deptno=10;

 

3.右外连接

跟左外连接一样

 

 

4.完全外连接

通过FULL[OUTER]JOIN选项来实现的,不仅会返回满足连接条件的所有行,而且还会返回不满足连接条件的所有其他行。

SELECT a.dname,b.ename FROM dept a FULL JOIN emp b

ON a.deptno=b.deptno AND a.deptno=10;

 

 

5.使用(+)操作符

当执行外连接时,尽管可以用连接操作符(+)来完成,但还是建议用OUTER JOIN执行外连接。

1.使用(+)操作符执行左外连接

SELECT a.dname,b.ename FROM dept a,emp b

WHERE a.deptno=b.deptno(+)

AND b.deptno(+)=10;

 

 

2.使用(+)操作符执行右外连接

SELECT a.dname,b.ename FROM dept a,emp b

WHERE a.deptno(+)=b.deptno AND a.deptno(+)=10

ORDER BY a.dname;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值