• [数据库笔记]关系代数(Relational Algebra)


    Unary Operations(一元操作): 单表操作

    • 选择(Selection) ==>相当于SQL语句中的WHERE

    语法:


    举例:

    表示从Students这个表中选出course = 'CM'的信息,结果为:

    等价于下面的SQL语句:

    SELECT * FROM Students
    WHERE course = 'CM';
    • 投影(Projection) ==>相当于SQL语句中的SELECT

    语法:

    举例:

    表示从Students这个表中选出student# 和name的信息,结果为:

    等价于下面的SQL语句:

    SELECT student#, name FROM Students;
    • 选择和投影的结合==>相当于SQL语句中的SELECT和WHERE的结合

    语法:

    举例:

    表示从Students这个表中选出student# 和name这几个columns,使得course = 'CM' ,结果为

    等价于下面的SQL语句:

    SELECT student#, name FROM Students
    WHERE course = 'CM';
    • 重命名(Rename) ==>相当于SQL语句中的AS子句的职能

    语法:

    ρ(A,B) 表示将B更名为A

    Binary Operations(二元操作):不同结构的两表操作

    • 笛卡尔乘积(Cartesian Product)==>等价于SQL语句中两个表进行笛卡尔积(全匹配)得到的结果,即SQL中进行多表连接时不指定连接条件的情况

    语法:

           表名R X 表名S

    举例:

      表示表格Students中的每一个row都要concatenation表格Courses中的每一个row, 结果为:

    等价于下面的SQL语句:

    SELECT *
    FROM Students, Courses;
    • Theta连接(Theta Join)==>是带限定条件的笛卡尔乘积

    语法:

    举例:

    表示表格Students中的每一个row都要concatenation表格Courses中的每一个row,且student# = 200。结果为:

    等价于下面的SQL语句:

    SELECT * FROM Students, Courses
    WHERE student# = 200;
    • 内部连接Inner Join (Equijoin)==>是带限定条件(其限定条件是R表格的primary_key = S表格的oreign_key)的笛卡尔乘积

    语法:

    举例:

    表示表格Students中的每一个row都要concatenation表格Courses中的每一个row,且Student.course = Courses.course#。结果为:

     等价于下面的SQL语句:

    Select *
    From Students, Courses
    Where course=course#;
    • 自然连接(Natural Join)==>去重之后的内部连接(Inner Join); 相当于SQL语句中的NATURAL JOIN

    显然,上述内部连接Inner Join之后的表格有冗余

    语法:

     

    R1先得出Inner Join结果

    R2选出R1去重后留下的columns: student#, Students.name, course, Courses.name

     等价于下面的SQL语句:

    Select student#, Students.name, course, Courses.name
    From Students, Courses
    Where course=course#;

    小结: 由此可以看出笛卡尔乘积(Cartesian Product)-> Theta连接(Theta Join) -> 内部连接Inner Join (Equijoin)->自然连接(Natural Join) 范围在逐步逐步的缩小。

    • 外部连接(Outer Join)==> 相对于内部连接Inner Join 只生成匹配的行,外部连接允许输出并不完全匹配的行
    • 左外连接(Left Outer Join)==>表示左边表的全部行输出,右边只输出匹配行

    语法:

         左外连:⟕ 

    举例:

    表示Students左外连接Courses,其中Student.course = Courses.course#。 结果为:

     等价于下面的SQL语句:

    Select *
    From Students, Courses
    Where course = course#(+)
    • 右外连接(Right Outer Join)==>表示右边表的全部行输出,左边只输出匹配行

    语法:

         右外连:⟖

    举例:

    表示Students右外连接Courses,其中Student.course = Courses.course#。 结果为:

     等价于下面的SQL语句:

    Select *
    From Students, Courses
    Where course(+) = course#

    Set Operations(集合操作):相同结构的两表操作

    • 并集(Union) ==>相当于SQL中UNION关键字的职能

    语法:

      

    举例:

    R ∪ S 得到结果是: 

    • 交集(Intersection) ==>相当于SQL语句中INTERSECT职能

    语法:

      

    举例:

    R ∩ S 得到结果是:

    • 差集(Difference) ==>相当于SQL语句中的EXCEPT

    语法:

      

    举例:

    R - S 得到结果是:

    规定R - S, 输出第一个表格的row(s) !!!

    练习:

      

  • 相关阅读:
    轮播图2
    点击按钮切换轮播图
    轮播图
    2016.5.5_十进制转二进制【ABAP】
    2016.4.26_longtext长文本【ABAP】
    2016.4.26_动态内表【ABAP】
    2016.4.26_下载abap代码【ABAP】
    2016.4.15_debug小技巧【ABAP】
    2016.4.1_js向controller传数据【笔记】
    2016.3.21_TABLE CONTROL【ABAP】
  • 原文地址:https://www.cnblogs.com/liuliu5151/p/10952981.html
Copyright © 2020-2023  润新知