创建笛卡尔积

当执行未显式声明表之间的连接条件的多表查询时,就创建了笛卡尔积。笛卡尔积由表的行的每种可能的组合构成。此结果通常很大且不实用。

以下查询从两个表中进行选择并生成笛卡尔积。

图: 查询

SELECT * FROM customer, state; 
state 表只有 52 行,customer 表只有 28 行,然而查询的影响是将一个表的行数乘以另一个表的行数并检索不实用的 1,456 行,如下所示。

图: 查询结果

customer_num  101
          fname         Ludwig
          lname         Pauli
          company       All Sports Supplies
          address1      213 Erstwild Court
          address2      
          city          Sunnyvale
          state         CA
          zipcode       94086
          phone         408-789-8075
          code          AK
          sname         Alaska
          
          customer_num  101
          fname         Ludwig
          lname         Pauli
          company       All Sports Supplies
          address1      213 Erstwild Court
          address2      
          city          Sunnyvale
          state         CA
          zipcode       94086
          phone         408-789-8075
          code          HI
          sname         Hawaii
          
          customer_num  101
          fname         Ludwig
          lname         Pauli
          company       All Sports Supplies
          address1      213 Erstwild Court
          address2      
          city          Sunnyvale
          state         CA
          zipcode       94086
          phone         408-789-8075
          code          CA
          sname         California
          ⋮

另外,显示在连续行中的某些数据是矛盾的。例如:虽然 customer 表中的 citystate 指示在 California 的地址,但是 state 表的 codesname 可能是另一个州的。