~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SQL查询的基本结构
集合运算
空值
聚集函数
嵌套子查询
数据库的修改
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SQL查询的基本机构
SQL查询的基本机构由三个子句构成:select,from,where
select A1,A2,A3
fron r1,r2,r3
where P
select子句
注意:SQL不允许在属性名称中,使用字符‘-‘,使用dept_name代替dept-name
SQL不区分字母的大小写,因此可以使用大写字母、小写字母命令表,属性等。
SQL允许在关系以及SQL表达式结果中出现重复的元祖
若要强行去除重复,可在select后加入关键词distinct
例:查询instructor关系中的所有系名,并去除重复
select distinct dept_name
fron instructor;
SQL也可以使用关键词all来显式指明不去除重复(SQL默认就是all)
select all dept_name
from instructor;
星号*在select子句中,可以用来表示“所有的属性”
select *
from instructor;
select子句中还可带含有+、-、/运算符的算术表达式,运算对象可以是常数或元组的属性。
select ID,name,salary*1.05
from instructor;
where子句
where子句允许我们只选出那些在from子句的结果关系中满足特定谓词的元祖。
例:找出在Computer Science系并且工资超过7万美元教师的姓名
select name
from instructor
where dept_name = ‘Com.science‘and salary > 70000;
上述SQL查询语句,对应的关系代数表达式为:
SQL允许在where子句中使用逻辑连词and,or和not,也可以使用between指定范围查询。逻辑连词的运算对象可以是包含比较运算符<,<=,>,>=,=和<>的表达式
例:找出工资在90000到100000教师的名字
select name
from instructor
where salary > 90000 and salary > 100000;
或
select name
from instructor
where salaty between 90000 and 100000;
from子句
from子句是一个查询求值中需要访问的关系列表,通过from子句定义了一个在该子句中所列出关系上的笛卡尔积。
找出instructor和teacher的笛卡尔积
select *
from instructor,teacher;
更名运算
SQL提供可为关系和属性重新命名的机制,使用as子句,as语句可以出现在select子句中,也可以出现在from子句中
使用更名运算,对关系进行更名,
例:找出所有教师,以及他们所讲授课程的标识
select T.name, S.course_id
from instructor as T, teachers as S
where T.ID = S.ID
例:找出所有教师名,他们的工资至少比 biology系某一个教师的工资高
select distinct T.name
from instructor as T, instructor as S
where T.salary > S.salary and S.dept_name = ‘biology‘;
字符串运算
对字符串进行的最常见的操作就是使用操作符like的模式匹配,使用两个特殊的字符来描述模式:
百分号(%):匹配任意的子串
下划线(_):匹配任意一个字符
例:找出所有建筑名称中包含子串‘ryan‘的所有系名
select dept_name
from department
where building like ‘%ryan%‘;