目录
一.基本格式
select 要查的内容
from 查找的对象
where 查找的条件
group by 按什么分组
having 使用到函数的条件
order by 按照什么条件排序
注:1.having只能用到group by子句中。
2.group by 只能用于最外层查询,不能用在任何子查询中。
3.优先级:where>聚合函数>having。
4.where是对表的数据进行筛选过滤
having 是对聚合函数生成的二维表进行筛选过滤。
5.<> 是不等号
6.聚集函数只能用于 select 子句、group by 中的 having 子句。
不能用于 where 子句。
二.示例
1.order by子句
// 按照什么条件进行什么排序
①查询全体学生情况,查询结果按所在系的系号升序排列,同一系中的学生按年龄降序排列
select *
from Student
order by Sdept ASC,Sage DESC
2.聚集函数
//只能用于 select 子句、group by 中的 having 子句。
不能用于 where 子句。
函数名 作用 count(*) 统计元组个数 count([distinct|all] <列名>) 统计一列中值的个数 sum([distinct|all] <列名>) 计算一列值的总和,列值必须是数值型 avg([distinct|all] <列名>) 计算一列值的平均值,列值必须是数值型 max([distinct|all] <列名>) 求一列值中的最大值 min([distinct|all] <列名>) 求一列值中的最小值
注:1.distinct计算时去除重复值,all计算时不去除重复值,默认为all。
2.当聚集函数遇到空值时,除count(*)外,都跳过空值而只处理非空值。
3.聚集函数只能用于select子句和group by中的having子句。
②查询选修了课程的学生人数//distinct 去重
select count(distinct Sno)
from Sc;
3.group by 子句
③查询选修了三门以上课程的学生学号。
select Sno
from Sc
group by Sno
having count(*) > 3;
④查询平均成绩大于60分的学生学号和平均成绩。
select sno,avg(score) s_avg
from Score
group by sno
having avg(score) > 60
注:select sno,avg(score) s_avg 其中s_avg是对avg(score)的命名。
4.带有any(some)或all谓词的子查询
// 子查询返回多个值时要用any或all谓词修饰符,并且必须同时使用比较运算符。谓词any的意思是结果中的某个值,all的意思是结果中的所有值。
>ANY : 大于子查询结果中的某个值
>ALL : 大于子查询结果中的所有值
=ANY : 等于子查询结果中的某个值
⑤查询非计算机科学系中比计算机科学系所有学生年龄都小的学生姓名及年龄。
select Sname,Sage
from Student
where Sage < all
(select Sage
from Student
where Sdept = 'CS')
and Sdept <> 'CS';
注:Sdept <> 'CS' 意为 Sdept不是CS。 <> 和 != 是不等号