WEB开发网
开发学院数据库Oracle Oracle数据库异构数据联结详解 阅读

Oracle数据库异构数据联结详解

 2008-12-26 13:08:21 来源:WEB开发网   
核心提示:如果你有两个数据来源,如平面文件或表数据,Oracle数据库异构数据联结详解,并且要将他们合并在一起,你将怎么做?如果他们有一个共同的属性,这个数据源已经记录可100万个记录,表A范围从1到1000000及表B范围从1000001至2000000 (即在第一个表中再加入100万行) ,如客户ID,那么该解决方案应该是很

如果你有两个数据来源,如平面文件或表数据,并且要将他们合并在一起,你将怎么做?如果他们有一个共同的属性,如客户ID,那么该解决方案应该是很明显:合并相关的属性,在这个例子中,只需合并客户ID就够了。如果没有任何共同之处该怎么办呢?唯一的要求就是,将数据源1中的记录和数据源2中的记录进行匹配 。并且,那个记录去和另一个记录匹配并没有关系,那么问题是,一个数据源中的每一个纪录如何获得从其他数据源记录的标记。

上述问题可以被描述为向一个数据库中加入了不同的或看似无关的数据。在先前的文章的文章中,涉及如何使用ROWNUM在无关的数据之间创造联系。该合并方法的本质是利用甲骨文提供虚拟数据列来建立联系。下面的查询可以用来作为CREATE TABLE AS SELECT声明的一部分或作为基于满足加入条件既定目标表的插入。

SELECT * FROM
   (SELECT , ROWNUM AS rownum_a
   FROM TABLE_A
   ) ALIAS_A,
   (SELECT , ROWNUM AS rownum_b
   FROM TABLE_B
   ) ALIAS_B
   WHERE ALIAS_A.rownum_a = ALIAS_B.rownum_b;

假设要合并的记录的数目过大(如数以百万计),这种方法潜在的缺点是什么?那么,当一行作为一个记录时又如何了?我们没有真正的控制权决定的查询所返回结果行的顺序,直到我们执行查询之前,甲骨文是不知道记录的行号的。换言之, ROWNUM是在这样的事实上创建的。如果你要从两个地方选择数百万行,你将支付甲骨文公司为每个记录分配行号(只针对你的查询,而不是永远)的时间。

让我们监测将两个有100万行的表合并到一起的一个会话。在这第一个例子中,这个数据源已经记录可100万个记录。表A范围从1到1000000及表B范围从1000001至2000000 (即在第一个表中再加入100万行) 。如果加入后能够完美的保持行的顺序,那么有序对将像下面表格这个样子:

1 2 3 4  下一页

Tags:Oracle 数据库 数据

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接