龙空技术网

oracle 笛卡尔积的深度应用以及优缺点.

欲速不达。 26

前言:

如今兄弟们对“oracle怎样去笛卡尔积”大体比较注重,我们都想要学习一些“oracle怎样去笛卡尔积”的相关资讯。那么小编也在网络上网罗了一些有关“oracle怎样去笛卡尔积””的相关资讯,希望大家能喜欢,朋友们快快来学习一下吧!

第一:

首先要知道笛卡尔积的定义:

笛卡尔乘积是指在数学中,两个集合XY的笛卡尔积,又称直积,表示为X × Y,第一个对象是X的成员而第二个对象是Y的所有可能有序对的其中一个成员

第二:实际应用:

举例:

按照雇员的入职时间升序排序,计算所有雇员入职年月所发出的总工资。

解答:

a : 先对入职月份(hiredate)做处理。并做程临时表 tmp_t1 。

create table tmp_t1 as

SELECT empno, ename, job, mgr, hiredate, hiredate, sal, comm,

deptno, sex

FROM emp order by hiredate ;

b : 对临时表tmp_t1 使用笛卡尔积。

select * from

tmp_t1 t1,tmp_t1 t2;

结果如下图1:

图1

从查询结果中看,结果数据确实是产生了笛卡尔积。那么顺着题目联想,怎么利用笛卡尔积来求出 【每个入职年月,所有雇员所发出的总工资】。步骤如下:

c :对b 步骤中产生的笛卡尔积,进一步筛选t1 表中的雇员入职时间>=t2 (WHERE t1.hiredate >= t2.hiredate ) 表的雇员入职时间 :

SELECT t1.* ,t2.*

FROM tmp_t1 t1, tmp_t1 t2

WHERE t1.hiredate >= t2.hiredate order by t1.HIREDATE;

从图2 中可以看出:经过WHERE t1.hiredate >= t2.hiredate 对结果的数据筛选后, 会产生下面数据 。(详细观察结果数据)

图2

d : 出结果:

SELECT t1.*, SUM(t2.sal) sal_sum

FROM tmp_t1 t1, tmp_t1 t2

WHERE t1.hiredate >= t2.hiredate

GROUP BY t1.empno, t1.ename, t1.job, t1.mgr, t1.hiredate, t1.sal, t1.comm,

t1.deptno, t1.sex。

图3

优点 : 此方法可以加深对笛卡尔积的理解与应用。

缺点: 处理小批量数据用此方法还可以,如果数据大的话,此方法对数据处理效率的影响还是很大的。

那么如果对于数据量很大,且要实现相同的功能,小伙伴有没有想到更好的方法呢? 欢迎讨论。

标签: #oracle怎样去笛卡尔积 #oracle笛卡尔积去重 #笛卡尔积例题解析 #笛卡尔积运算性质 #笛卡尔积的应用