Mysql中的小技巧

遇見你真好!發表於2021-12-19

1.where 欄位名 regexp '正規表示式'

正則符號: ^ $ . [ ] * |
  . 表示1個任意字元
  * 表示前面重複0次,或者任意次
  ^ 開始
  $ 結尾
  [] 範圍
  | 或                         

sql示例:

#查詢以【李】開頭的
select name from user where name regexp '^李';
#查詢以【小】結尾的
select name from user where name regexp '小$';
#查詢以【李】開頭,中間任意,結尾以【四】的
select name from user where name regexp '^李.*四$';
#查詢名字以【李】開頭,或者以【小】結尾的
select name from user where name regexp '^李|小$';

2. instr、concat搜尋和連線字串

資料欄位中存放的是id集,形如  1,2,15,35 也可類推json格式
查詢時不用拆分了, 用上 instr、concat搜尋和連線字串
查詢ids中包含15的

sql示例:
select * from [table-表名] where instr(concat(',', ids, ','), ',15,') > 0

3.查詢時,多個欄位 like 同個值

like多個值 and和的關係
like多個值 or的關係  可用regexp

sql示例:
select * from user where name regexp '張三|李四'

4.查詢結果過濾

having用法:
SQL查詢 having 條件表示式;就是在查詢結果中再查詢一次

sql示例:
select name from user where name !="李四" having name="李小小";

5.mysql內建對資料進行統計的指令

聚焦函式:
  avg(欄位名)
  sum(欄位名)
  min(欄位名)
  max(欄位名)
  count(欄位名)

sql示例:

##查詢名字不等於李四的人員的平均分數
select avg(score) from user where name != "李四";
##查詢最高分數
select max(score) from user;
##查詢最低分數
select min(score) from user;
##查詢總分數
select sum(score) from user;
##統計user表中的行數
select count(*) from user;

6.mybatis中mapper.xml where下foreach寫法

A寫法:

<where>
  ID in
   <foreach close=")" collection="array" item="ids" open="(" separator=",">
      '${ids}'
    </foreach>
</where>

B寫法:

<where>
  <if test="ids!= null and ids.size() > 0">
        and id in
        <foreach collection="ids" item="item" index="index" open="(" separator="," close=")">
            #{item}
        </foreach>
  </if>​
<where>

相關文章