zoukankan      html  css  js  c++  java
  • [数据库笔记]关系代数(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) !!!

    练习:

      

  • 相关阅读:
    ArrayList的几种初始化方法
    Java中date和calendar的用法
    Android中XML的命名空间、自定义属性
    Android中shape属性详解
    五分钟学GIS | 快速生成地图瓦片秘籍
    adb 提示adb server version(31) doesn't match this client(40) 解决办法
    mysql @value := 用法
    Mysql中(@i:=@i+1)的作用
    $.ajax()方法详解
    最少代码实现购物车所有功能
  • 原文地址:https://www.cnblogs.com/liuliu5151/p/10952981.html
Copyright © 2011-2022 走看看