笛卡尔乘积
 

求助编辑百科名片

笛卡尔(Descartes)乘积又叫直积。假设集合A={a,b},集合B={0,1,2},则两个集合的笛卡尔积为{(a,0),(a,1),(a,2),(b,0),(b,1), (b,2)}。可以扩展到多个集合的情况。类似的例子有,如果A表示某学校学生的集合,B表示该学校所有课程的集合,则A与B的笛卡尔积表示所有可能的选课情况。

 

现在有两张表 t1  t2  
表结构如下:

SQL> desc t1;
Name                                      Null?    Type
----------------------------------------- -------- ----------------------------
ID                                                 NUMBER

SQL> 
SQL> desc t2;
Name                                      Null?    Type
----------------------------------------- -------- ----------------------------
TEAMID                                             NUMBER


然后要将t1 和t2 中的数据插入到 表t3中 

t3的表结构如下


SQL> desc t3;
Name                                      Null?    Type
----------------------------------------- -------- ----------------------------
TEAMID                                             NUMBER
ID                                                 NUMBER

表t1 t2中的数据如下

SQL> select * from t1;

        ID
----------
         1
         2
         3

SQL> select * from t2;

    TEAMID
----------
         1
         2
         3


插入数据的要求是, t2表中的  TEAMID    字段 对应多个t1表的  ID     字段,
插入后的数据格式如下:

SQL> select * from t3;

    TEAMID         ID
---------- ----------
         1          1
         1          2
         1          3
         2          1
         2          2
         2          3
         3          1
         3          2
         3          3

9 rows selected.

 

使用笛卡尔积的方式可以得到想要的结果:select t2.teamid, t1.id from t1, t2 order by 1,2