mysql细节

case when then 用法 和null 的判断

SELECT id ,(CASE   WHEN sex= ''  THEN 'bbbbb'
                   WHEN sex IS NULL THEN 'aaaaa' 
                   ELSE sex END  ) AS sex FROM aa;

case when 判断条件最好连用,避免出现不必要的问题(例如 case xx when is null 无法使用 )

Sql子查询Not In 无结果

select * from ITEM where item_id not in (select parent_item_id from ITEM )

查询效果无任何匹配值
原因:not in 解析后的执行语句是(id!=1 and id!=2 and id!=null)
空值存在将会导致条件整体失败,所以无任何匹配数值。
解决:排除空值

select * from ITEM where item_id not in (select parent_item_id from ITEM where parent_item_id is not null)

not in 是and条件,不能有null值。

MySQL实现差集(Minus)和交集(Intersect)

https://www.linuxidc.com/Linux/2014-06/103551.htm
尽量用子查询,and 实现交集,not in 实现差集

TRUNCATE()函数

  • TRUNCATE(X,D) 是MySQL自带的一个系统函数。
  • 其中,X是数值,D是保留小数的位数。
  • 其作用就是按照小数位数,进行数值截取(此处的截取是按保留位数直接进行截取,没有四舍五入)。

规则:

  • 当 D 大于0,是对数值 X 的小数位数进行操作;
  • 当 D 等于0,是将数值 X 的小数部分去除,只保留整数部分;
  • 当 D 小于0,是将数值 X 的小数部分去除,并将整数部分按照 D 指定位数,用 0 替换。
SELECT TRUNCATE(123.4567, 2);   # 123.45
SELECT TRUNCATE(123.4567, 0);   # 123
SELECT TRUNCATE(123.4567, -2);  # 100
SELECT TRUNCATE(123.4567, -3);  # 0

and 和 or 同时使用

and的优先级是高于or的, 且是右先运算, 以where a=0 or b=0 and c=0为例,

先运行 b=0 and c=0 条件, 取出结果,

然后运行a=0条件, 取出结果, 并合并结果.

!!!删除注意

删除之前使用对应的select语句,查看是否是需要更新的数据。

数据更新

有专门的表
(自增主键 创建人 创建时间 更新人,更新时间)

复杂查询思路

遇到查询多列的复杂sql,看是否可以拆解,比如分为几部分,然后组合

count(1)、count(*)和count(字段名)

count(1)和count(*):都为统计所有记录数,包括null
count(字段):统计字段列的行数,不包括null

  • 列名为主键,count(列名)会比count(1)快
  • 列名不为主键,count(1)会比count(列名)快
  • 如果表多个列并且没有主键,则 count(1) 的执行效率优于 count(*)
  • 如果有主键,则 select count(主键)的执行效率是最优的
    如果表只有一个字段,则 select count(*)最优。

MySQL的几种join方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值