此篇衔接的是上一篇
三、查询经过计算的值
例如:罚款分类罚金的总和
select sum(罚金)
from 罚款分类;
其他的计算: count(*) 统计一个表中的元组个数
count(column_name1) 统计某一列中值的个数
sum(column_name) 计算某一列的总和
avg(column_name) 计算某一列的平均值
max(column_name) 求一列中的最大值
min(column_name) 求一列中的最小值
四、取消重复行
例如我们在借阅表中查询被借阅过的书的图书编号,那么我们会发现有的书如果被借出过两次,那么它的图书编号就会出现两次
而我们只需要一次,那么我们就需要取消重复行。
例如:(只需要在要查询的列名前加distinct就可以了)
select distinct 图书编号
from 借阅;
五、查询满足条件的元组
(1)比较(符号包括: =,<,>,>=,<=,!=,<>,!<,!>,not+上述比较符)
例如:我们要查询罚金为10的罚款信息
select *
from 罚款分类
where 罚款分类.罚金='10';
(2)确定范围(between...and...,not between...and...)
例如:查询罚金在10~50之间的罚款信息
select *
from 罚款分类
where 罚款分类.罚金 between '10'and '50';
(3)确定集合(in,not in)
例如我们要查询人民出版社和作家出版社的书的信息
select *
from 书目
where 出版单位 in('人民出版社','作家出版社');
(4)字符匹配(like,not like)
// % 表示任意长度的字符串 例如 a%b表示以a开头以b结尾的字符串
// _(下划线)代表任意单个字符 例如 a_ 表示以a开头的长度为2的字符串
例如我们要查询所有姓张的读者的信息
select *
from 读者
where 读者.姓名 like '张%';
!!!数据库字符集为ascII时一个汉字需要两个下划线
可是我们遇到查询以刘_开头的怎么办?
这就涉及到转义字符
select *
from 读者
where 姓名 like '刘\_%' escape '\';
即要标明转义字符。
(5)空值(is null ,is not null)
例如:从借阅表中查询有哪些书还没有还,我们只要查询哪些归还日期没有值即可
select *
from 借阅
where 归还日期 is null;
(6)多重逻辑判断(AND ,OR,NOT)
六、使用ORDER BY 字句查询
order by 【ASC(升序) | DESC(降序)】语句可以用来对数据按照一个或者多个属性进行排序
例如我们按照罚款数额从大到小排列
select *
from 罚款分类
order by 罚款分类.罚金 desc;
七、使用group by 子句
group by 子句将查询结果按某一列或者多列的值分组,值相等的为一组;
例如 求出被借过的书的编号,以及借阅过他们的人数
select 图书编号,count(借书证号)
from 借阅
group by 图书编号;