目录
(1)字符串操作
匹配规则:
“%” 匹配零个或多个字符
“_” 匹配任意单个字符
Escape 定义转义字符,以去掉特殊字符的特定含义,使其被作为普通字符看待 如escape “\”,定义 \ 作为转义字符,则可用\%去匹配%,用\_去匹配_
示例:
select *
from T
where tname like ‘张%’
--找到张姓老师的所有信息
(2)元组显示顺序
示例:
按系名升序列出老师姓名,所在系名,同一系中老师按姓名降序排列
select dname,tname
from T,D
where T.dno = D.dno
order by dname asc,tname desc
注意:空值按最大处理。
(3)集合操作
集合并:union
集合交:intersect
集合差: except(minus)
提示 集合操作自动去除重复元组,如果要保留重复元组的话,必须用all关键词指明
示例:注意集合操作时两个子句操作产生的集合最好加括号,防止出错,结构也更加清晰。
--两个结果集合进行运算
查询选修了001或002号而没有选003号课程的学生号
(select sno
from SC
where cno= ‘001’ or cno = ‘002 ‘)
except
(select sno
from SC
where cno = ‘003’)
(4)聚集函数与分组
平均值:avg 最小值:min 最大值:max 总和:sum 记数:count
聚集函数返回的是一个关系,这个关系只有一个元组。
查询学生总人数
SELECT count(*) FROM S;
注意:
①:count(*)和count(属性名)的区别,count(*)统计的是元组的个数,连空都会统计,count(属性名)不会统计空。
②:count(distinct 属性名)这种用法在count(*)中不允许,因为没有两条完全相同的记录。
③:除了count(*)其他聚集函数均忽略空。
依据group by列名相等进行分组,having是对组的选择。
注意:当出现group by后,select列名子句中只能出现分组属性或聚集函数。聚集函数只能用于SELECT子句和GROUP BY中的HAVING子句。
解释:如下,如果select中出现 group by后面未出现的比如cno,那么一个sno可对应对个cno,结果出错不能一一对应,所以select 子句中不能出现未用来分组的属性列。
--及格同学的平均成绩
select sno,avg(score)
from SC
group by sno
having min(socre) >= 60
HAVING和WHERE同样是选择运算,HAVING的对象是分组,WHERE的对象是元组。
(6)空值(NULL)
不能是等于null(在判断中,在update赋值中可以等于null)。
null参与算术运算,算术表达式结果是null,参与比较运算算术表达式结果是FALSE。
count(*)不会忽略空值,count(属性列)会忽略,其他的聚集函数均会忽略。