Mysql中sql记录

1.DATE_FORMAT函数,用来对日期就行格式化处理 

MySQL的DATE_FORMAT函数的使用_Mysql_脚本之家

2.数据库中sql的执行顺序

先给结论

from>join>where>group by>聚合函数>having>select>order by>limit

①、最先执行from table;

需要先确定从哪个表中取数据,所以最先执行from table。

②、join连接

用于把来自两个或多个表的行结合起来,简单补充一下连接的类型

  • 自然连接(natural join)
  • 内连接(inner join):内连接查询能将左表和右表中能关联起来的数据连接后返回,返回的结果就是两个表中所有相匹配的数据。
  • 外连接(outer join):外连接分为左外连接(LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行)、右外连接(RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行)、还有一个FULL JOIN(全连接),不过MYSQL不支持全连接
  • 交叉连接(cross join)即笛卡尔连接
  • 详细区别:https://www.cnblogs.com/lis2/p/16067341.html

③、where语句;

where语句是对条件加以限定

④、分组语句【group by…… having】;

group by是分组语句

having是和group by配合使用的,用来作条件限定

⑤、聚合函数;

常用的聚合函数有max,min, count,sum,聚合函数的执行在group by之后,having之前

举例:count函数查询分组后,每一组分别有多少条数据

select count(*) from user group by gender

值得注意的是:聚合函数的执行在group by之后,having之前

⑥、select语句;

对分组聚合完的表挑选出需要查询的数据

⑦、Distinct

distinct对数据进行去重

如果sql语句存在聚合函数,例如count、max等,会先执行聚合函数再去重

⑧、order by排序语句。

order by排序语句

select * from user order by id  升序排序
select * from user order by id desc 降序排序

⑨、limit

limit用于指定返回的数据条数

select * from user limit 2
从user表中查询前两条数据
该sql等同于
select * from user limit 0,2
表示从第0条开始取两条数据

limit常配合order by使用

select * from user order by id limit 3
根据id排序,选出id排序前三的数据

总结

from>join>where>group by>聚合函数>having>select>order by>limit

例子

select 
distinct user.name 
from user 
join vip on user.id=vip.id 
where user.id>10 
group by user.mobile 
having count(*)>2 
order by user.id
limit 3;

执行顺序

  1. from user
  2. join vip on user.id=vip.id ,join是表示要关联的表,on是连接的条件
  3. where user.id>10
  4. group by user.mobile 根据user.mobile分组
  5. 然后先执行count(*)在执行having,查询分组之后数量大于2的分组数据
  6. select 对分组聚合完的表挑选出需要查询的数据
  7. distinct查询出来的数据去重
  8. order by user.id 对去重后的数据排序
  9. limit 3对排序后的数据选出前面3条

Mapper中返回结果为map时

@MapKey用法说明_小厂程序员DHJ的博客-CSDN博客​​​​​​

Mapper中返回映射结果为map的另一种情况:

表中存在topic相同的和不同的数据,需求是统计topic相同的数据量,考虑使用map返回,key为topic的值,value为数量

数据准备如下:

具体实现如下:

import org.apache.ibatis.session.ResultContext;
import org.apache.ibatis.session.ResultHandler;

import java.util.HashMap;
import java.util.Map;

@SuppressWarnings("all")
public class MapResultHandler<K,V> implements ResultHandler<Map<K,V>> {

    private final Map<K,V> mappedResults = new HashMap<>();

    @Override
    public void handleResult(ResultContext context) {
        Map map = (Map) context.getResultObject();
        mappedResults.put((K)map.get("key"), (V)map.get("value"));
    }

    public Map<K,V> getMappedResults() {
        return mappedResults;
    }
}

mapper如下:

void test(MapResultHandler<Integer, Integer> resultHandler); 这里的返回值一定要为void
<resultMap id="configMap" type="java.util.Map" >
  <result column="topic" property="key" jdbcType="VARCHAR" />
  <result column="cover" property="value" jdbcType="VARCHAR" />
</resultMap>

<select id="test" resultMap="configMap">
select topic , count(cover)as cover from party_calendar group by topic
</select>

service中如下:

MapResultHandler<Integer, Integer> resultHandler = new MapResultHandler<>();
partyCalendarMapper.test(resultHandler);
Map<Integer, Integer> alarmCountMap = resultHandler.getMappedResults();

alarmCountMap打印如下:{111=2, 222=1}

Mysql中的最左匹配的总结:

Mysql中的一些特殊的符号:

MySQL中“<>”是什么意思-Python学习网

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值