SQL进阶知识点总结

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/youngmiffy/article/details/84721159

一、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处理为合适的值;

猜你喜欢

转载自blog.csdn.net/youngmiffy/article/details/84721159