SQL的笛卡尔积

运维 数据库运维
笛卡尔积在SQL中的实现方式既是交叉连接(Cross Join)。所有连接方式都会先生成临时笛卡尔积表,笛卡尔积是关系代数里的一个概念,表示第一个表的行数乘以第二个表的行数等于笛卡尔积结果集的大小。

什么是笛卡尔积?

笛卡尔积在SQL中的实现方式既是交叉连接(Cross Join)。所有连接方式都会先生成临时笛卡尔积表,笛卡尔积是关系代数里的一个概念,表示第一个表的行数乘以第二个表的行数等于笛卡尔积结果集的大小。

参见下面的示例:

  1. DECLARE @Temp TABLE 
  2. (GroupID INT ,   
  3. GroupName VARCHAR(25),  
  4. ItemNumber varchar(25)  
  5. )  
  6. INSERT INTO @Temp 
  7. SELECT 1,'5805','27-196-018' 
  8. UNION 
  9. SELECT 1,'5805','27-196-019' 
  10. UNION 
  11. SELECT 2,'5805','27-196-020' 
  12. UNION 
  13. SELECT 2,'5805','27-196-021' 
  14. UNION 
  15. SELECT 3,'5805','27-196-022' 
  16. UNION 
  17. SELECT 3,'5805','27-196-023' 
  18.  
  19. SELECT   
  20.     G1_GroupID   
  21.    ,G1_ItemNumber   
  22.    ,G2_GroupID   
  23.    ,G2_ItemNumber    
  24. FROM (   
  25.         SELECT   
  26.             GroupID AS G1_GroupID   
  27.            ,ItemNumber AS G1_ItemNumber   
  28.         FROM @Temp    
  29.         WHERE   
  30.             GroupID   IN(1)   
  31.      ) AS A CROSS JOIN  (   
  32.         SELECT   
  33.             GroupID AS G2_GroupID   
  34.            ,ItemNumber AS G2_ItemNumber   
  35.         FROM @Temp     
  36.         WHERE   
  37.             GroupID NOT IN(1)   
  38.      ) AS B   
  39. ORDER BY A.G1_GroupID,A.G1_ItemNumber  
  40. /*Result  
  41.  *    1    27-196-018    2    27-196-020  
  42.  *    1    27-196-018    2    27-196-021  
  43.  *    1    27-196-018    3    27-196-022  
  44.  *    1    27-196-018    3    27-196-023  
  45.  *    1    27-196-019    2    27-196-020  
  46.  *    1    27-196-019    2    27-196-021  
  47.  *    1    27-196-019    3    27-196-022  
  48.  *    1    27-196-019    3    27-196-023  
  49.  */  

 

 

原文链接:http://www.cnblogs.com/jeriffe/archive/2011/05/19/2051121.html

【编者推荐】

  1. 通用权限管理设计之数据库结构设计
  2. PostgreSQL的.NET驱动程序Npgsql中参数对象的一个Bug
  3. SQL Server表最小行的一个纠结问题
  4. 云端数据库:微软SQL Azure及其应用场景
  5. .net访问PostgreSQL数据库发生“找不到函数名”的问题追踪
责任编辑:艾婧 来源: 博客园
相关推荐

2022-11-07 08:51:24

数据库开发笛卡尔积

2011-08-30 09:14:49

SQL ServerJOIN条件笛卡尔乘积

2009-09-25 10:22:35

Hibernate多表

2023-03-26 22:42:02

SQL关联索引

2015-11-02 20:57:00

刘积仁

2018-06-28 12:55:10

华为云

2014-12-02 19:00:03

东软刘积仁

2018-08-17 04:00:10

2023-09-18 12:52:56

台积电3nm芯片协议

2018-06-22 13:41:00

台积电7nm芯片商业化生产

2011-08-16 00:03:02

2015-12-24 15:48:52

F5Networks

2018-08-09 12:02:00

2022-04-14 18:22:36

良率芯片三星

2013-03-19 18:19:00

华为解决方案数据中心网络

2012-09-26 15:47:55

ARM台积电英特尔

2009-05-21 08:46:11

台积电返岗员工关怀金
点赞
收藏

51CTO技术栈公众号