mysql 经典50语句练习心得

1)decode函数使用 : 

decode()是oracle数据库的一种函数,类似于java中if三目运算,在mysql中是没有decode()函数的,但mysql中可以用if语句h或case when来代替,举个例子;

a) decode()在oracle 表示:

      decode(node_count ,null, 0, 1)  node_count 字段为null时则值为0,否则为1
b) 转换成mysql   语句 if:

     if(node_count=null,0,1)
c) 转换成mysql  case when 语句:

   (case when node_count=null then 0 else 1 end)

 

2)MySQL 中NULL和空值的区别

平时我们在使用MySQL的时候,对于MySQL中的NULL值和空值区别不能很好的理解。注意到NULL值是未知的,且占用空间,不走索引,DBA建议建表的时候最好设置字段是NOT NULL 来避免这种低效率的事情的发生。

问题 1: 首先,我们需要搞清楚 "空值" 和"NULL"的概念:

    1:空值('')是不占用空间的

    2: MySQL中的NULL其实是占用空间的

注意事项:

1:在进行count()统计某列的记录数的时候,如果采用的NULL值,会别系统自动忽略掉,但是空值是会进行统计到其中的。

2: 判断NULL 用IS NULL 或者 is not null,SQL 语句函数中可以使用ifnull()函数来进行处理,判断空字符用 =''或者<>''来进行处理

3: 对于MySQL特殊的注意事项,对于timestamp数据类型,如果往这个数据类型插入的列插入NULL值,则出现的值是当前系统时间。插入空值,则会出现 '0000-00-00 00:00:00'

4:对于空值的判断到底是使用is null 还是 =''要根据实际业务来进行区分。

 

3)MySQL left join on 的使用误区

-- [1] 错误写法

SELECT a.uid FROM LEFT JOIN ON a.uid=b.uid AND b.uid IS NULL

    WHERE 

-- [2] 正确写法

SELECT a.uid FROM LEFT JOIN ON a.uid=b.uid 

    WHERE b.uid IS NULL 

备注 :left join ..on
on后面的条件判断全部是针对left join的表
而不会对from的表做判断
where才会对from的表做判断
你这两个语句不是同一个意思啊
第一个肯定不是你要的结果,第二个菜式。

 


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值