永发信息网

谁能给我详细的解释下在sql中的笛卡尔是怎么样的!

答案:2  悬赏:30  手机版
解决时间 2021-03-14 19:16
  • 提问者网友:泪痣哥哥
  • 2021-03-13 19:19
在sql中的,数据库设计中,关系模式中的数据连接时怎么回事,那个连接中:等值连接和自然连接中的笛卡尔是怎么用的!求详细点!急求!!!!!!!
最佳答案
  • 五星知识达人网友:封刀令
  • 2021-03-13 20:00
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
  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
  //是在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
  3 a33333 a333333 NULL NULL NULL
全部回答
  • 1楼网友:逐風
  • 2021-03-13 21:12
笛卡尔乘积就是说 把所有的组合都出现一次
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯