MySQL数据查询

DQL

全称为Data Query Language(数据查询语言),用来查询数据库表中的记录

  • 关键字:SELECT

语法:

基本查询:

select 字段列表 from 表名列表

  • 查询多个字段:

    select 字段,字段2,字段3 from 表名;

1
select username, password from tab_emp;
  • 查询所有字段(通配符)

    select * from 表名;

1
select * from tab_emp;
  • 设置别名:

    select 字段1 [as 别名1],字段2 [as 别名2] from 表名

1
select name as "姓名", entrydate as "入职时间" from tab_emp;
  • 去除重复记录:

    select distinct 字段列表 from 表名;

1
select distinct job from tab_emp;

条件查询:

  • 在基本查询的后面添加

where 条件列表

比较运算符 功能
> 大于
>= 大于等于
<= 小于等于
= 等于
<>或者 != 不等于
between…and… 在某个范围之内
in(…) 在in之后的列表中的值,多选一
like 占位符 模糊匹配(_匹配单个字符,%匹配任意个字符)
is null 是null
逻辑运算符 功能
and 或者 && 并且(多个条件同时成立)
or 或者|| 或者(多个条件任意一个成立)
not 或者 ! 非,不是
1
select *from tab_emp where name = '杨逍';

分组查询:

  • 在条件查询的后面添加

group by 分组字段列表

having 分组后条件列表

  • 聚合函数:

    • 将一列数据作为一个整体,进行纵向计算

    • select 聚合函数(字段列表) from 表名;

函数 功能
count 统计数量
max 最大值
min 最小值
avg 平均值
sum 求和

注意:

  • null值不参与所有聚合函数运算

  • 统计数量可以使用:count(*) count(字段) count(常量),推荐使用count( * ),

分组字段和聚合函数一起使用

1
select 字段列表 from 表名 [where 条件] group by 分组字段名 [having 分组后过滤条件]
  • where 和 having区别:

    • 执行时机不同:
      • where是分组之间进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤
    • 判断条件不同
      • where不能对聚合函数进行判断,而having可以

排序查询:

  • 在基本查询的后面添加

order by 排序字段列表

  • 排序方式:

    • ASC:升序(默认值)
    • DESC:降序
1
select *from tab_emp order by  id DESC ;

多字段排序的情况下,当第一个字段值相同时候,才会根据第二个字段进行排序。

  • 分页查询:

    • 在基本查询后方添加

    limit 分页参数

1
select 字段列表 from 表名 limit 起始索引,查询记录数

起始索引=(页码-1) * 每页展示记录数

1
select *from tab_emp limit 0,5;

函数:

  • if(表达式,tvalue,fvalue):当表达式为true时,取值trvalue;当表达式为false时取值fvalue

  • case expr when value1 then result1 [when value2 …] [else result] end;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
use data01;

select *
from tab_emp
where name like '%张%'
and gender = 1
and entrydate between '2000-01-01' and '2015-12-31'
order by update_time desc
limit 0,10;

select if(gender = 1, '男性员工', '女性员工') as '性别', count(*)
from tab_emp
group by gender;

select (case job
when 1 then '班主任'
when 2 then '讲师'
when 3 then '学工主管'
when 4 then '教研主管'
else '未分配职位' end) as '职位',
count(*)
from tab_emp
group by job;