前言:
如今兄弟们对“oracle怎样去笛卡尔积”大体比较注重,我们都想要学习一些“oracle怎样去笛卡尔积”的相关资讯。那么小编也在网络上网罗了一些有关“oracle怎样去笛卡尔积””的相关资讯,希望大家能喜欢,朋友们快快来学习一下吧!第一:
首先要知道笛卡尔积的定义:
笛卡尔乘积是指在数学中,两个集合X和Y的笛卡尔积,又称直积,表示为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:
从查询结果中看,结果数据确实是产生了笛卡尔积。那么顺着题目联想,怎么利用笛卡尔积来求出 【每个入职年月,所有雇员所发出的总工资】。步骤如下:
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 对结果的数据筛选后, 会产生下面数据 。(详细观察结果数据)
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。
优点 : 此方法可以加深对笛卡尔积的理解与应用。
缺点: 处理小批量数据用此方法还可以,如果数据大的话,此方法对数据处理效率的影响还是很大的。
那么如果对于数据量很大,且要实现相同的功能,小伙伴有没有想到更好的方法呢? 欢迎讨论。
标签: #oracle怎样去笛卡尔积 #oracle笛卡尔积去重 #笛卡尔积例题解析 #笛卡尔积运算性质 #笛卡尔积的应用