精华内容
下载资源
问答
  • 利用数据库进行表达式运算

    千次阅读 2010-07-21 17:26:00
    正常情况下来了一串表达式,首先需要对表达式进行解析成逆波兰式,然后再通过堆栈来完成表达式运算,现在数据库几乎遍及所有运行系统,我们可以通过数据库的存储过程来完成表达式运算,再不用自己费心费神...

    正常情况下来了一串表达式,首先需要对表达式进行解析成逆波兰式,然后再通过堆栈来完成表达式的运算,现在数据库几乎遍及所有运行系统,我们可以通过数据库的存储过程来完成表达式的运算,再不用自己费心费神了。(下面采用的环境:SQL 2000 + C#)

     

    存储过程:

    CREATE PROCEDURE SYS_CALCULATE(
     @EXPRESS VARCHAR(50),
     @RESULT  FLOAT OUTPUT)
    AS
    BEGIN
     SET @RESULT = 0
     DECLARE @SQL NVARCHAR(256)
     SET @SQL = 'SELECT @RESULT=' + @EXPRESS
     
     EXEC SP_EXECUTESQL @SQL , N'@RESULT FLOAT OUTPUT' , @RESULT OUTPUT
    END

    调用存储过程进行数值运算:

        public enumErrorCode Calculate(string strExpress, out float fResult)
        {
            try
            {
                SqlConnection conn;
                if (ConnectDB(out conn))
                {
                    SqlCommand command = new SqlCommand("SYS_CALCULATE", conn);
                    command.CommandType = CommandType.StoredProcedure;
                    command.Parameters.Add(new SqlParameter("EXPRESS", strExpress));
                    SqlParameter param1 = new SqlParameter("RESULT", SqlDbType.Float);
                    param1.Direction = ParameterDirection.Output;
                    command.Parameters.Add(param1);
                    command.ExecuteNonQuery();

                    fResult = float.Parse(param1.Value.ToString());
                    conn.Close();
                    return enumErrorCode.enumSuccess;
                }
                else
                {
                    fResult = 0;
                    return enumErrorCode.enumConnectError;
                }
            }
            catch (SqlException e)
            {
                fResult = 0;
                return enumErrorCode.enumException;
            }
        }

    展开全文
  • 数据库关系代数表达式学习

    万次阅读 多人点赞 2018-01-14 17:15:15
    关系代数是关系数据库系统查询语言的理论基础。很有必要学习一下,有些是用代数表达式很方便的东西,用SQL写出来还是挺麻烦的,并不是想象当中那么直接。   一、关系代数的9种操作:    关系代数中...

    关系代数是关系数据库系统查询语言的理论基础。很有必要学习一下,有些是用代数表达式很方便的东西,用SQL写出来还是挺麻烦的,并不是想象当中那么直接。
     
    一、关系代数的9种操作:
     
        关系代数中包括了:并、交、差、乘、选择、投影、联接、除、自然联接等操作。
     
    五个基本操作:
        并(∪)、差(-)、笛卡尔积(×)、投影(π)、选择(σ)
     
    四个组合操作:
        交(∩)、联接(等值联接)、自然联接(RcrossS)、除法(÷) 
    注2:等值连接表示先做笛卡尔积(×)之后,对相应列进行选择或等值关联后的结果(仅筛选行、不筛选列)
    注2:自然连接表示两个关系中若有相同名称的属性,则自动作为关联条件,且仅列出一列
     
     
    二、关系代数表达式:
     
        由关系代数运算经有限次复合而成的式子称为关系代数表达式。这种表达式的运算结果仍然是一个关系。可以用关系代数表达式表示对数据库的查询和更新操作。
     
     
    三、举例说明:
     
        设教学数据库中有3个关系:

        学生关系S(SNO,SNAME,AGE,SEX)
        学习关系SC(SNO,CNO,GRADE)
        课程关系C(CNO,CNAME,TEACHER)
     
     
    (1) 检索学习课程号为C2的学生学号与成绩
    ------------------------------------
    SELECT SNO,GRADE
      FROM SC
    WHERE CNO='C2'
    ------------------------------------
    π SNO,GRADE(σCNO='C2'(SC))
    ************************************
     
     
    (2) 检索学习课程号为C2的学生学号与姓名
    ------------------------------------
    SELECT SC.SNO,S.SNAME
      FROM SC,S
    WHERE SC.SNO=S.SNO
       AND SC.CNO='C2'
    ------------------------------------
    π SNO,SNAME(σCNO='C2'(ScrossSC))
    此查询涉及S和SC,先进行自然连接,然后再执行选择投影操作。
    ----
    π SNO,SNAME(S)crossπSNO(σCNO='C2'(SC)))
    自然连接的右分量为"学了C2课的学生学号的集合"。
    此表达式比前一个表达式优化,执行起来要省时间、省空间。
    ************************************
     
     
    (3) 检索选修课程名为MATHS的学生学号与姓名 
    ------------------------------------
    SELECT SC.SNO,S.SNAME
      FROM SC,S,C
    WHERE SC.SNO=S.SNO
       AND SC.CNO=C.CNO
       AND C.CNAME='MATHS'
    ------------------------------------
    π SNO,SANME(σCNAME='MATHS'(ScrossSCcrossC))
    ************************************
     
     
    (4) 检索选修课程号为C2或C4的学生学号
    ------------------------------------
    SELECT SNO
      FROM SC
    WHERE CNO='C2'
        OR CNO='C4'
    ------------------------------------
    π SNO(σ CNO='C2'∨CNO='C4'(SC))
    ************************************
     
     
    (5) 检索至少选修课程号为C2或C4的学生学号
    ------------------------------------
    SELECT SA.SNO
      FROM SC AS SA,SC AS SB
    WHERE SA.SNO=SB.SNO
       AND SA.CNO='C2'
       AND SB.CNO='C4'
    ------------------------------------
    π 1(σ1=4∧2='C2'∧5='C4'(SC×SC))
    ************************************
     
     
    (6) 检索不学C2课的学生姓名与年龄
    ------------------------------------
    SELECT SNAME,AGE
      FROM S
    MINUS
    SELECT S.SNAME,S.AGE
      FROM SC,S
    WHERE SC.SNO=S.SNO
       AND SC.CNO='C2'
    (Oracle)
    ------------------------------------
    π SNAME,AGE(S)-πSNAME,AGE(σCNO='C2'(ScrossSC))
    ************************************
     
     
    (7) 检索学习全部课程的学生姓名
    ------------------------------------
    这个定义用SQL表示比较麻烦,略过
    ------------------------------------
    π SNO,CNO(SC)÷πCNO(C)
    先用除法取出选取所有课程的SNO集(除法可以理解为一个Filter)
    π SNAME(S cross (πSNO,CNO(SC)÷πCNO(C)))
    再关联S表取出SNAME
    ************************************
     
     
    (8) 检索所学课程包含S3所学课程的学生学号
    ------------------------------------
    这个定义用SQL表示比较麻烦,略过
    ------------------------------------
    π SNO,CNO(SC)÷ πCNO(σSNO='S3'(SC))
    同样运用了除法的特性
    ************************************
     
     
    (9) 将新课程元组('C10','PHYSICS','YU')插入到关系C中
    ------------------------------------
    INSERT INTO C VALUES('C10','PHYSICS','YU')
    ------------------------------------
    (C('C10','PHYSICS','YU'))
    记住该符号的用法
    ************************************
     
     
    (10) 将学号S4选修课程号为C4的成绩改为85分
    ------------------------------------
    UPDATE SC SET GRADE=85
    WHERE SNO='S4'
       AND CNO='C4'
    ------------------------------------
    (SC('S4','C4',?)('S4','C4',85))
    先用''实现DELETE功能,再用'∪'实现INSERT功能
    注意使用?来表示检索时忽略该字段值
    ************************************
     
     
    四、关系代数表达式的优化:
     
        目的:为了系统在执行时既省时间又能提高效率。
        基本策略:先做选择,运用投影去除多余属性等等。
        优化算法:语法树(尽量提前做选择操作;在每个操作后,应做个投影操作,去掉不用的属性值)
     
        例如:
     
        π SNO,SNAME(σGRADE>60(ScrossSC)) 进行优化后转换为:
        π SNO,SNAME(πSNO,SNAME(S)crossπSNO(σGRADE>60(SC)))
        --即提前做选择操作;在每个操作后,应做个投影操作,去掉不用的属性值
     
     
        又如:
     
        S(S#,SNAME,AGE,SEX)
        SC(S#,C#,GRADE)
        C(C#,CNAME,TEACHER)
     
        π CNAME,TEACHER(σSEX='女'(ScrossSCcrossC)) 进行优化后转换为:
        πCNAME,TEACHER(CcrossπC#(πS#,C#(SC)crossπS#(σSEX='女'(S))))
     
        优化前和优化后的语法树如下所示:
     
        syntax_tree
    展开全文
  • 数据库关系代数表达式

    千次阅读 2017-08-23 15:59:47
    一、关系代数的9种操作: 关系代数中包括了:并、交、差、乘、选择、投影、联接、除、自然联接等操作。 五个基本操作: 并(∪)、差(-)、笛卡尔积(×)、投影(σ)、选择(π) 四个组合操作: 交(∩)、...
    一、关系代数的9种操作:

    关系代数中包括了:并、交、差、乘、选择、投影、联接、除、自然联接等操作。

    五个基本操作:
    并(∪)、差(-)、笛卡尔积(×)、投影(σ)、选择(π)

    四个组合操作:
    交(∩)、联接(等值联接)、自然联接(RcrossS)、除法(÷)
    注2:等值连接表示先做笛卡尔积(×)之后,对相应列进行选择或等值关联后的结果(仅筛选行、不筛选列)
    注2:自然连接表示两个关系中若有相同名称的属性,则自动作为关联条件,且仅列出一列


    二、关系代数表达式:

    由关系代数运算经有限次复合而成的式子称为关系代数表达式。这种表达式的运算结果仍然是一个关系。可以用关系代数表达式表示对数据库的查询和更新操作。


    三、举例说明:

    设教学数据库中有3个关系:

    学生关系S(SNO,SNAME,AGE,SEX)
    学习关系SC(SNO,CNO,GRADE)
    课程关系C(CNO,CNAME,TEACHER)


    (1) 检索学习课程号为C2的学生学号与成绩
    ------------------------------------
    SELECT SNO,GRADE
    FROM SC
    WHERE CNO='C2'
    ------------------------------------
    π SNO,GRADE(σCNO='C2'(SC))
    ************************************


    (2) 检索学习课程号为C2的学生学号与姓名
    ------------------------------------
    SELECT SC.SNO,S.SNAME
    FROM SC,S
    WHERE SC.SNO=S.SNO
    AND SC.CNO='C2'
    ------------------------------------
    π SNO,SNAME(σCNO='C2'(ScrossSC))
    此查询涉及S和SC,先进行自然连接,然后再执行选择投影操作。
    ----
    π SNO,SNAME(S)cross(πSNO(σCNO='C2'(SC)))
    自然连接的右分量为"学了C2课的学生学号的集合"。
    此表达式比前一个表达式优化,执行起来要省时间、省空间。
    ************************************


    (3) 检索选修课程名为MATHS的学生学号与姓名
    ------------------------------------
    SELECT SC.SNO,S.SNAME
    FROM SC,S,C
    WHERE SC.SNO=S.SNO
    AND SC.CNO=C.CNO
    AND C.CNAME='MATHS'
    ------------------------------------
    π SNO,SANME(σCNAME='MATHS'(ScrossSCcrossC))
    ************************************


    (4) 检索选修课程号为C2或C4的学生学号
    ------------------------------------
    SELECT SNO
    FROM SC
    WHERE CNO='C2'
    OR CNO='C4'
    ------------------------------------
    π SNO(σ CNO='C2'∨CNO='C4'(SC))
    ************************************


    (5) 检索至少选修课程号为C2或C4的学生学号
    ------------------------------------
    SELECT SA.SNO
    FROM SC AS SA,SC AS SB
    WHERE SA.SNO=SB.SNO
    AND SA.CNO='C2'
    AND SB.CNO='C4'
    ------------------------------------
    π 1(σ1=4∧2='C2'∧5='C4'(SC×SC))
    ************************************


    (6) 检索不学C2课的学生姓名与年龄
    ------------------------------------
    SELECT SNAME,AGE
    FROM S
    MINUS
    SELECT S.SNAME,S.AGE
    FROM SC,S
    WHERE SC.SNO=S.SNO
    AND SC.CNO='C2'
    (Oracle)
    ------------------------------------
    π SNAME,AGE(S)-πSNAME,AGE(σCNO='C2'(ScrossSC))
    ************************************


    (7) 检索学习全部课程的学生姓名
    ------------------------------------
    这个定义用SQL表示比较麻烦,略过
    ------------------------------------
    π SNO,CNO(SC)÷πCNO(C)
    先用除法取出选取所有课程的SNO集(除法可以理解为一个Filter)
    π SNAME(S cross (πSNO,CNO(SC)÷πCNO(C)))
    再关联S表取出SNAME
    ************************************


    (8) 检索所学课程包含S3所学课程的学生学号
    ------------------------------------
    这个定义用SQL表示比较麻烦,略过
    ------------------------------------
    π SNO,CNO(SC)÷ πCNO(σSNO='S3'(SC))
    同样运用了除法的特性
    ************************************


    (9) 将新课程元组('C10','PHYSICS','YU')插入到关系C中
    ------------------------------------
    INSERT INTO C VALUES('C10','PHYSICS','YU')
    ------------------------------------
    (C∪('C10','PHYSICS','YU'))
    记住该符号的用法
    ************************************


    (10) 将学号S4选修课程号为C4的成绩改为85分
    ------------------------------------
    UPDATE SC SET GRADE=85
    WHERE SNO='S4'
    AND CNO='C4'
    ------------------------------------
    (SC-('S4','C4',?)∪('S4','C4',85))
    先用'-'实现DELETE功能,再用'∪'实现INSERT功能
    注意使用?来表示检索时忽略该字段值
    ************************************


    四、关系代数表达式的优化:

    目的:为了系统在执行时既省时间又能提高效率。
    基本策略:先做选择,运用投影去除多余属性等等。
    优化算法:语法树(尽量提前做选择操作;在每个操作后,应做个投影操作,去掉不用的属性值)

    例如:

    π SNO,SNAME(σGRADE>60(ScrossSC)) 进行优化后转换为:
    π SNO,SNAME(πSNO,SNAME(S)crossπSNO(σGRADE>60(SC)))
    --即提前做选择操作;在每个操作后,应做个投影操作,去掉不用的属性值


    又如:

    S(S#,SNAME,AGE,SEX)
    SC(S#,C#,GRADE)
    C(C#,CNAME,TEACHER)

    π CNAME,TEACHER(σSEX='女'(ScrossSCcrossC)) 进行优化后转换为:
    πCNAME,TEACHER(CcrossπC#(πS#,C#(SC)crossπS#(σSEX='女'(S))))
    展开全文
  • 数据库基础表达式和基本运算符
  • 数据库原理之关系数据库关系运算

    万次阅读 多人点赞 2018-12-06 10:10:31
    关系数据库关系运算 选择 投影 链接 除运算 选择运算 选择运算是从关系R中选取使逻辑表达式F为 真的元组,是从行的角度进行的运算 投影运算 投影操作主要是从列的角度进行运算,但投影之后...

    关系数据库关系运算

    • 选择
    • 投影
    • 链接
    • 除运算

    在这里插入图片描述

    选择运算

    在这里插入图片描述

    选择运算是从关系R中选取使逻辑表达式F为 真的元组,是从行的角度进行的运算
    在这里插入图片描述

    投影运算
    在这里插入图片描述

    投影操作主要是从列的角度进行运算,但投影之后不仅取消可原关系中的某些列,而且还可能取消某些元组(避免重复行)
    在这里插入图片描述
    连接运算

    连接运算又有等值连接,自然连接,半连接,左外连接,右外连接,全外连接。

    在这里插入图片描述

    • 等值连接
      在这里插入图片描述
    • 自然连接
      在这里插入图片描述
    • 半连接
      在这里插入图片描述
      R和S自然连接后,保留R属性的投影
    • 左外连接
      在这里插入图片描述
    • 右外连接
      在这里插入图片描述
    • 全连接
      在这里插入图片描述
      一般连接操作是从行的角度进行运算,自然连接还需要取消重复列,所以是同时从行和列的角度进行运算。
      在这里插入图片描述

    除运算

    在这里插入图片描述
    在这里插入图片描述
    除运算是同时从行和列的角度进行的
    在这里插入图片描述

    关系代数表达式
    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    展开全文
  • 数据库关系代数运算

    千次阅读 2019-01-13 21:34:52
    转载:https://wenku.baidu.com/view/f301bf48e45c3b3567ec8b75.html
  • 关系数据库 一单项选择题 试题1 关系模型中,一个码() 以上都不是 可以由多个任意属性组成 由一个或多个属性组成,其值能够唯一标识关系中一个元组 至多由一个属性组成 [参考答案] 由一个或多个属性组成,其...
  • 关系数据库关系运算

    2020-02-25 00:04:20
    选择 选择的逻辑表达式的基本形式为:XθY。其中θ代表比较运算符,它... 关系R上的投影是从关系R中选出若干属性列组成新的关系。它是从列的角度进行的运算。由于投影取消了某些列之后可能出现重复的行,应取消...
  • 数据库-表达式计算

    2012-02-14 17:31:00
    一个表达式中包含多个运算,该怎样计算呢? 一种方法是以一定的顺序每次执行一个操作,每次计算的结果被实体化到一个临时关系中以备后用。实体化计算的代价包括所有运算的代价和把中间结果写回磁盘的...
  • 数据库-关系运算

    千次阅读 2017-10-18 11:29:16
    数据库中的关系运算包括选择、投影、连接、除等。 1、选择 选择又称限制,其实就是在关系R中选择满足给定条件的诸多元组,元组其实就是表中的一行数据称为元组。 其实选择运算就是从一个关系,比如说关系R中选取可以...
  • SQL数据库关系运算

    千次阅读 2018-11-02 21:29:14
    设有如下所示的关系S、SC和C, S(sno,sname,ssex,sage,sdept)(学号,姓名,性别,年龄,专业) ...试用关系代数表达式表示下列查询语句: 检索至少选修”程军”老师所授全部课程的学生姓名(SNAME)。 ∏sname ( S ∞ (...
  • 润乾V4 润乾报表 null 表达式运算
  • 数据库关系运算

    千次阅读 2019-11-28 14:06:53
    1 关系 域( domain) 定义:域是一组具有相同数据类型的值的集和   例如,自然数、整数、{0,1)、{男,女”(用来表示性别的取值范围)、{学士,“硕士,博士“(表示学位的取值范围)、大于等于0且小于...
  • 随想表达式运算控件可以使您的应用程序轻松具备用户自定义运算功能。使您开发通用、强大的数据处理系统、电子表格系统成为可能。 目前,随想表达式运算控件支持的运算有: 1.四则混合运算 2.括号 3.以下基本...
  • 数据库基础数据库介绍数据模型概念模型逻辑模型关系数据库 写下博客用于自我复习、自我总结。 如有错误之处,请各位指出。 本数据库系列专栏,文章的重心将会是总结SQL语句的使用,而不会涉及到太多数据库本身或...
  • c#+ACCESS, 在调试运行SELECT语句时,老是提示标准表达式中数据类型不匹配   以后遇到这样的问题在问题字段前面加上:cstr() 其中()里面是字段名,尤其是字段为日期是就出这种错
  • 数据库之代数表达式

    千次阅读 2018-07-29 22:47:43
    数据库之代数表达式 基础知识介绍 关系模型简述:形象的说,一个关系(relation)就是一张表(table),关系模型就是处理table的,它由三个部分组成: 描述DB各种数据的基本结构形式(table/relation) 描述...
  • 之前学习了一下关系代数表达式,现在再学习一下元组关系的演算,这样就全了。这篇东西的符号打出来费了好多时间,比较麻烦,还好看着还能看懂,关键是全文本的,好下面开始正文。 为了讨论方便,先允许关系的基数是...
  • https://blog.csdn.net/skyejy/article/details/80890842
  • 1.选择从关系中找出满足给定条件的所有元组称为选择,其中条件是用逻辑表达式给出的,逻辑表达式为真时元组被选取。 选择运算记为δF(R),其中R为一个关系,F为布尔函数,该函数可以包含比较运算符和逻辑运算符。 ...
  • 一、关系数据结构及形式化定义 1、关系 关系模型的数据结构非常简单,只包含单一的数据结构——关系。... 笛卡儿积是域上的一种集合运算。 定义:给定一组域D1,D2,...,Dn,允许其中某些域是相同的,D...
  • 数据库专门的关系运算

    千次阅读 2020-03-23 23:01:48
    选择运算

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 88,837
精华内容 35,534
关键字:

数据库关系表达式运算