sql中笛卡尔乘积 集合的笛卡尔乘积

一、SQL中大概有这么几种JOIN:
  cross join
  inner join
  left outer join
  right outer join
  full outer join
  他们都是基于cross join(笛卡尔乘积)

二、

笛卡尔乘积就是说 把所有的组合都出现一次。

举例:

A_test表
   Id a_name a_describe
   1 a11111 a11111
  2 a22222 a22222
sql中笛卡尔乘积 集合的笛卡尔乘积
  3 a33333 a33333
  B_test表
   Id b_name b_describe
   1 b11111 01
   1 b11111 02
  2 b22222 01
  2 b22222 02
   3 b44444 04
  select * from a_test a //查询出所有a表中的所有记录 3条
  select * from b_test b //查询出所有b表中的所有记录 5条
  
  select * from a_test a cross join b_test b //a b 两表的笛卡尔乘积 即所有的组合共15条记录
  结果:
  1 a11111 a111111 1 b11111 01
  1 a11111 a111111 1 b11111 02
  1 a11111 a111111 2 b22222 01
  1 a11111 a111111 2 b22222 02
  1 a11111 a111111 4 b44444 01
  2 a22222 a222222 1 b11111 01
  2 a22222 a222222 1 b11111 02
  2 a22222 a222222 2 b22222 01
  2 a22222 a222222 2 b22222 02
  2 a22222 a222222 4 b44444 01
  3 a33333 a333333 1 b11111 01
  3 a33333 a333333 1 b11111 02
  3 a33333 a333333 2 b22222 01
  3 a33333 a333333 2 b22222 02
  3 a33333 a333333 4 b44444 01
  1 a11111 a111111 1 b11111 01
  1 a11111 a111111 1 b11111 02
  1 a11111 a111111 2 b22222 01
  1 a11111 a111111 2 b22222 02
  1 a11111 a111111 4 b44444 01
  2 a22222 a222222 1 b11111 01
  2 a22222 a222222 1 b11111 02
  2 a22222 a222222 2 b22222 01
  2 a22222 a222222 2 b22222 02
  2 a22222 a222222 4 b44444 01
  3 a33333 a333333 1 b11111 01
  3 a33333 a333333 1 b11111 02
  3 a33333 a333333 2 b22222 01
  3 a33333 a333333 2 b22222 02
  3 a33333 a333333 4 b44444 01
  select * from a_test a inner join b_test b on a.id =b.id
  //在笛卡尔乘积的结果集中去掉不符合连接条件的行 包含于笛卡尔乘积
  结果:
  1 a11111 a111111 1 b11111 01
  1 a11111 a111111 1 b11111 02
  2 a22222 a222222 2 b22222 01
  2 a22222 a222222 2 b22222 02
  1 a11111 a111111 1 b11111 01
  1 a11111 a111111 1 b11111 02
  2 a22222 a222222 2 b22222 01
  2 a22222 a222222 2 b22222 02
  select * from a_test a left outer join b_test b on a.id =b.id
  //是在inner join的结果集上加上左面表中没被选上的不相等的记录,不包含于笛卡尔乘积
  //行的右表部分每个字段都用NUll填充
  结果:
  1 a11111 a111111 1 b11111 01
  1 a11111 a111111 1 b11111 02
  2 a22222 a222222 2 b22222 01
  2 a22222 a222222 2 b22222 02
  3 a33333 a333333 NULL NULL NULL
  select * from a_test a right join b_test b on a.id =b.id
  //是在inner join的结果集上加上右面表中没被选上的不相等的记录,不包含于笛卡尔乘积
  //行的左表部分每个字段都用NUll填充
  1 a11111 a111111 1 b11111 01
  1 a11111 a111111 1 b11111 02
  2 a22222 a222222 2 b22222 01
  2 a22222 a222222 2 b22222 02
  NULL NULL NULL 4 b44444 01
  select * from a_test a full outer join b_test b on a.id =b.id
  //是在innerjoin的结果集上加上左、右两面表中没被选上的不相等的记录,不包含于笛卡尔乘积
  //行的右、左表两部分每个字段都用NUll填充
  1 a11111 a111111 1 b11111 01
  1 a11111 a111111 1 b11111 02
  2 a22222 a222222 2 b22222 01
  2 a22222 a222222 2 b22222 02
  NULL NULL NULL 4 b44444 01
  3 a33333 a333333 NULL NULL NULL

  

爱华网本文地址 » http://www.aihuau.com/a/25101015/247243.html

更多阅读

中长发编发教程-不一样的马尾 马尾编发教程

头发很乱时,许多女生索性把头发随手一扎,眼不见为净,马尾人人会绑,但是完成度差很多,只要多一点巧思,就可以让家庭主妇风格马尾变身时尚职等!中长发编发教程-不一样的马尾——步骤/方法中长发编发教程-不一样的马尾 1、时尚风斜马尾  

空气中主要污染物有哪些 空气的污染物有哪些

空气中主要污染物有哪些——简介在干洁的大气中,痕量气体的组成是微不足道的。但是在一定范围的大气中,出现了原来没有的微量物质,其数量和持续时间,都有可能对人、动物、植物及物品、材料产生不利影响和危害。当大气中污染物质的浓度达

Word2010中怎样添加分栏之间的分割线 word2010添加分割线

我们在使用Word2010编辑文档时,有时需要根据实际需要为分档设置分栏,并且需要在分栏之间添加一条分割线。本篇经验就来介绍一下为文档分栏并添加分割线的方法。Word2010中怎样添加分栏之间的分割线——工具/原料Word 2010Word2010中

Word中插入脚注和尾注的技巧 word如何脚注和尾注

Word中插入脚注和尾注的技巧——简介在编辑文章时,常常需要对一些从别的文章中引用的内容、名词或事件加注释。Word提供的插入脚注和尾注功能,可以在指定的文字处插入注释。脚注和尾注实现了这一功能唯一的区别是:脚注是放在每一页面的

SQL中EXISTS怎么用 sql exists in的区别

SQL中EXISTS怎么用——简介EXISTS用于检查子查询是否至少会返回一行数据,该子查询实际上并不返回任何数据,而是返回值True或FalseSQL中EXISTS怎么用——方法/步骤SQL中EXISTS怎么用 1、EXISTS用于检查子查询是否至少会返回一行数据,该

声明:《sql中笛卡尔乘积 集合的笛卡尔乘积》为网友暮雪白头分享!如侵犯到您的合法权益请联系我们删除