• [数据库笔记]关系代数(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) !!!

    练习:

      

  • 相关阅读:
    分布式集群系统下的高可用session解决方案
    Google大数据三篇著名论文中文版
    12款免费与开源的NoSQL数据库介绍
    揭密Node.js 盛行的因由(转载)
    lion.ec开源框架简介(原创)
    2.2 Hadoop Studio 使用 [Hadoop学习笔记]
    spring3.2+ehcache 注解使用
    Venus 是一个简单的、高性能、高并发能力的java 开源Remoting框架
    ZooKeeper原理分析
    Netty系列之Netty高性能之道(转载InfoQ)
  • 原文地址:https://www.cnblogs.com/liuliu5151/p/10952981.html
Copyright © 2020-2023  润新知