SQL进阶知识点总结

一、CASE表达式(类似DECODE,IF) 1、两种表达式
--简单case表达式
case sex
	when '1' then '男'
	when '2'then '女'
	else '其它' end
--搜索case表达式
case 
	when sex='1'then '男'
	when sex='1'then '女'
	else '其它' end

注意事项:

  1. 各分支条件返回的数据类型必须一致;
  2. 不要忘记写end;
  3. 养成写else子句的习惯;
2、解决场景如下:
  • 行列转化:将group by计算出来的一维表进行行列转换,变成类似数据透视图的二维表;
  • 已有数据重新更新:用case的时候只执行一次,防止了用两次update的时候第一次被更新的值用在了第二次的语句中,重复更新发生错误;
  • 与约束的结合:check是对列值输入的时候加了限制,在使用check加限制的时候结合case when可以结合其他的列进行限制,更加灵活;
  • 表之间的数据匹配:不同的表匹配涉及到(in,exists的用法)
  • 针对聚合结果的条件分支:在case中可以使用聚合函数,在聚合函数中也可以使用case表达式
  • 特别说明:新手用where、having子句进行分支,高手用select进行分支;
二、自连接 1、用自连接实现可重排列、排列、组合
  • 直接取数就是笛卡尔积,就是可重排列;加上where条件就是排列,加上where条件就是组合;
2、查找局部不一致的列; 3、排序(不依赖与数据库特有函数的排序,可拓展); 三、三值逻辑和NULL
  • 三值:true false unknown;
  • null不是值,对null使用比较谓词后得到的结果就是unknown,因为比较谓词只适用于值
  • in 和exists 可以互相替代使用,但是not in和 not exists不能互相替换,如果有null的时候,需要使用not exists;
  • 极值函数在统计时会把null的数据排除掉;但是如果数据存在比较对象为空的时候,建议使用all,或者使用coalesce函数将返回的null处理为合适的值;
最新回复(0)
/jishuE8nmqZmjuTYMirT6_2Bi_2BJKjXZ7OV_2BOCjrOYlDcw_3D_3D4488720
8