NULL值的处理和逻辑操作||分组函数(从实践中学习Oracle SQL 第五章 第六章)

来源:互联网 发布:重庆七腾软件 编辑:程序博客网 时间:2024/06/05 15:17
一、NULL的使用
1.一个表达式中包含任何NULL(空值),该表达式的值就为NULL
2.=null 和 !=null 都不可以,因为没办法证明NULLd等于某个值也不能证明NULL不等于某个值


引入is NULL 和 is not NULL 来处理这类问题


3.空值(NULL)的排序   --->升序排序NULL在最后,降序排序NULL在最前面


二、NULL逻辑表达式和逻辑运算符
  1.AND运算的优先级
  F----->NULL-------->T
  F AND NULL-->F
  T AND NULL-->NULL
  NULL AND NULL -->NULL
  2.OR 运算的优先级
  T----->NULL-------->F
  T OR NULL -->T
  F OR NULL -->NULL
  NULL OR NULL -->NULL
  3.NOT  NOT NULL-->NULL
三、运算符的优先级
  算数运算符->连接运算符->比较(关系)运算符->IS NULL,IS NOT NULL,LIKE,NOT LIKE ->BETWEEN  NOT BETWEEN ->NOT->AND->OR


  使用易混淆的运算符的时候最好加上括号,免的混乱
  SELECT *
  FROM EMP
  WHERE job='CLERK'
  OR job='SALESMAN'
  AND sal>=1300
  首先找到工资在1300元以上(包含1300)的销售人员,再找到所有的文员 。最后合并出最后的结果
四、NVL函数
  NVL 函数是一个空值转换函数
  NVL(表达式1,表达式2) 如果表达式1为空值(NULL),NVL返回值为表达式2的值,否则返回表达式1的值。该函数目地是将NULL转换成一个实际的值。表达式1和2的数据类型必须一致


  有经验的开发人员会在开发的SQL语句中经常使用NVL语句
五、DECODE函数
  Oracle中的分支语句
  与case语句类似


  CASE job  WHEN 'SALESMAN' THEN sal*1.15
            WHEN 'CLERK'    THEN sal*1.20
            WHEN 'ANALYST'  THEN sal*1.25
            ELSE                 sal*1.40  
            END 
            as "New Salary"


  DECODE(job,'SALESMAN',sal*1.15,
              'CLERK'  ,sal*1.20,
              'ANALYST',sal*1.25,

                        sal*1.40) as "New Salary"


六、分组函数的空值问题

  除了COUNT(*)  之外,其他的分组函数都不处理NULL(以AVG为例加和时NULL不参与计算相除时NULL行不计入个数)

使用NVL 进行空值的处理

AVG(NVL(comm,0)



如果在一个查询中使用了分组函数,任何不在分组函数中的列或表达式必须在GROUP BY子句中。如果在一个查询中所使用的限制条件中包括了分组函数,则该限制条件必须放在HAVING子句中而不能放在WHERE子句中。MIN和MAX函数不但可以用于数字型数据而且还可以用于字符型数据和日期型数据。)

 

0 0
原创粉丝点击