第一:
首先要知道笛卡尔积的定义:
笛卡尔乘积是指在数学中,两个集合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:

图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
优点 : 此方法可以加深对笛卡尔积的理解与应用。
缺点: 处理小批量数据用此方法还可以,如果数据大的话,此方法对数据处理效率的影响还是很大的。