0%

【MySQL】DQL基础

DQL:Data Query Language,数据查询语句学习


1 简单查询

1.1 基础

1
2
select 字段名1,字段名2,字段名3... 
from 表名;
  • sql语句结尾要用;结尾
  • sql不区分大小写
  • *表示所有字段名,但实际开发不建议使用,效率较低

1.2 数学运算

1
2
select 字段名 +|-|*|/ 数字 
from 表名;
  • sql语句支持简单的数学运算
  • 数据运算时有Null参与运算,无论怎么运算,最后的值都为Null

1.3 起别名

1
2
select 字段名 as 新字段名 
from 表名;
  • sql可以对查询的字段起新的字段名
  • 标准sql语句中要求字符串使用单引号括起来。虽然mysql支持双引号,但不建议用,其他数据库不通用
  • as关键字可以省略

1.4 去重

1
2
select distinct 字段名
from 表名;
  • distinct只能出现在查询字段名的最前面,如果有多个字段,表示联合去重

2 条件查询

1
2
3
select 字段...
from 表名
where 条件;

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 nullis 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
2
3
select 字段名
from 表名
order by 字段名|查询字段名的列数 asc|desc
  • 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
2
3
select 分组函数(字段名)
from 表名
group by 字段名
  • group by 查询的内容只能是分组函数和被分组字段,不能是其他字段,否则报错
  • sql的执行顺序:from –> group by —> select
  • group by 支持多个字段进行分组,越前字段优先级越高

6.2 having

  • having:对分组之后的数据进行再次过滤
1
2
3
4
select 分组函数(字段名)
from 表名
group by 字段名
having 条件
  • having是对分组后的数据进行再过滤,所以必须使用group by 后才使用
  • having的过滤效率不及where,能使用where实现的过滤不要使用having

7 总结

  • sql书写顺序
1
2
3
4
5
6
select xxx
from xxx
where xxx
group by xxx
having xxx
order by xxx;
  • 书写顺序不能改变,但是可以省略
  • sql语句的执行顺序:from –> where –> group by —> having —> select –> order by