Mysql数据库之查询数据DQL

查询数据SELECTE 语句

本文将简述select语句的用法,查询中常用的查询方式、排序语句order by、分组语句group by 子句、聚合函数的使用及having子句的应用场景和用法。

基本查询语法:

select 列名集合 from 表名 where 条件 order by
如:查询t_employer表中的所有数据

select * from t_employer;
//在显示表中的所有字段时,可以用*代替

表前缀
语法:
select 表名.列名1,表名.列名2…from 表名
在单表查询时可省略表前缀

表别名
select 列名1 as A,列名2 as B from 表名
as用来定义别名
也可以忽略as 关键字
select 列名1 A,列名2 B from 表名

排除重复的数据
在员工表中,需要知道在这个表中都有哪些部门, 一个部门有多个员工。那么通过select语句查询会出现多个重复的部门,我们可以用distinct关键字,相同的数据只保留一个。
语法:
select distinct 列名1 from 表名
去除一列中的重复数据
select distinct 列名1,列名2 from 表名
在两列中均去重,同时满足两列。

分页操作:
返回限定行数的查询
语法:
select 列名1,列名2 from 表名 limit 开始序列号,返回行数
开始序列号从0开始
开始序列号=(当前页数-1)*每页显示条数
返回行数=每页显示的条数

查询方式

范围查询
between 上限 and 下限 表示在…之间
如:查询员工表中年龄在25-35岁之间的员工

select * from t_employer where age between 25 and 35;

定义集合关系
in 值在集合中
not in 值不在集合中

如:查询员工表中年龄在23岁或者45岁的员工

select * from t_employer where age in(23,45);

模糊查询
mysql中通过like进行模糊查询,所谓模糊查询就是并不清楚具体内容,如查询某个员工只记得他的姓,可以用like查询。
通配符:
下划线_匹配单个字符 like '张_'意为以张开头,并且只有两个字
% 匹配任意0个或多个字符 like ’张%'意为以张开头

处理空值
is null 或 is not null
任何运算符与null匹配都为false

排序操作

order by 子句
order by 子句 用于排序的语句
ASC 升序排序
desc 降序操作
语法:
select * from 表名 order by 排序 列名 排序方式(ASC、desc)
多列排序
语法:
select 列1,列2 from 表名 order by 列1 排序方式,列2 排序方式
多列排序时列1优先排序,当列2出现重复值时,再按照列2排列。
sql 语句执行顺序
例:
按照年龄从大到小显示员工信息

select * from t_employer order by age desc

1.from
2.where
3.select
4.order by

聚合函数

聚合函数是运行在行组上,计算和返回单个值的函数
聚合函数是对数据进行统计和分析。

count(*) 查看符合条件的数据条数
max(列名) 最大值
min(列名) 最小值
avg(列名) 平均
sum(列名) 求和(某个列的合计值)

select count(distinct age) from student student
所有唯一非空值行

select sum(计算规范) from 表名
判断是否为空,如果为空就设置为0
ifnull(expr1,expr2)
如果exprl1不是null,if null 返回expr1,否则返回expr2.
round(expr,int )用于把数值取小数
expr是表达式,int 是整数位数
计算职工的平均年龄

select round(avg(if null(age,0),2)) from t_empolyer;

Group by 子句

对数据进行分组
select 列A,聚合函数 from 表名 where 条件 group by 列A;
分组group 根据where 条件过滤

select 列满足条件:
1.使用聚合函数的列
2.该列在group 子句中

多列分组:
语法:
select 列名1,列名2,count() from 表名 group by 列名1,列名2.‘
同时满足两个列的条件
我们把t_employer (id int primary key,emp_name varchar(20),gender int,age int,address varchar(50));加上一个部门字段

alter table t_employer  add depart varchar(20);

分别统计公司里各部门的男女人数

select gender,depart ,count(*) from t_empolyer group by gender,depart;

Having 子句
执行在投影之后,用于在分组之后的条件判断
如:筛选平均年龄在25岁以上的部门

select depart,avg(age) from t_employer group by depart having avg(age)>25;

sql语句的执行顺序
1.执行from 将表数据添加添加到内存中
2.where 条件筛选
3.group by 分组
4.select 投影列
5.having 条件过滤(聚合筛选)
6.执行order by 排序

你可能感兴趣的:(mysql数据库)