sql 语句基本操作(持续更新)

1.date(o.ltime) = curdate()  //取当天的时间

2.o.ltime > date_sub(curdate(),interval 30 day) //时间30天内

3.sum(ifnull(cp.money,0))  //如果某个值为空,返回0

4.count 与 sum 区别

count()函数里面的参数是列名的的时候,那么会计算有值项的次数。 (NULL 不计入, 但是''值计入)

Sum()函数里面的参数是列名的时候,是计算列名的值的相加,而不是有值项的总数。

5.mysql  使用instr函数判断一个字符串是否包含在另外一个字符串里面

(这个明明应该有很多方法 like in都可以啊  但是由于是在 左联表的情况下 么有写出来

如下:select * from  table1 left join table2 on instr(str1,str2)>0 即可!

使用 like in //这个很坑的,现在发现执行效率很慢

)

6.CONCAT(s.province,'-',s.city)  //合并返回两个  合并字符串

7.ELT(n,str1,str2,str3,...) :如果n=1,则返回str1,如果n=2,则返回str2,依次类推。如果n小于1或大于参数个数,返回NULL。

ifnull(ELT(s.type,'美食','观影','加油','超市','娱乐','健身'),'其他')  //ELT函数

8."<>" mysql中  就是 !=

9.CONCAT(str1,str2,…)

返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。

10.case when customerOrderDiscount.amount > 0 then '随机立减,“油”惠升级' else '' end

case when 语句 如果条件1 则返回结果1 else  切记加入end  (没加的时候报错了 哈哈哈)





1.group_concat

一般与group by 连用  ,group_concat() 将内部不同的字段进行合并 很好用 

生产中的应用场景:

在数据库中group by 一列查询出若干行数据,sql如下:

select * from table group by 列字段;

合并查询出的列:

selectGROUP_CONCAT(查询的字段 separator ‘;’) from table group by 列字段;

group_concat(distinct customerOrder.orderId SEPARATOR ',')

得到结果:13588296,13590074,13589204,13589867

2.distinct    mysql count distinct 统计结果去重

3.date_format(o.ltime,'%Y-%m-%d %h:%i:%s')  返回 年月日时分秒

4.  round(122.2223,2)     mysql保留2位小数


union 与 union all 的区别

UNION用的比较多union all是直接连接,取到得是所有值,记录可能有重复  union 是取唯一值,记录没有重复  1、UNION 的语法如下:

[SQL 语句 1]

UNION

[SQL 语句 2]

2、UNION ALL 的语法如下:

[SQL 语句 1]

UNION ALL

[SQL 语句 2]

效率:

UNION和UNION ALL关键字都是将两个结果集合并为一个,但这两者从使用和效率上来说都有所不同。

1、对重复结果的处理:UNION在进行表链接后会筛选掉重复的记录,Union All不会去除重复记录。

2、对排序的处理:Union将会按照字段的顺序进行排序;UNION ALL只是简单的将两个结果合并后就返回。

从效率上说,UNION ALL 要比UNION快很多,所以,如果可以确认合并的两个结果集中不包含重复数据且不需要排序时的话,那么就使用UNION ALL。

你可能感兴趣的:(sql 语句基本操作(持续更新))