问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

数据库笛卡尔积

发布网友 发布时间:2022-04-28 10:41

我来回答

5个回答

懂视网 时间:2022-05-02 10:43

package com.opensource.util;

import java.util.Arrays;

public class DecareProduct {
 
 public static void main(String[] args) {
 
 //使用二维数组,模拟student表
 String[][] student ={
  {"0","jsonp"},
  {"1","alice"}
 };
 
 //使用二维数组,模拟student_subject表
 String[][] student_subject2 ={
  {"0","0","语文"},
  {"1","0","数学"}
 };

 //模拟 SELECT * from student JOIN student_subject;
 String[][] resultTowArray1 = getTwoDimensionArray(student,student_subject2);
 //模拟 SELECT * from student_subject JOIN student;
 String[][] resultTowArray2 = getTwoDimensionArray(student_subject2,student);
 
 int length1 = resultTowArray1.length;
 for (int i = 0; i <length1 ; i++) {
  System.out.println(Arrays.toString(resultTowArray1[i]));
 }
 System.err.println("-----------------------------------------------");
 int length2 = resultTowArray2.length;
 for (int i = 0; i <length2 ; i++) {
  System.out.println(Arrays.toString(resultTowArray2[i]));
 }
 
 
 
 }
 
 
 /**
 * 模拟两张表连接的操作
 * @param towArray1
 * @param towArray2
 * @return
 */
 public static String[][] getTwoDimensionArray(String[][] towArray1,String[][] towArray2){
 
 //获取二维数组的高(既该二维数组中有几个一维数组,用来指代数据库表中的记录数)
 int high1 = towArray1.length;
 int high2 = towArray2.length;
 
 //获取二维数组的宽度(既二位数组中,一维数组的长度,用来指代数据库表中的列)
 int wide1 = towArray1[0].length;
 int wide2 = towArray2[0].length;
 
 //计算出两个二维数组进行笛卡尔乘积运算后获得的结果集数组的高度和宽度,既笛卡尔积表的行数和列数
 int resultHigh = high1 * high2;
 int resultWide = wide1 + wide2;
 
 //初始化结果集数组,既笛卡尔积表
 String[][] resultArray = new String[resultHigh][resultWide];
 
 //迭代变量
 int index = 0;
 
 //先对第二二维数组遍历
 for (int i = 0; i < high2; i++) {
  
  //拿出towArray2这个二维数组的元素
  String[] tempArray = towArray2[i];
  
  //循环嵌套,对第towArray1这个二维数组遍历
  for (int j = 0; j < high1; j++) {
  
  //初始化一个长度为‘resultWide‘的数组,作为结果集数组的元素,既笛卡尔积表中的一行
  String[] tempExtened = new String[resultWide];
  
  //拿出towArray1这个二维数组的元素
  String[] tempArray1 = towArray1[j];
  
  //把tempArray1和tempArray两个数组的元素拷贝到结果集数组的元素中去。(这里用到了数组扩容)
  System.arraycopy(tempArray1, 0, tempExtened, 0, tempArray1.length);
  System.arraycopy(tempArray, 0, tempExtened, tempArray1.length, tempArray.length);
  
  //把tempExtened放入结果集数组中
  resultArray[index] = tempExtened;
  
  //迭代加一
  index++;
  }
 }
 
 return resultArray;
 
 
 }

}
技术分享

执行结果:

技术分享

由笛卡尔积现象分析数据库表的连接

标签:宽度   src   product   htm   limit   乘法   sql   加载   select   

热心网友 时间:2022-05-02 07:51

所谓笛卡尔积,通俗点说就是指包含两个集合中任意取出两个元素构成的组合的集合.

举例子,假设R中有元组M个,S中有元组N个,则R和S的笛卡尔积中包含的元组数量就是M*N.这个规则可以向多个关系扩展.
上面的例子的笛卡尔积结果就是tj_angela给出的(ac,ad,bc,bd)
属于的含义就是R是d1*d2*……*dn子集,这里其实是相等的.

热心网友 时间:2022-05-02 09:09

1.笛卡尔积定义

笛卡尔积在SQL中的实现方式既是交叉连接(Cross Join)。所有连接方式都会先生成临时笛卡尔积表,笛卡尔积是关系代数里的一个概念,表示两个表中的每一行数据任意组合,上图中两个表连接即为笛卡尔积(交叉连接)

在实际应用中,笛卡尔积本身大多没有什么实际用处,只有在两个表连接时加上*条件,才会有实际意义

MySQL的多表查询(笛卡尔积原理)
先确定数据要用到哪些表。
将多个表先通过笛卡尔积变成一个表。
然后去除不符合逻辑的数据(根据两个表的关系去掉)。
最后当做是一个虚拟表一样来加上条件即可。
注意:列名最好使用表别名来区别。

笛卡尔积

Demo:

左,右连接,内,外连接

l 内连接:

要点:返回的是所有匹配的记录。

l 外连接有左连接和右连接两种。

要点:返回的是所有匹配的记录 外加 每行主表外键值为null的一条记录。辅表所有列为null值。

select * from a left join b on a.x=b.x order by a.x //左外连接或称左连接
select * from a right join b on a.x=b.x order by a.x //右外连接或称右连接
select子句顺序

子句

说明

是否必须使用

select

要返回的列或表示式



form

从中检索数据的表

仅在从表选择数据时使用

where

行级过滤



group by

分组说明

仅在按组计算聚集时使用

having

组级过滤



order by

输出排序顺序



limit

要检索的行数

热心网友 时间:2022-05-02 10:44

笛卡儿积就是把两个(多个)表的结果集相乘
R表中的每一条数据与S表中的每一条数据匹配并呈现,数量级就是两表的成绩,属性为列相加追问还是不懂,为什么R*S中会多出一个d还有2

追答两个结果集无关联相匹配,因为没有关联条件,所以R中每条数据要与S中每条数据进行匹配
R中的a,1,c这条数据要与S中的两条数据进行匹配,最后的结果就是a,1,c看似是重复的
这样R中3条数据,S中2条,最后的结果就是3*2=6条
而列方面直接合并,这个没什么懂不懂的,记住就行了

热心网友 时间:2022-05-02 12:35

通俗易懂点说 元数 就是有几种数据,基数就是有几条数据。R*S R中三条每条都与S中两条对应生成一条。所以就是6条啦。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
玩GTA4时我的画面看别的地方都是黑的就只有我这一小范围能看的见!怎么... 金貂换酒的意思金貂换酒的近反义词 4.5×9/9等于几分之几? 9-3×5/9怎么计算? 0.3*5/9等于几分之几? "过了这个村就没了这个店 "的下一句是什么? 过了这个村没这个店下一句怎么接搞笑 过了这个村就没有这个店的下一句 “人权”是什么意思? 袁天沛个人作品 如何使用淘金币 笛卡尔积是什么意思? 北京淘咚咚网络科技有限公司怎么样? 数据库笛卡尔积是什么意思? 什么是笛卡尔积?怎么计算啊 淘大熊邀请码怎么获得? 什么是笛卡尔积?笛卡尔积是什么意思? 淘菜菜团长邀请码在哪里看 如何获得淘优卖的邀请码? 淘咚咚邀请码 咚咚优享邀请码从哪里可以获的? 美的燃气热水器16L在燃烧时外面燃气管冒烟厉害正常吗? 美的燃气热水器HS与HC的区别 HEBE看的一本书 林俊杰对田馥甄爱得死去活来的,田馥甄为何狠心拒绝他? SHE一共出了多少磁带? HEBE的声线变化 S.H.E的歌一共有多少,其中专辑,新歌又有多少 she 这三个女孩的真正名字叫什么? S.H.E 发行过的所有专辑(包括影音馆) 笛卡尔积是什么,详细解答一下,最好再举例 淘800的积分有什么用途?如何获取淘800积分? 如何在一淘中获得集分宝 什么是笛卡儿积 淘咚咚的折扣是真实的吗!淘咚咚里面同一家店铺比淘宝优惠50元,会不会对账户有影响 编程语言中,差、交、并、自然连接、选择、投影、笛卡尔积分别是什么意思? SQL中笛卡尔积有什么用 如何登陆一淘 数据库:笛卡尔乘积到底是域乘域,还是元组乘元组? 笛卡尔积的绝对值是什么意思? A 比如 |A X B| = |A| 点乘 |B|. 这个是什么意思?笛卡尔积的绝对值代表什么? 卡迪尔积是什么意思 在笛卡尔积中,元数与元组个数是相同的意思吗 如何避免查询结果出现笛卡尔积? sql问题笛卡尔积问题。 (学习中被鄙视)关于数据库 笛卡儿积的计算 笛卡尔积与投影的关系 乘积是什么意思 臧克家简介? 闻一多简介+臧克家简介 臧克家的个人简介