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) !!!

    练习:

      

  • 相关阅读:
    【SQL触发器】类型 FOR 、AFTER、 Instead of到底是什么鬼
    Oracle两种临时表的创建与使用详解
    oracle 临时表(事务级、会话级)
    oracle存储过程游标的使用(批号分摊)
    delphi FastReport快速入门
    Vue 表情包输入组件的实现代码
    一个基于 JavaScript 的开源可视化图表库
    浅淡Webservice、WSDL三种服务访问的方式(附案例)
    记录一下遇到的问题 java将json数据解析为sql语句
    Oracle词汇表(事务表(transaction table)”)
  • 原文地址:https://www.cnblogs.com/liuliu5151/p/10952981.html
Copyright © 2011-2022 走看看