欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

自认为有必要学习的Sql 总结,积累 mybatis

发布时间:2024/4/19 编程问答 52 豆豆
生活随笔 收集整理的这篇文章主要介绍了 自认为有必要学习的Sql 总结,积累 mybatis 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

sql会不断累积,总结,记录

总结1.
1.DISTINCT关键字,对单个字段去重如果说对单个字段排重,再根据另外一个排序的话,使用group up 分组在排序
2.查询某个字段的数量时,使用group up 分组 使用 count(1) 统计数量

1.mysql自带函数
INSTR(STR,SUBSTR) 在一个字符串(STR)中搜索指定的字符(SUBSTR),返回发现指定的字符的位置(INDEX);

2.为什么使用count(1)而不使用count(*)?
如果表只有一个字段,count()最快。
count(1)跟count(主键)一样,只扫描主键。count( *)跟count(非主键)一样,扫描整个表。明显前者更快一些。
若含有where语句,则会优先where中条件索引

2019-8-3
1.查询我浏览的用户
思路分析
1.通过子查询,先查询出当前用户看过的用户
2.然后对 用户id进行分组,并且查询出最大的时间
3.使用 order by 按照时间字段 进行排序

SELECTX.user_id,MAX(X.create_time) create_timeFROM(SELECTr.user_id,r.create_timeFROMbook_member_read_log r,book_contact_member mWHERE m.`id` = r.`member_id`AND m.`user_id` = #{condition.userId}AND r.`user_id` != #{condition.userId}) XGROUP BY X.user_idORDER BY X.create_time DESC

2.根据用户的产品id 查询其他用户是大腕并且产品id 相符合

思路分析
1.查询当前用户,单独取出并放入 list集合
2.mybatis 使用foreach 进行遍历
3.循环所有用户,在sql层判断 其他用户的某个字段 是否包含传入的字段 使用instr内置函数

INSTR(STR,SUBSTR) 在一个字符串(STR)中搜索指定的字符(SUBSTR),返回发现指定的字符的位置(INDEX);
.size在sql中还可以判断list的长度

SELECT DISTINCT*FROMbook_contact_memberWHERE<if test="condition.goodsClassList != null and condition.goodsClassList.size != 0">and <foreach collection="condition.goodsClassList" index="index" item="item" open="(" separator="or" close=")">INSTR( goods_class, #{item} ) > 0</foreach></if>AND user_id != #{condition.userId}AND is_famous = 1

3.查询数据,-》 我的引荐-》通过我的userid 查询 我推荐过谁
思路分析
1.查询出我看过的所有人
2.排除 查看的是否是自己
返回结果memberId memberId是另外一张表的ID 所以两表关联查询

SELECTr.member_id,r.create_timeFROMbook_visit_card_recommand r,book_visit_card c WHERE r.member_id = c.member_id AND c.user_id != #{condition.userId}AND r.user_id = #{condition.userId}GROUP BY r.member_idorder by r.id desc


4.联合查询 UNION , 两张表的 相通数据,关联之后, 按照时间排序

SELECT DISTINCTx.*FROM(SELECT*FROMbook_contactWHERE user_id = #{condition.userId}AND contact_status = '0'UNIONSELECTc.*FROMbook_contact c,book_contact_member mWHERE c.id = m.contact_idAND m.user_id = #{condition.userId}) XORDER BY x.create_time DESC
  • 联合查询 根据一个表中的 同一个字段的不同值,分别查出数据 合并 按照时间排序
  • SELECT x.* FROM(SELECT n.* FROMbook_system_news n,book_contact c WHERE n.`contact_id` = c.`id` AND c.`user_id` = 'e9322b305ebd45d98adc1643aeece2e8' AND news_type IN ('checkContact', 'seachContact') UNIONSELECT n.* FROMbook_system_news n,book_contact_member m WHERE n.`member_id` = m.`id` AND m.`user_id` = 'e9322b305ebd45d98adc1643aeece2e8' AND news_type IN ('userContact')) X ORDER BY x.create_time DESC


    6.数据库的字段 是 访问量 ,每次网页被访问 数量+1 ,自增长

    <update id="updateOfferValue" parameterType="java.lang.String">update book_contact_memberSEToffer_value = (offer_value + 1)WHERE id = #{id}</update>

    //2020.5.23更新
    7.根据记录表查询的数据记录基础表 主要学习 case用法

    SELECT a.id,a.create_time,a.task_type,a.task_code,a.key_task,a.key_work,a.work_content,a.lead_depart_id,a.lead_depart,a.legal_duty_ids,a.legal_duty,a.current_stage,a.stage,b.task_status FROMdt_task_base a,(SELECTt1.task_id,case when t2.task_status IS NULL then 0 else 1 end as task_status -- t2.task_status FROM( SELECT task_id FROM dt_task_record WHERE response_companyid = '8a81e781720cbb8901720cbd79610013' GROUP BY task_id ) t1LEFT JOIN ( SELECT task_id, 1 task_status FROM dt_task_record WHERE issue_companyid = '8a81e781720cbb8901720cbd79610013' GROUP BY task_id ) t2 ON t1.task_id = t2.task_id ) b WHEREa.id = b.task_id and a.task_type ='1' limit 0, 20

    //2020.5.28 多条件搜索
    重点学习 多个对象like

    Sql: select count(*) from dt_task_base where (key_task like '%sss%' or task_code like '%sss%' or lead_depart like '%sss%' or legal_duty like '%sss%' or key_work like '%sss%' or work_content like '%sss%') and task_type = ?

    总结

    以上是生活随笔为你收集整理的自认为有必要学习的Sql 总结,积累 mybatis的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。