DQL:Data Query Language,数据查询语句学习
1 简单查询
1.1 基础
1 | select 字段名1,字段名2,字段名3... |
- sql语句结尾要用
;结尾 - sql不区分大小写
*表示所有字段名,但实际开发不建议使用,效率较低
1.2 数学运算
1 | select 字段名 +|-|*|/ 数字 |
- sql语句支持简单的数学运算
- 数据运算时有Null参与运算,无论怎么运算,最后的值都为Null
1.3 起别名
1 | select 字段名 as 新字段名 |
- sql可以对查询的字段起新的字段名
- 标准sql语句中要求字符串使用单引号括起来。虽然mysql支持双引号,但不建议用,其他数据库不通用
as关键字可以省略
1.4 去重
1 | select distinct 字段名 |
distinct只能出现在查询字段名的最前面,如果有多个字段,表示联合去重
2 条件查询
1 | select 字段... |
2.1 逻辑运算
字段名 > | < | >= | <= | <> 参数
2.2 between…and…
字段名 between 参数1 and 参数2- between..and..是闭区间
2.3 is null 或 is not null
字段名 is null | is not null- null为空,不存在值,不能够用
=来衡量,要用is null或is not null
2.4 and 或 or
where 条件1 and | or 条件2- and的优先级大于or,会与and连接的判断为一类,可以用括号来区分
- 例:
where 条件1 and (条件2 or 条件3),会先满足条件1,再寻找满足条件2或3的数据 - 例:
where 条件1 and 条件2 or 条件3,会寻找满足条件1和2,或满足条件3的数据
2.5 in 或 not in
字段名 in | not in (参数1, 参数2, 参数3...)会寻找字段名 = | != 括号内参数的数据- in 是 or的一个简写
- 例:
name = 'AAA' or name = 'BBB',查询名字为AAA或BBB的数据 - 例:
name in ('AAA', 'BBB'),等同于上面sql条件
2.6 like-模糊查询
- 修饰符:
%-任意多个字符,_任意一个字符 字段名 like '%|_参数%|_',可以不添加修饰符,变成=- 若要查询参数带”_ “字符的数据,需要”"进行字符转译:
name like '%\_%'
3 数据排序
1 | select 字段名 |
order by 字段名,通过指定字段名进行排序,默认升序,可以后接asc(升序) 或 desc(降序) 来控制
- 注意:
- 可以支持多个字段进行排序,
order by 字段名1 acs|desc, 字段名2 asc|desc,向按照字段名1进行排序,如果字段名1相同的数据,按照字段名2进行排序
- 可以支持多个字段进行排序,
4 单行处理函数
4.1 ifnull()
- 格式:
ifnull(字段名,参数) - 当前该字段名的值为null,就转变为指定参数值
- 例子:
select if(grade, 0) from examstudent,当成绩为null时,默认为0
5 分组函数
| 分组函数 | 解释 |
|---|---|
| count | 计数 |
| sum | 求和 |
| avg | 平均值 |
| max | 最大值 |
| min | 最小值 |
select sum(字段名) from 表名:求出表中该字段的总和,其他分组函数使用同样道理- 分组函数还有另外的别称:多行处理函数,即将多行的数据处理为一行
- 分组函数会自动忽略null
- 分组函数不可直接使用在where后面
6 分组查询
6.1 group by
- group by:按照某个字段或者某些字段进行分组
1 | select 分组函数(字段名) |
- group by 查询的内容只能是分组函数和被分组字段,不能是其他字段,否则报错
- sql的执行顺序:from –> group by —> select
- group by 支持多个字段进行分组,越前字段优先级越高
6.2 having
- having:对分组之后的数据进行再次过滤
1 | select 分组函数(字段名) |
- having是对分组后的数据进行再过滤,所以必须使用group by 后才使用
- having的过滤效率不及where,能使用where实现的过滤不要使用having
7 总结
- sql书写顺序
1 | select xxx |
- 书写顺序不能改变,但是可以省略
- sql语句的执行顺序:from –> where –> group by —> having —> select –> order by