全面认识Oracle的连接Oracle认证考试

文章作者 100test 发表时间 2009:12:11 18:09:43
来源 100Test.Com百考试题网


"tbbnc">

  首先还是说明一下,为什么要使用连接(join)?原因有两点:

  1)经常有需要访问多个表中字段的情况

  2)用子查询也可以实现上面的功能,但是效率相当低下。使用连接可以大大提高效率。

  连接(Join)的基本结构:

  0select ... from table1 t1 join table2 t2 on ti.id = t2.id.

  join前后是两个需要连接的表,on表示的是连接的条件。传统的写法是不使用join关键字,使用where表示条件:

  0select ... from table1 t1, table2 t2 where ti.id = t2.id.

  一般是两个表进行连接,三个表的连接语法稍有不同:

  普通写法:0select ... from a join b on a.id = b.id

  join c on b.id = c.id.

  传统写法:0select ... from a, b, c where a.id = b.id and b.id = c.id.

  1,对等连接

  上面的就是一种对等连接,即默认的join方式。特点是只显示连接的表中存在而且相等的记录。其它的记录均不显示。

  传统的写法也是一种对等连接,只显示匹配条件的记录。

  2,左/右连接

  有时需要将进行连接的其中一个表作为基准显示全部的数据,根据连接条件在其它表中可能会出现无法匹配的数据,此时就用空值来代替。比如显示员工信息时,有的员工可能还没有分配到某个具体的部门(新进员工),其所属部门一项就没有数据,但是员工仍然需要显示,即员工表数据需要全部显示。

  具体语法:

  0select ... from table1 t1 left join table2 t2 on ti.id = t2.id. --左连接

  或

  0select ... from table1 t1 right join table2 t2 on ti.id = t2.id. --右连接

  左还是右的区别,简单地说左(右)连接就是指join的左(右)边是基准表,全部数据都要显示,根据连接条件无法进行连接的记录就用空值代替。

  比如:

  0select e.empno, e.ename, d.dname from emp e left join dept d on e.deptno = d.deptno.

  还没有分配到某个具体的部门的员工的e.deptno肯定是没有值的,无法满足“e.deptno = d.deptno”的条件,但由于是左连接,左边的员工表的数据必然会显示,这时该员工的部门名称就是空值。

  若是right join ... on,就表示部门表的数据全部显示,员工表中无法连接的数据就是空值代替,意思就是说这个部门还没有员工,因为在员工表中没有一条记录的deptno与该部门的deptno相匹配(可能是刚刚成立的新部门)


相关文章


oracleforinloop两例Oracle认证考试
Oracle数据库ORA00257故障的解决过程Oracle认证考试
oracle多表查询与子查询复习Oracle认证考试
oracle认证辅导Loracle中常用参数Oracle认证考试
全面认识Oracle的连接Oracle认证考试
解析oracle的ROWNUMOracle认证考试
Oracle外键级联删除Oracle认证考试
设定Oracle最大游标数Oracle认证考试
常用的SQL语句语法(Oracle版)二Oracle认证考试
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛