携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第1天,点击查看活动详情
select
distinct 字段列表
distinct 去除重复记录,必须用于用于所有字段名之前
select distinct * from 表名;
如果distinct关键字后面有多个字段时,则会对多个字段进行组合去重,只有多个字段组合起来的值是相等的才会被去重
字段列表可以用四则运算,也可以使用聚合函数(sum(字段名)、avg(字段名)、max(字段名)、min(字段名)、count(字段名))
聚合函数自动忽略空值NULL
聚合函数查询结果只有一行,所以如果要查询工资最高的人的姓名
如果用select name,max(salary) from emp;
结果不正确,默认显示的第一个name。因为name有很多行,而max(salary)只有一行,两列的行数不匹配)
as 跟在字段列表后面,给字段取别名
select name,(math+english) / 2 [as] 平均分 from stu;
from
表名列表
join
表名列表
-- 见底部
on
条件列表
where
条件列表
where后面可以是
- 比较运算符:>、<、>=、<=、=、!=、is NULL、is not NULL
- 成员运算符:in、not in
- 逻辑运算符:and/&&、or/||
- 模糊查询:like'',%表示任意个数的任意字符、_表示一个任意字符
where后不能够使用聚合函数
例如select name from emp where salary = max(salary);-- 会报错
group by
分组字段
只有出现在了group by后面的字段以及按照分组产生的聚合字段,才能出现在select的后面
也可以使用group_concat(字段名称),意为把分组后同一组下的该字段对象在同一行打印出来,用逗号分隔。如,可以使用group_concat(distinct price order by price desc);把price字段的值去重打印在一行,逗号分隔,按照price倒序排列
group by 字段名1;将所有具有相同字段名1的记录放到一个分组里
group by 字段名1,字段名2;将所有具有相同字段名1和字段名2的记录放到同一个分组里
with
rollup
-- 见底部
having
分组之后条件
having使用在分组之后,筛选满足条件的组,可以使用聚合函数
where使用在分组之前所有的数据进行筛选,不可以使用聚合函数
order by
排序方式
asc默认升序,desc更改为降序 可以对多个字段进行排序,order by 字段名称1 desc,字段名称2 asc;
limit
分页限定
limit 个数
limit 起始位置,个数