目录
MYSQL个人语法规范
- 联表查询使用别名要做好命名规范,最好都是小写,有些服务器的数据库加入设置了区分大小写,则部署项目会出错!!!
基础使用
1.LEFT JOIN
⛄️基础使用
select *
from 主表
LEFT JOIN 次表 ON 条件
⚡️ ⚡️ ⚡️ 避坑!
1️⃣ 当LEFT JOIN 的表数据行大于主表的数据行的时候,并且被select出来的时候,会出现大于一行的重复数据,需要去重,或者在 ON 后加多条件让次表数据行与主表数据行统一。
函数、常用关键字、基础语法杂合
1.CASE WHEN
⛄️基础使用
第一种: case 列名
when 条件值1 then 选项1
when 条件值2 then 选项2.......
else 默认值 end.
第二种: case
when 列名= 条件值1 then 选项1
when 列名=条件值2 then 选项2.......
else 默认值 end
⚡️ ⚡️ ⚡️ 避坑
!
1️⃣ CASE WHEN最后的结果在同层无法被where后的条件找到,case when优先级低,要在外层包一层才能获取到CASE WHEN后的数据。
2.CONCAT、CONCAT_GROUP
⛄️基础使用
CONCAT(v1,v2,v3)是拼接函数。什么情况用CONCAT_GROUP呢,假如你SELECT NAME FROM STUDENT,搜出了一列name的数据,在外层再使用 SELECT CONCAT_GROUP(NAME) FROM (SELECT NAME FROM STUDENT)
则可将name拼接起来。
⚡️ 避坑
1️⃣
CONCAT(A,B,C)
假如ABC中关键查询的结果B为null,AC都有值,则最后拼接的结果也会为NULL,在使用中要避免出现null的情况,可以考虑用IF or IFNUL 去避免null的情况
3.IF(expr,v1,v2)、IFNULL(v1,v2)
⛄️基础使用
字面意思
⚡️ 避坑
1️⃣ IFNULL(V1,V2),如果V1为N/A,也就是V1的查询,数据库中不存在这条数据,时,会无法获取到这个N/A类型,这时候可以使用聚合函数MIN或者MAX,让N/A类型变为NULL,以此进入IFNULL函数
select IFNULL(MIN(SEND_FROM), '123123') AS SEND_FROM from plg_idts where DID = 3965
4.DISTINCT、GROUP BY
⛄️基础使用
DISTINCT是当全部字段相同的时候去重,GROUP BY是当后面的加的字段相同时去重。
⚡️ 避坑
1️⃣ 对于5.7版本后的GROUP BY:
select a,b,c from table group by a,b; --(正确) only_full_group_by规则: group by 后的需要跟前面的select保持一致。
select a,b from table group by a,b,c; --(错误)
5.instr()
⛄️基础使用
1.获取位置
Instr() 函数返回字符或字符串在另一个字符串中第一次出现的位置.
SELECT INSTR(‘123_2_3’, ‘_’); 结果为4,也就是说只会查“—”第一次出现的位置,而且位置是从1开始数不是0。
2.与 LIKE
举例比较
SELECT * FROM STUDENTTAB WHERE STUNAME LIKE ‘%张%’;
就相当于
SELECT * FROM STUDENTTAB WHERE INSTR(STUNAME, ‘张’) > 0;
SELECT * FROM STUDENTTAB WHERE STUNAME NOT LIKE ‘%张%’;
就相当于
SELECT * FROM STUDENTTAB WHERE INSTR(STUNAME, ‘张’) = 0;
总结: FROM 51CTO博客-zhuyeshen-instr和like的使用区别
<1> instr>0 和like、instr=0 和not like 一般来说查询的结果相同(不考虑特殊字符)
<2> instr是一个函数,可以建立函数索引,如果过滤的条件有索引,那么instr就可以提高性能。
<3> like查询时,以’%'开头,列所加的索引是不起作用的。
<4> 在没有索引的前提下,当数据量比较大时,instr要比like效率高。
6.cast()
⛄️基础使用
CSDN-山茶花开时-[Mysql] CAST函数
聚合函数
1.MAX()
⚡️ 避坑
转至
博客园-恶魔のWaltz-MySQL中varchar无法使用max()函数的解决办法
1.MAX()中 varchar 存数字的字段 可能会存在无法获取到最大值的情况,这时候的解决方案有
(1) SELECT MAX(field+0) FROM tablename
(2) 或者使用 cast函数 SELECT MAX(cast(field as decimal)) FROM tablename