SQL:查询语法注意事项

105 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 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后面可以是

  1. 比较运算符:>、<、>=、<=、=、!=、is NULL、is not NULL
  2. 成员运算符:in、not in
  3. 逻辑运算符:and/&&、or/||
  4. 模糊查询: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 起始位置,个数