关系代数与sql语句

关系代数定义:

          关系代数是以关系为运算对象的一组高级运算的集合。关系代数的运算有集合运算(集合<表>与集合<表>之间的运算)和关系运算(集合<表>内部的运算)

集合运算:

       并运算:  R U S              差运算:  R - S                 交运算:   R  ∩ B            笛卡儿积: R  x  S  (组合运算)

       并,交,差(是对各集合元组的重新组合;要求:参加集合操作的各结果表的列数必须相同,对应项的数据类型也必须相同)

 

关系运算:

          选择  {\color{Blue} \sigma },       σF(R)={t|t∈R∧F(t)=True}σF(R)={t|t∈R∧F(t)=True}                ------水平分割表

          投影  {\color{Blue} \pi },       πA(R)={t[A]|t∈R}πA(R)={t[A]|t∈R}                                         -------垂直分割表

          连接 【/* {\color{Blue} \theta }这里是比较运算符 */,{\color{Blue} \theta }为大于,小于的连接叫比较连接,{\color{Blue} \theta }为等于的连接叫等值连接,自然连接 /*它是等值连接的特殊情况,结果集中公共的属性只保留一个------去除重复列。两表关联,外键主建出现在同一集合里(外键和主键就是重复的列,要去除一列),2*/自然theta链接   =   σ XθY(R×S),扩展的还有外连接 】

         等值连接和自然连接的区别

sql语句的*使用的是等值连接:

sql语句要使用自然连接,需要自己手动指定列(去除重复列):自然连接的例子:

 

      自然连接和外连接的区别:(d:左外连接,f:全连接)

    除运算 ÷

下面以电力抢修工程数据库为例:

抢修工程计划表Salvaging,配电物资库存记录表Stock,配电抢修物资领料出库表Out_stock

查询说明: 

结果:

关系代数总结:(先选择运算,再笛卡尔积,最后投影,选择)

 

sql语句连接查询:

        1.连接查询主要包括

               等值连接查询(比较运算符为“ = ”),自然连接查询,非等值连接查询(比较运算符为其他的连接查询),自身连接查  询,外连接查询和复合条件连接查询 (多个连接条件)

        2.连接查询执行过程:

            从概念上讲,DBMS,执行连接操作的过程是:首先在表1中找到第一个元组,然后从头开始扫描表2,逐一查找满足连接条件的元组,找到后将表一中的第一个=元组与该元祖拼接起来,形成结果表中的一个元组,表2全部查找完后再找表1中的第2个元组,然后重头开始扫描表2,逐一查找满足连接条件的元组,找到后将表1中的第2个元组与该元组拼接起来,形成结果表中的一个元组,重复上述操作,直到表1中的全部元组都处理完毕为止

         3.外连接查询:

             左外连接:为右边的表(副表)增加一个万能的行,该行全部由空值组成,它可以和左边的表(主表)中不满足连接条件的元组进行连接,由于这个万能行的各列全部是空值,因此在本例中的连接结果中有一行来自副表的属性值全部是空值【left join.. on是left outer join...on的缩写】

             

      4.自身连接查询:

          为要自身查询的表取两个别名就OK了

         查询领取了部门1的物资又领取了部门2的物资的员工姓名

        

     5.集合查询:(mysql,支持UNION  关键字,不支持INTERSECT----用 INNER JOIN ...ON() 和 EXCEPT关键字-----用where..not in(),where exists(select *.....)查的是内层查询是否有返回值,列明用*,给出具体的列明无意义)

         SELECT Emp_name FROM employee WHERE supplies_id='D02'
         UNION  |  INTERSECT  |  EXCEPT
         SELECT Emp_name FROM employee WHERE supplies_id='D01'

 

                    

         

  • 21
    点赞
  • 117
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值