SQL的相关运算(集合运算)

1、字符串运算

对字符串进行的最通常的操作是使用操作符like的模式匹配,使用两个特殊的字符来描述模式:

      百分号(%):匹配任意子串

      下划线(_:匹配任意一个字符

如:找出所在建筑名称中包含子串Watson’的所有系名

                    select  dept_name

                    from  department

                    where  building  like  %Watson%’;

2、为使模式中能够包含特殊字符,即%_SQL允许定义转义字符。在like比较运算中使用escape关键字来定义转义字符,

如:使用反斜线(\)作为转义字符

like  ab\%cd%escape \’匹配所有以“ab%cd”开头的字符串

SQL还允许在字符串上有多种函数,例如串联(“||”)、提取子串、计算字符串长度、大小写转换(用uppers)将字符串s转换为大写或用lowers)将字符串s转换为小写)、去掉字符串后面的空格(使用trims))等等。

3、SQL还提供了一些对关系中元组显示次序的控制。order by子句就可以让查询结果中元组按排列顺序显示。例如:按字母顺序列出在Physics系的所有教师

                         select  name

                         from instructor

                         where dept_name = Physics

                         order by name;

  order by子句默认使用升序。要说明排序顺序,可以用desc表示降序,用asc表示升序                                    如: order by salary desc name asc

                                salary用降序,若salary相同那name升序显示。

4、重复

       在关系模型的形式化数学定义中,关系是一个集合,所以重复的元组不会出现在关系中。但在实践中,包含重复元组的关系是有用的。

   可以用关系运算符多重集版本来定义SQL查询的复本定义。在此定义几个关系代数运算符的多重集版本,已知多重集关系r1r2

                   σpr1):如果在r1中有元组t1c1个复本,而且t1满足选择σp那么有c1t1的复本在σpr1)中

                   Ar):对于r1中t1的每个复本,在∏Ar1)中都有一个∏At1)的复本与其对应,其中∏At1)表示单个元组t1的投影

                   r1 x r2:如果有c1个t1的复本在r1中且 有c2个t2的复本在r2中,那么有c1*c2个t1·t2元组的复本在r1 x r2中

     SQL中的select子句也支持关系代数运算符的多重集版本:σ 、x

形如select A1,A2,……,An

     from  r1,r2,……,rm

     where  P;

SQL查询等价于关系代数表达式(多重集版本):

A1,A2,……,Anσpr1,r2,……,rm

5、集合运算

SQL作业在关系上的union、intersect、except运算对应于数学集合论中的∩,U和-运算,这些运算和select子句不同,它们会自动去除重复,若想保留所有重复,必须在运算符后加上all。

    假设一个元组在关系r中重复出现m次,在关系s中出现n次,那么这个元组将会重复出现:

     r union all s中,重复出现m+n次;

       r intersect all s中,重复出现min(m,n)次;

       r except all中,重复出现max(0,m-n)次。

                                         |    |

                                      m<n.  当m>n.

    Oracle中,支持union,union ALL,intersect和Minus;不支持Intersect ALL和Minus ALL,在SQL Server 2000中,只支持union和union ALL。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值