目录
- 更名运算
- 字符串运算
- select子句中的属性说明
- 排列元组的显示顺序
- where子句谓词
更名运算
除使用前缀名外,子句中的两种关系中可能存在同名属性,SQL它还提供了一种重命名结果关系中属性的方法,即使用子句:old_name as new_name
,可以出现子句也可以出现在句子中子句中。 ,改变结果关系中属性的名称:
select name as instructor_name ,teaches_name from instructor,teaches where instructor.ID = teaches.ID
,用于重命名关系,重命名关系的一个原因是可以用短关系名代替长关系名,方便在查询句的其他地方使用:
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)
),等等
:
- 百分号():匹配任何子串
- 下划线():匹配任何字符
- :匹配任何以"Intro"开头字符串
- :任何包含的匹配"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';
上述两个例子相等