SQL笔记(三) SQL中附加的基本运算

附加的基本运算

更名运算

使用更名运算的理由:

  1. from子句中的几个关系中有同名的属性;
  2. select子句中使用了算术表达式,该结果属性没有名字;
  3. 讲一个长的关系名,替换成一个短的,方便操作;
  4. 比较同一个关系中的元组的情况;
  5. 没有理由,就想给它改个名字!!!

使用as 语句进行重命名运算

SQL中提供了一个重命名结果关系中属性的方法,使用如下的as子句:

old-name as new-name

as子句既可以出现在select子句中,也可以出现在from 子句中。

查询1. 一个普通的查询
select name, course_id
from instructor, teaches
where instructor.ID = teaches.ID;

结果是一个具有下列属性的关系:
name,course_id

查询2. 用名字instructor_name代替属性名name
select name as instructor_name, course_id
from instructor, teaches
where instructor.ID = teaches.ID;

结果是一个具有下列属性的关系:
instructor_name,course_id

查询3. 简化名称
select T.name,S.course_id
from instructor as T, teaches as S
where T.ID = S.ID;
查询4. 同关系查询

找出满足下面条件的所有教师的名字,他们的工资至少比Biology系某一个教师的工资要高。

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

S和T被认为是instructor的两个拷贝,更准确的说是被声明为instructor关系的别名。
S和T这样的标识符在SQL标准中被称作:
相关名称(correlation name)表别名(table alias)相关变量 (correlation variable)元组变量(tuple variable)


字符串运算

SQL允许在字符串上有多种函数,例如:
upper(s),lower(s),trim(s)等。
不同的数据库系统提供的字符串函数集不同个,这里不列举。

like操作符

使用like操作符可以实现模式匹配:
* %:匹配任意字符串
* _: 匹配任意一个字符
例如:
* ‘Intro%’:
* ‘%comp%’:
* ‘_ _ _’:

查询5.like表达式

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

select dept_name
from department
where building like '%Watson%';

使用escape关键字定义转义字符

/*使用反斜杠(\)作为转义字符, 
匹配所有以“ab%cd”开头的字符串*/
 like 'ab\%cd%' escape '\'

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

可以使用not like 比较运算符搜寻不匹配项


select子句中的属性说明

星号“*” 可以用在select 子句中表示“所有的属性”。

查询6. 星号表示所有的属性

下面的查询中,instructor中所有的属性都被选中。

select instructor.*
from instructor, teaches
where instructor.ID = teaches.ID;

排列元组的显示次序

使用order by子句

查询7. order by 查询

按字母顺序列出在Physics系的所有教师

select name
from instructor
where dept_name = 'Physics'
order by name;

order by 默认使用升序(asc)。
我们可以使用desc表示降序。

查询8. 使用asc和desc

按salary的降序列出整个instructor关系,如果有几个教师的工资相同,将他们按照名字升序排列。

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

where子句谓词

between 谓词

between比较运算符来说明一个值小于或等于某个值,同时大于或等于另一个值

查询9. 可以取代查询10

找出工资在90000美元到100000美元之间的教师的姓名

select name
from instructor
where salary between 90000 and 100000;
查询10.

找出工资在90000美元到100000美元之间的教师的姓名

select name
from instructor
where salary <= 100000 and salary >=90000;

not between

使用方法类似于between

(v1,v2,…,vn)n维元组比较

SQL允许我们使用记号(v1,v2,…,vn)表示一个分量值分别为v1,v2,…,vn的n维元组。
在元组上可以运用比较运算符,按照字典顺序进行比较。例如:
(a1,a2) <= (b1,b2)在 a1 <= b1且a2 <= b2时为真。

查询11. 等价于查询12

查找Biology系讲授了课程的所有教师的姓名和他们所讲授的课程。

select name, course_id
from instrucotr,teaches
where instructor.ID = teaches.ID and dept_name = 'Biology';
查询12. 等价于查询11
 select name, course_id
 from instructor, teaches;
 where (instructor.ID, dept_name) = (teaches.ID, 'Biology');

猜你喜欢

转载自blog.csdn.net/u010327460/article/details/80466694