全面了解Oracle的连接
来源:优易学  2011-12-9 15:56:16   【优易学:中国教育考试门户网】   资料下载   IT书店

 

  5,自连接

  简单地说就是自己和自己进行连接,连接的条件就是本表的主键。通常认为在数据库中存在父子关系时,应该设计成两张表。但如果父子都是同一实体,就可以简化设计成一张表。比如,查看员工及直接上级的名字: (上级也是员工,上级的数据也是员工数据,也应该存储在员工表中。)

  select yg.empno as 员工, yg.ename as 工号, sj.ename as 上级 from emp yg, emp sj where

  yg.mgr = sj.empno;

  员工     工号   上级

  7369     SMITH    FORD

  7499     ALLEN    BLAKE

  7521     WARD    BLAKE

  7566     JONES    KING

  7654     MARTIN    BLAKE

  7698     BLAKE    KING

  7782     CLARK    KING

  7788     SCOTT    JONES

  7844     TURNER    BLAKE

  7876     ADAMS    SCOTT

  7900     JAMES    BLAKE

  7902     FORD    JONES

  7934     MILLER    CLARK

  连接的表其实就是员工表自身,因为上级也是员工,上级的empno应该与其直接下属员工的mgr相匹配。

  这里实际上实现的是一种树形的结构,即多级的分类结构。每层都是同样级别的员工,上层为其直属上级,下层为其直属员工。通过结果可以很清楚地看到这一结构,对于JONES来说,他的上级KING,BLAKE

  的下级又有SCOTT和FORD。

  只要是相同类型实体的多级的分类结构,都可以使用一张表来存储。在实体的所有属性基础上,在添加一个所属上级的ID即可。比如,大小类,多级菜单,组织机构都可以采用这样的方式设计表结构。

  PS:

  什么时候用别名?

  通常下面的情况下需要用到别名

  1)实际的表名过长,编写不方便,使用别名简化。

  2)同一张表检索多次时,“必须”使用别名。上面的自连接中,连接的表其实就是一张表,不加上别名就无法知道字段是属于哪一个引用的表。

  6,交叉连接

  就是两个表在数据库上的排列组合,效果就是笛卡尔乘积。一个n行数据的表与一个m行数据的表进行交叉连接之后,结果中包含n*m行数据。

  具体语法:

  select * from emp cross join dept;

  或

  select * from emp, dept;

  在实际工作中,交叉连接可用于生成调查表。比如:

  select emp.empno,emp.ename,dept.dname, null 评分 from  dept,emp order by

  emp.ename,dept.dname;

  这样能够产生一个每个员工对所有的部门的一个评价表格:

  EMPNO    ENAME    DNAME        评分

  7876    ADAMS    ACCOUNTING

  7876    ADAMS    OPERATIONS

  7876    ADAMS    RESEARCH

  7876    ADAMS    SALES

  7499    ALLEN    ACCOUNTING

  7499    ALLEN    OPERATIONS

  7499    ALLEN    RESEARCH

  7499    ALLEN    SALES

  7698    BLAKE    ACCOUNTING

  7698    BLAKE    OPERATIONS

  7698    BLAKE    RESEARCH

  7698    BLAKE    SALES

  7782    CLARK    ACCOUNTING

  7782    CLARK    OPERATIONS

  7782    CLARK    RESEARCH

  7782    CLARK    SALES

  ...

  每个员工和每个部门都会毫无遗漏地出现在结果中。

  PS:

  若有表t1, t2, t3, ..., tn,其数据行数为r1, r2, r3, ..., rn,则将t1, t2, t3, ..., tn进行交叉连接连接后的结果中会存在r1 * r2 * r3  *  ... * rn条数据。也就是说,进行交叉连接的表的数据量如果比较大,结果会产生海量的数据。

上一页  [1] [2] 

责任编辑:小草

文章搜索:
 相关文章
热点资讯
热门课程培训