MySql 筛选条件、聚合分组、连接查询
程序员文章站
2022-05-29 09:20:45
筛选条件 比较运算符 等于: = ( 注意!不是 == ) 不等于: != 或 大于: 大于等于: = 小于: 聚合分组 常用聚合函数 统计个数:COUNT(column) 最大值:MAX(column) 最小值:MIN(column) 求和:SUM(column) 平均值:AVG(column) ......
筛选条件
比较运算符
- 等于: = ( 注意!不是 == )
- 不等于: != 或 <>
- 大于: >
- 大于等于: >=
- 小于: <
- 小于等于: <=
- is null
- is not null
逻辑运算符
- 与:and
- 或:or
- 非:not
其它操作
- 排序:order by
- 正序:asc
- 倒序:desc
- 例:select * from students order by age desc ;
- 限制:limit
- 控制显示m条数据:limit m
- 从下标为m的行数开始显示n条数据:limit m,n
- 例:select * from students limit 3,2 ;
- 去重:distinct
- 例:select distinct * from students;
- 模糊查询:like
- 任意一个字符:_
- 任意多个字符:%
- 例:select * from students where name like '%abc_' ;
- 范围查询
- 连续范围: between a and b 相当于a <= value <= b
- 间隔返回: in
- 例:select * from students where id in(1,3,5,7);
- 别名:as
聚合分组
常用聚合函数
- 统计个数:count(column)
- 最大值:max(column)
- 最小值:min(column)
- 求和:sum(column)
- 平均值:avg(column)
- 列出字段全部值:group_concat(column)
分组查询:group by
- 在分组的情况下,只能够出现分组字段和聚合字段
- 其他的字段没有意义,会报错!
- select 字段 from 表 group by 字段;
- select 字段,count(*) from 表 group by 字段;
聚合筛选:having
- 加having条件表达式,可以对输出的结果做出限制
- select 字段1 from 表名 group by 字段1,字段2 having 字段2>=80;
执行顺序
- 如果一个查询语句中同时包含了别名(as),聚合函数, where, having,那么他们的执行顺序是
- 先是执行:where
- 然后执行:聚合函数和别名
- 最后执行:having
子查询
将一个查询的结果留下来用于下一次查询 ( select 中嵌套 select )
要求:
- 1) 嵌套在查询内部
- 2) 必须始终出现在圆括号内
例:
- 求出学生的平均年龄
- select avg(age) from students;
- 查找出大于平均年龄的数据
- select * from student where age > 19;
- 将求出的平均年龄的sql语句用于查找大于平均年龄的语句中
- select * from students where age > (select avg(age) from students);
连接查询
内连接:inner join
- 无条件内连接:
- 无条件内连接,又名交叉连接/笛卡尔连接
- 第一张表中的每一项会和另一张表的每一项依次组合
- select * from 表1 inner join 表2
- 有条件内连接:
- 在无条件内链接的基础上,加上一个on子句
- 当连接的时候,筛选出那些有实际意义的记录来进行组合
- select * from 表1 as a inner join 表2 as b on a.id = b.id
外连接:{left | right} join
- 左外连接: (以左表为基准)
- 两张表做连接的时候,在连接条件不匹配的时候
- 留下左表中的数据,而右表中的数据以null填充
- select * from 表1 as a left join 表2 as b on a.id = b.id
- 右外连接: (以右表为基准)
- 对两张表做连接的时候,在连接条件不匹配的时候
- 留下右表中的数据,而左表中的数据以null填充
- select * from 表1 as a right join 表2 as b on a.id = b.id
推荐阅读