发布网友 发布时间: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.笛卡尔积定义热心网友 时间:2022-05-02 10:44
笛卡儿积就是把两个(多个)表的结果集相乘追答两个结果集无关联相匹配,因为没有关联条件,所以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条啦。