关闭

全面认识Oracle的连接

发表于:2009-12-09 11:15

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:未知    来源:51Testing软件测试网采编

  4,自然连接

  这是Oracle的一种特有的连接方式。它自动连接两个表中数据类型和名称相同的字段,然后根据条件自动地将他们连接起来。

  具体语法:

  select ... from table1 t1 left natural join table2 t2;

  比如:

  select emp.ename, dept.dname from emp natural join dept;

  这里并没有指定连接的条件,实际上oracle自动的将员工表中的deptno和部门表中的deptno做了连接。

  也就是实际上相当于:

  select emp.ename,dept.dname from emp join dept on emp.deptno = dept.deptno;

  因为这两张表的这两个字段deptno的类型和个名称完全相同。所以使用natural join时被自然的连接在一起了。

  PS:

  如果自然连接的两个表仅是字段名称相同,但数据类型不同,那么将会返回一个错误。

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

32/3<123>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号