Oracle多表查询

Oracle多表查询
一   介绍
多表查询也成为连接查询。
	在emp表与dept表之间存在着多对一的关联关系(现实中还有其他的关联),往往我们希望查询出更多信息,这时候我们就要用到连接查询。
	连接查询分为内连接和外连接、交叉连接和自连接的查询,内连接分为左外连接、右外连接,全外连接还有等值连接、非等值连接。

二  举例:
1.等值连接   例:得到的是部门和员工下的deptno相同的
SQL> select * from dept d,emp e where d.deptno=e.deptno;

查询出部门为10的所有员工的信息
SQL> select e.* from dept d,emp p where d.deptno=p.deptno and d.deptno=10 order by d.deptno desc;

注:(1)在多表查询的时候d.deptno=p.deptno是连接两个表的先决条件。
	(2)使用表名前缀在多个表中区分相同的列,并且可以简化查询,提高执行的效率

2.非等值连接
	例:查询出employees中的工资和姓名,条件在jobs表中的最高工资和最低工资之间的
	SQL> select e.last_name,e.salary from employees e,jobs j where e.salary between j.min_salary and max_salary;
3.外连接
	   外连接: 两个表在连接过程中除了返回满足连接条件的行以外还返回左(或右)表中不满足条件的行 ,这种连接称为左(或右) 外联接。没有匹配的行时, 结果表中相应的列为空(NULL). 外连接的 WHERE 子句条件类似于内部链接, 但连接条件中没有匹配行的表的列后面要加外连接运算符, 即用圆括号括起来的加号(+). 

例子: 
左外链接  显示左边的所有的字段,
第一种:select * from emp e left outer join dept d on d.deptno = e.deptno order by e.deptno
	第二种:select * from emp e,dept d where d.deptno = e.deptno(+);

	右外连接  显示全部在join右边的字段
	第一种:SQL> select * from emp e right outer join dept d on d.deptno=e.deptno;
	第二种:select * from emp e,dept d where d.deptno(+) = e.deptno;

注(+)使用的方法为:
	(+)  在左边的,右边的全出来,为右外连接,
	(+)  在右边的,左边的全出来,为左外连接、
4.全外连接
    SQL> select * from emp e full outer join dept d on d.deptno=e.deptno;
5.自关联
	SQL> select * from emp e1,emp e2 where e1.mgr=e2.empno;
	SQL> select e1.*,e2.ename  from emp e1,emp e2 where e1.mgr=e2.empno;

6.cross 和笛卡尔积的结果相同
     SQL> select * from dept cross join emp;
7.自然连接  会以两个表中具有相同名字的列为条件创建等值连接
	SQL> select * from dept natural join emp;
8.使用using子句创建连接
    SQL> select * from dept join emp e using(deptno);
注:出现错误的原因是()中不可以有别名
		在natural join 子句创建等值连接时,可以使用 using 子句指定等值连接中需要用到的列。
		使用 USING 可以在有多个列满足条件时进行选择。
不要给选中的列中加上表名前缀或别名。
natural join 和 using 子句经常同时使用。
9.使用on子句创建连接
   SQL> select * from dept d join emp e on e.deptno=d.deptno;



你可能感兴趣的:(Oracle多表查询)