1、分组查询
select 字段列表 from 表名 [where 条件] group by 分组字段名 [having 分组后过滤条件];
where与having的区别:
执行时机不同:where在分组之前过滤,having是分组之后过滤
判断条件不同:where不能对聚合函数进行判断,而having可以
案例:
查询产值记录表中的产值之和并按照年份和月份分组,只查询2022年与2021年没有被删除且上报状态为已上报的记录
- select year,month,sum(output_value) as sumOutputValueYearly
- where delete_flag = 0 and report_status = 1 and (year = 2021 or year = 2022)
- group by year,month
2、排序查询
select 字段列表 from 表名 order by 字段1 排序方式1 , 字段2 排序方式2
排序方式
ASC:升序(默认值)
DESC:降序
注意
如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序
案例:
查询产值记录表中的产值之和并按照年份降序、月份升序排序,只查询2022年与2021年没有被删除且上报状态为已上报的记录
- select year,month,sum(output_value) as sumOutputValueYearly
- where delete_flag = 0 and report_status = 1 and (year = 2021 or year = 2022)
- order by year desc,month asc
3、分页查询
select 字段列表 from 表名 limit 起始索引,查询记录数;
注意
起始索引从0开始,起始索引 = (查询页面 - 1) * 每页显示记录数
分页查询是数据库的方言,不同的数据库有不同的实现,Mysql中用的是limit
如果查询的是第一页数据,起始索引可以忽略,直接简写为limit 10.
案例
查询第一页员工数据,每页展示10条记录
select * from emp limit 0,10;
查询第二页员工数据,每页展示10条记录(起始索引 = (查询页面 - 1) * 每页显示记录数)
select * from emp limit 10,10
4、多表查询
一对多查询
查询政策表中全部内容以及政策类型表中对应的政策类型(一个政策分类下有多个政策)
在多表中添加一表的关联字段
- SELECT
- p.id id,
- p.cover_url coverUrl,
- p.title title,
- p.content content,
- p.release_unit releaseUnit,
- p.release_status releaseStatus,
- p.release_time releaseTime,
- p.update_time updateTime,
- p.create_time createTime,
- p.delete_flag deleteFlag,
- c.id categoryId,
- c.name categoryName
- FROM
- t_policy p
- left join dic_policy_category c on p.category_id = c.id
多对多查询
一个企业可以有多个分类,一个企业分类下可以有多个企业
建立中间表进行联查
- SELECT
- e.id,
- e.name as enterpriseName,
- GROUP_CONCAT(c.name) as categoryName,
- e.license_url as licenseUrl,
- e.register_capital as registerCapital,
- o.name as operationName,
- e.legal_person as legalPerson,
- e.legal_person_phone as legalPersonPhone,
- e.audit_status as auditStatus,
- e.audit_time as auditTime,
- e.update_time as updateTime,
- e.delete_flag as deleteFlag
- FROM
- `t_enterprise` e
- left join ref_enterprise_category ref on e.id = ref.enterprise_id
- left join dic_enterprise_category c on c.id = ref.category_id
- left join dic_operation_status o on e.operate_status_id = o.id
- group by e.id,enterpriseName
- having deleteFlag = 0 and auditStatus = 0