sql 条件判断 if / case when then / ifnull

余生颓废 提交于 2020-02-03 01:22:12

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的子查询依然能用到表上的索引
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!