精华内容
下载资源
问答
  • I have seen that natural join is just combination of selection and cartesian product but in various websites its said to be as combination of projection and cartesian product and both are completely d...

    I have seen that natural join is just combination of selection and cartesian product but in various websites its said to be as combination of projection and cartesian product and both are completely different so which definition should corresponds to it more exactly?

    解决方案

    There are many different versions of "relational algebra" that differ even in their notion of "relation". There's no one PRODUCT or NATURAL JOIN.

    Some versions of the relational algebra have relation headings that are lists of attribute names. PRODUCT outputs an attribute for every input list element. If there's a NATURAL JOIN then its result will be like first doing PRODUCT, then RESTRICTing/SELECTing on equality of pairs of same-named attributes, then PROJECTing out one attribute of each pair. They give the same result when there are no shared attribute names. PRODUCT works for any two inputs but NATURAL JOIN might be undefined when an input has duplicate attribute names.

    Some versions of the relational algebra have relation headings that are sets of attribute names. (Elements are unordered & unique.) The result of NATURAL JOIN has a heading that is the union of the input headings. (Tuples have one copy each of the attribute names common to both inputs & one copy each of the attribute names unique to one input.) It returns all tuples with that heading that can be made by combining a tuple from each input table. That is regardless of how many common attribute names there are, including zero. PRODUCT is defined only when the inputs share no attribute names but otherwise acts like NATURAL JOIN. PRODUCT's role is to confirm that you expect that there are no shared attribute names. When all the column names are common, that is a kind of INTERSECTION.

    All this is regardless of PKs, UNIQUE, FKs & other constraints.

    展开全文
  • I am studying for exams and am failing to find a solid criteria by which I can determine if the Cartesian Product x is to be used or if Natural Join |X| is to be used.I had come up with a rough guide ...

    I am studying for exams and am failing to find a solid criteria by which I can determine if the Cartesian Product x is to be used or if Natural Join |X| is to be used.

    I had come up with a rough guide that:

    "If you need to project an attribute that has the same name as an attribute in the table to be joined you must use x and state the table names to be projected: tableA.colname1 = tableB.colname1"

    This however doesn't follow some of the solutions in my notes and my lecturer seems to use x with the above convention or |x| interchangeably.

    Does anyone have a rule that can be followed to define use of one over the other?

    Take for example this schema (only schema related to the question quoted for brevity):

    takes(ID, course_id, sec_id, semester, year, grade)

    student(ID, name, dept_name, tot_cred)

    Q) Find the name of all students who took courses that were taught in either Spring 2011 or Autumn 2011.

    My answer attempt:

    π name(σ semester="Spring" ^ year=2011(takes ⋈ student)) ∪ π name(σ semester="Autumn" ^ year=2011(takes ⋈ student))

    Actual answer:

    π name(σ semester="Spring" ^ year=2011 ^ takes.ID=student.ID(takes x student)) ∪ π name(σ semester="Autumn" ^ year=2011 ^ takes.ID=student.ID(takes x student))

    Can anyone provide a reason as to why?

    In my mind the Natural Join would take care of the takes.ID=student.ID?

    解决方案

    A natural join, as I understand it, is a projected, filtered Cartesian product:

    You take the Cartesian product, then

    select it, so that the values in columns of the same name have the same value, and

    project it, so that all columns have distinct names.

    Under this assumption, your answer is isomorphic to the actual answer.

    To see this, you might want to expand the natural join to the above sequence of operators, and float them around using the laws of relational algebra. You'll see that the projection disappears due to the projection to name, and the selection criterion is fused with the selection above. You'll end up with exactly the same tree as the actual answer, even though you never changed the meaning of your own answer!

    I can think of one reason why your lecturer uses these concepts interchangeably: your lecturer wants you to understand that these concepts can be used interchangeably, because "the natural join is just a shortcut" (though that's debatable).

    展开全文
  • 关系代数中连接是一个重要而且容易混乱的知识点,我通过查阅很多资料总结了与连接有关的知识点,并发现了他们之间的关系。本文通过理论知识先了解连接相关的重要名词意思,然后通过画图来理解画连接的思路以及他们...

    摘要:微信搜索【三桥君
    前言:关系代数中的连接是一个重要而且容易混乱的知识点,我通过查阅很多资料总结了与连接有关的知识点,并发现了他们之间的关系。本文通过理论知识先了解连接相关的重要名词意思,然后通过画图来理解画连接的思路以及他们之间的关系。

    理论知识

    定义:

    一、笛卡儿积
    这里
    二、θ连接
    在这里插入图片描述
    (一)等值连接
    在这里插入图片描述
    (二)非等值连接
    θ不为“=”的连接运算称为非等值连接。

    三、自然连接
    在这里插入图片描述
    五、外连接
    外连接分为三种:左外连接,右外连接,全外连接。如果把舍弃的元组也保存在结果关系中,而在其他属性上空值,那么这种连接就叫外连接。
    (一)左外连接(Left outer join/ left join)
    如果只把左边关系R要舍弃的元组在自然连接的基础上保留就叫左外连接。
    (二)右外连接(rightouter join/ right join)
    如果只把右边关系S中要舍弃的元组在自然连接的基础上保留叫右外连接。
    (三)全外连接(fullouter join/ full join)
    左表和右表都不做限制,所有的记录都显示,两表不足的地方用null 填充。

    画图

    题目
    在这里插入图片描述
    一、笛卡儿积
    在这里插入图片描述
    二、θ连接
    (一)等值连接
    在这里插入图片描述
    (二)非等值连接
    在这里插入图片描述
    三、自然连接
    在这里插入图片描述
    五、外连接

    在这里插入图片描述


    文章整理不易,如有帮助请点赞关注支持,谢谢!微信搜索【三桥君】,回复【关注】有我准备的一份资源大礼包。后续持续更新~~~

    展开全文
  • MapReduce关系代数运算——自然连接

    千次阅读 2020-01-08 19:41:29
    MapReduce关系代数运算——自然连接 关系沿用之前的R。 创建两个文件 表1 student id name sex age 1 Amy female 18 2 Tom male 19 3 Sam male 21 4 John male ...

    MapReduce关系代数运算——自然连接

    关系沿用之前的R。

    创建两个文件

    表1 student
    idnamesexage
    1Amyfemale18
    2Tommale19
    3Sammale21
    4Johnmale19
    5Lilyfemale21
    6Rosefemale20
    表2 grade
    idclassgrade
    1Math89
    2Math75
    4English85
    3English95
    5Math91
    5English88
    6Math78
    6English99
    2English80

    MapReduce程序设计

    • NaturalJoinMap
    import org.apache.hadoop.io.IntWritable;
    import org.apache.hadoop.io.LongWritable;
    import org.apache.hadoop.io.Text;
    import org.apache.hadoop.mapreduce.Mapper;
    import org.apache.hadoop.mapreduce.lib.input.FileSplit;
     
    public class NaturalJoinMap extends Mapper<LongWritable, Text, IntWritable, Text> {
     
        private String fileName = "";
        private Text val = new Text();
        private IntWritable stuKey = new IntWritable();
     
        protected void setup(Context context) throws java.io.IOException, InterruptedException {
            FileSplit fileSplit = (FileSplit) context.getInputSplit();
            fileName = fileSplit.getPath().getName();
        };
     
        protected void map(LongWritable key, Text value, Context context) throws java.io.IOException, InterruptedException {
            String[] arr = value.toString().split(" ");
            stuKey.set(Integer.parseInt(arr[0]));
            val.set(fileName + " " + value.toString());
            context.write(stuKey, val);
        };
     
    }
    
    • NaturalJoinReduce
    import java.util.ArrayList;
    import java.util.List;
     
    import org.apache.hadoop.io.IntWritable;
    import org.apache.hadoop.io.NullWritable;
    import org.apache.hadoop.io.Text;
    import org.apache.hadoop.mapreduce.Reducer;
     
    public class NaturalJoinReduce extends Reducer<IntWritable, Text, Text, NullWritable> {
     
        private Text student = new Text();
        private Text value = new Text();
     
        protected void reduce(IntWritable key, Iterable<Text> values, Context context) throws java.io.IOException, InterruptedException {
            List<String> grades = new ArrayList<String>();
            for (Text val : values) {
                if (val.toString().contains("student")) {
                    student.set(studentStr(val.toString()));
                } else {
                    grades.add(gradeStr(val.toString()));
                }
            }
            for (String grade : grades) {
                value.set(student.toString() + grade);
                context.write(value, NullWritable.get());
            }
        };
     
        private String studentStr(String line) {
            String[] arr = line.split(" ");
            StringBuilder str = new StringBuilder();
            for (int i = 1; i < arr.length; i++) {
                str.append(arr[i] + " ");
            }
            return str.toString();
        }
     
        private String gradeStr(String line) {
            String[] arr = line.split(" ");
            StringBuilder str = new StringBuilder();
            for (int i = 2; i < arr.length; i++) {
                str.append(arr[i] + " ");
            }
            return str.toString();
        }
     
    }
    
    • NaturalJoin
    import java.io.IOException;
     
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.fs.Path;
    import org.apache.hadoop.io.IntWritable;
    import org.apache.hadoop.io.NullWritable;
    import org.apache.hadoop.io.Text;
    import org.apache.hadoop.mapreduce.Job;
    import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
    import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
     
    public class NaturalJoin {
     
        public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
            if (args == null || args.length != 2) {
                throw new RuntimeException("请输入输入路径、输出路径");
            }
            Configuration conf = new Configuration();
            Job job = Job.getInstance(conf);
            job.setJobName("NaturalJoin");
            job.setJarByClass(NaturalJoin.class);
     
            job.setMapperClass(NaturalJoinMap.class);
            job.setMapOutputKeyClass(IntWritable.class);
            job.setMapOutputValueClass(Text.class);
     
            job.setReducerClass(NaturalJoinReduce.class);
            job.setOutputKeyClass(IntWritable.class);
            job.setOutputValueClass(NullWritable.class);
     
            FileInputFormat.addInputPaths(job, args[0]);
            FileOutputFormat.setOutputPath(job, new Path(args[1]));
            System.exit(job.waitForCompletion(true) ? 0 : 1);
        }
     
    }
    
     
    

    运行

    像之前的WordCount一样将代码打包出来,生成NaturalJoin .jar文件:

    hadoop jar NaturalJoin .jar /input /output relationB
    

    输出结果:
    输出结果
    欢迎查看我的博客:Welcome To Ryan’s Home

    展开全文
  • 关系代数运算之连接运算

    万次阅读 多人点赞 2019-04-20 18:28:17
    1.关于连接的理解:连接也称为θ连接,关系R与关系S的连接运算是从两个关系的笛卡尔积选取属性间满足一定条件的...2.自然连接:是一种特殊的等值连接,比较两个关系中分量相同的属性组,并且在结果把重复的属性...
  • 这是关于“如何画关系代数的连接图?(数据库关系代数中笛卡儿积、θ连接、等值连接、自然连接、外连接)”的草稿图
  • 等值连接 :inner join可以对同一张表进行 等值连接 不会删除重复的列 外连接:左外连接 右外连接 全外连接 自然连接: 自动以相等的列作为连接点 会删除重复的列
  • 关系代数运算之连接

    万次阅读 多人点赞 2017-08-14 19:54:42
    1.关于连接的理解:分别在关系R和S取一列数据,比较所取两列的数据,如果两列数据有相同的,就将数据相同的那一行数据保留,其余行舍弃。如下例: 表a表示
  • 1. 笛卡尔积 ...在等值联接(以公共属性值相等为条件)的基础上再行投影操作,去掉S的公共属性列,当两个关系没有公共属性时,自然连接就转化成笛卡尔积 直接上图 Student表: Score表: 1. 笛卡...
  • 数据库关系代数运算之连接

    万次阅读 2018-06-26 15:03:24
    (1) θ联接 (从R和S的笛卡儿乘积选取满足条件“iθj”的元组•(2)自然联接(naturaljoin) 两个关系R和S的自然联接操作具体计算过程如下: ① 计算R×S ; ② 设R和S的公共属性是A1,…,AK,挑选R×S满足R...
  • 关系代数——连接

    2015-06-08 22:35:00
    关系代数——连接 文章原始出处、作者信息和本声明。否则将追究法律责任。http://leander.blog.51cto.com/2911819/1094812 本节主要举例说明连接运算,包括内连接和外连接连接(或内连接)的结果是由组合...
  • 数据库关系代数详解

    千次阅读 多人点赞 2021-02-26 16:35:55
    在学习关系代数的时候,我们脑海要时刻拥有一张表格,还有一些表格的参数,这张表格如下: 比如说我们每个人都见过成绩单,牢记以下的比喻 R就为整张成绩单 R[A1, A2, A3,…Ai] = R[语文,英语,数学……学科...
  • 关系代数

    千次阅读 2018-07-11 18:30:56
    关系代数 概述 关系代数是一种抽象的查询语言,用对关系的运算来表达查询,作为研究关系数据语言的数学工具。 关系代数的运算对象是关系,运算结果亦为关系。 关系代数的运算 普通的集合运算 并、...
  • 计算机二级:关系代数运算计算机二级:关系代数运算 作者: 日期: 公共基础专题探究一一关系代数运算 序高频考点 号 1自然连接一种特殊的等值连接它要求两个关系进行比较的分量必须是 相同的属性组,并且在结果把...
  • 关系代数问:为何称为代数?答:因为存在操作符和操作数,操作数为表,操作符为交、并等;关系代数有分为基于集合的关系代数和基于包的关系代数关系代数的基本操作:并、...自然连接2. θ连接3.重命名表达式树基于...
  • 连接 连接运算符用来连接相互之间有联系的两个关系,从而产生一个新的关系。这个过程由连接属性(字段)来实现。 连接又分为内连接和外连接: 内连接:在连接结果会舍弃掉不满足...等值连接和自然连接的区别..
  • 关系代数连接 (Join)和除(Division)

    千次阅读 2020-05-23 20:53:59
    关系代数连接 (Join)和除(Division) ...关系代数的“连接”的等价定义还有许多,如:连接(join,联接)是从两个分别为n, m目的关系R和S的广义笛卡尔积选取满足给定条件F的元组组成新的关系称为R和S的连接,.
  • 文章目录关系数据库关系代数关系代数的分类及其运算符传统的集合运算专门的关系运算 关系数据库 关系代数 关系模型与其它模型相比,最有特色的是它的数据库语言 这种语言灵活方便、表达能力和功能都很强 目前关系...
  • 关系代数运算When working with the relational model, we have 2 groups of operations we can use. 使用关系模型时 ,我们可以使用2组操作。 The first is called relational algebra, and it’s a procedural ...
  • 关系代数关系代数关系代数运算的基本操作为什么要提出关系代数关系代数运算的约束集合操作:并操作差操作笛卡尔积纯关系操作选择投影小结关系代数的扩展操作交操作θ连接等值连接自然连接小结关系代数表达式的书写...
  • 关系模型之关系代数

    2020-12-15 21:35:34
    关系模式由三部分组成,一是以表的形式组织数据,二是表与表之间所发生的操作,三是约束条件,即实体完整性、参照完整性和用户自定义完整性,关于第二点,上次我们说了他主要分为两大类,即基于集合的关系代数和基于...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,249
精华内容 3,699
关键字:

关系代数中的自然连接