1、字符串运算

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

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

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

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

                    select  dept_name

                    from  department

‘%Watson%’;

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

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

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

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

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

                         select  name

                         from instructor

‘Physics’

                         order by name;

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

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

4、重复

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

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

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

                   ∏A(r):对于r1中t1的每个复本,在∏A(r1)中都有一个∏A(t1)的复本与其对应,其中∏A(t1)表示单个元组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(σp(r1,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。