1 if 和 ifnull
-
if 类似三元运算符,if(?=?,a,b) 为true等于a,false等于b,类似三元表达式
-
ifnull函数用于在MySQL中将NULL值替换为另外一个值
2 case 流程控制
简单case函数
枚举某个字段 或者 某个字段函数的所有值
如:
CASE country
WHEN '中国' THEN
'亚洲'
WHEN '美国' THEN
'北美洲'
WHEN '日本' THEN
'亚洲'
ELSE
'其他'
END
case搜索函数
类似if,case搜索函数可以写判断,找到第一个符合条件的case即结束
CASE
WHEN population > 80 THEN
'大'
ELSE
'小'
END
- 配合count(), sum()实现分段统计
3 not in 和 not exists
- null值代表未知的数据,比较运算符,比如=、< 或 <>,无法用来测试null值,必须使用 IS NULL 和 IS NOT NULL 操作符
- not in 子查询在有null的情况下,则均返回null
in 和 exist
- in 将内表和外表作hash连接。hash连接:一个表作为hash表,去扫描另一个表的每行数据,用得出来的行数据建立新的hash表,hash表存放在内存
- exist 对外表作loop循环,分为内外表,每扫描外表的一行数据都要在内表中查找与之相匹配的行,没有索引的复杂度是O(N*M)
- 效率对比:两个表中一个较小一个较大,则子查询表大的用exists,子查询表小的用in;
not in 和 not exist
- not in,对内外表都进行全表扫描,没有用到索引
- not exists的子查询依然能用到表上的索引
来源:CSDN
作者:钉洲小懒猫
链接:https://blog.csdn.net/zxiang_123/article/details/104141608