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

本文介绍了SQL查询中的重命名属性方法,包括在select和from子句中的应用,以及字符串运算,如大小写敏感性、连接、提取和模式匹配。此外,还讲解了select子句的属性说明,如使用通配符和orderby子句进行排序,以及where子句的过滤条件,如between运算符和元组比较。这些技巧对于高效地处理数据库查询至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

更名运算

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';

上述两个例子相等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值