SQL附加的基本运算(更名运算、字符串运算)

更名运算

from子句中的两个关系中可能存在同名属性,除了使用前缀名之外,SQL也提供了一种重命名结果关系中属性的方法,即使用as子句:old_name as new_nameas子句既可以出现在select子句中也可以出现在from子句中。
使用在select子句中,用于更改结果关系中属性的名字:

select name as instructor_name ,teaches_name
from instructor,teaches
where instructor.ID = teaches.ID

使用在from子句中,用于重命名关系,重命名关系的一个原因是可以将长的关系名替换成短的,方便在查询语句的其他地方使用:

select T.name,S.teaches_name
from instruct as T,teaches as S
where T.ID = S.ID

另一个原因是适用于需要比较同一个关系中的元组的情况,需要把关系与自身进行笛卡尔积运算,需要用重命名区分开:

select distinct T.name
from instructor as T,instructor as S
where T.salary > S.salary and S.dept_name = 'Biology';

在这个例子中,就不能使用instructor.salary的写法,否则无法区别是引用哪一个instructor,T与S称为相关名称表别名相关变量元组变量

字符串运算

  • SQL中使用单引号标识字符串,如果字符串中有单引号,那就用两个单引号字符来表示,比如it's right可表示为it''s right

  • SQL标准中,字符串上的相等运算是大小写敏感的

  • SQL允许字符串上有多种函数,如串联("||")、提取子串、计算字符串长度、大小写转换(upper(s)lower(s))、去掉字符串后面空格(srim(s)),等等

使用like操作符来实现模式匹配

  • 百分号(%):匹配任意子串
  • 下划线(_):匹配任意一个字符
  • ’Intro%’:匹配任何以"Intro"打头的字符串
  • ’%Comp%’:匹配任何包含"Comp"子串的字符串
  • ’___’:匹配值含三个字符的字符串(这里是三个连着的下划线)
  • ’___%’:匹配至少含三个字符的字符串
  • 反斜线(****):转义字符,放在特殊字符前面转换为普通字符
    like的使用:
select dept_name
from department
where building like '%Comp'
  • SQL还允许not like搜索不匹配项,以及SQL:1999提供similar to,有更强大的类似正则表达式的模式匹配能力,这里就不展开了

select子句中的属性说明

"*"用来在select子句中表示所有的属性,select instructor.*为instructor中的所有属性被选中,select *则为from子句中所有属性被选中

排列元组的显示次序

order by子句默认升序,可以用desc表示降序,或用asc表示升序:

select *
from instructor
order by salary desc,name asc;

where子句谓词

  • between说明一个值≤某个值同时≥另一个值 可以用where salary between 90000 and 100000
    取代 salary <= 100000 and salary >= 90000
    类似的,还有not between运算符

  • SQL允许用记号(v1,v2,v3,…,vn)表示一个分量为v1,v2,v3,…,vn的n维元组,按字典顺序进行比较运算,如(a1,a2)<=(b1,b2)在a1<=b1且a2<=b2时为真

select name,course_id
from instructor,teaches
where (instructor.ID,dept_name) = (teaches.ID,'Biology');
select name,course_id
from instructor,teaches
where instructor.ID = teaches.ID and dept_name = 'Biology';

上述两个例子相等

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值