多表查询就是说从多个表中获取相应的数据。
(1)笛卡尔积【连接条件无效或被省略,两个表的所有行都发生连接,所有行的组合都会返回(n*m)】
SQL> select e.ename,d.dname from emp e,dept d;//无效
SQL> select e.ename,d.dname from emp e,dept d
2  where e.ename='SCOTT';//有效
(2)等值连接(内连接或简单连接)
两个表的连接条件的列值必须相等,通常这样的连接包含一个主键和一个外键
SQL> select e.ename,d.dname from emp e,dept d
2  where e.deptno=d.deptno
3  and e.ename='SCOTT';
(3)多于两个表的连接
SQL> create table manager
2  as
3  select ename,deptno,sal,job
4  from emp;   //创建manager表
SQL> select e.empno,m.ename,m.deptno,d.loc
2  from emp e,manager m,dept d
3  where m.deptno=d.deptno
4  and m.ename=e.ename
5  and e.job=UPPER('manager');
(4)非等值连接【使用其他连接运算符】
SQL> select e.empno,e.ename,e.sal,s.grade
2  from emp e,salgrade s
3  where e.sal
4  between s.losal and hisal;
(5)外部连接【外部连接不只列出与连接条件向匹配的行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的数据行】
SQL> select e.ename,e.deptno,d.dname
2  from emp1 e,dept1 d
3  where e.deptno(+)=d.deptno;//dept1表为不缺乏连接信息的表,emp1表为缺乏连接信息的表外部连接运算符(+)放在缺少相关连接信息的表的一侧,它能返回该表中那些在另一个表中没有得到匹配的记录。
SQL> select e.ename,e.deptno,d.dname
2  from emp1 e left outer join dept1 d
3  on e.deptno=d.deptno;//左外连接
SQL> select e.ename,e.deptno,d.dname
2  from emp1 e right outer join dept1 d
3  on e.deptno=d.deptno;//右外连接
SQL> select e.ename,e.deptno,d.dname
2  from emp1 e full outer join dept1 d
3  on e.deptno=d.deptno;//全外连接
(6)自然连接
在oralce中使用natural join,也就是自然连接。在Oracle中的join连接中使用using关键字,是相对于natural join的。如果是使用natraul join,并且两张表中如果有多个字段是具有相同的名称和数据类型的,那么这些字段都将被oracle自作主张的将他们连接起来。但实际上我们有时候是不需要这样来连接的。我们只需要将他们的多个具有相同的名称和数据类型的字段中挑选一两个。这时候我们就需要用到using 关键字了。
SQL> select ename,dname
2  from emp1 natural join dept1;//自然连接(会自动搜索表结构,判断是否有列完全相同,完全相同就作为连接的条件)
SQL> select ename,deptno,dname
2  from emp join dept using (deptno);//using的使用
SQL> select ename,emp.deptno,dname
2  from emp join dept using (deptno);//using()里面的字段不能指定前缀,否则会出错
1、如果在使用using关键字时,而且select的结果列表项中包含了using关键字所指明的那个关键字,那么请不要在select的结果列表项中对该关键字指明它属于哪个表。
2、using中仅能使用一个列名。
3、natural join关键字和using关键字是互斥的,也就是说不能同时出现。
(7)自连接【把一个表看做两张表,起两个别名,然后再根据要求进行连接】
SQL> select e.ename as "Employee Name",e.mgr,m.ename "Manager Name"
2  from emp1 e,emp1 m
3  where e.mgr=m.empno
4  and e.ename='SMITH';


CUUG


更多oracle视频教程请点击:http://crm2.qq.com/page/portalpage/wpa.php?uin=800060152&f=1&ty=1&aty=0&a=&from=6