其他函数

一、If
     语法:IF(expr1,expr2,expr3) 
    描述:如果 expr1 是 TRUE,则返回值 expr2;否则返回值  expr3。IF() 的返回值为数字值或字符串值,具体情况视其所在语境而定。
  mysql> SELECT IF(1>2,2,3);
 3
  mysql> SELECT IF(1<2,'yes ','no');
 'yes'
  mysql> SELECT IF(STRCMP('test','test1'),'no','yes');
 'no'
        expr1 作为一个整数值进行计算,就是说,假如你正在验证浮点值或字符串值,那么应该使用比较运算进行检验。
  mysql> SELECT IF(0.1,1,0);
 0
  mysql> SELECT IF(0.1<>0,1,0);
 1
    在上面的第一个例子中,IF(0.1)的返回值为0,原因是 0.1 被转化为整数值,从而引起一个对 IF(0)的检验。这或许不是你想要的情况。在第二个例子中,比较检验了原始浮点值,目的是为了了解是否其为非零值。比较结果使用整数。
二、控制流程函数 Case
    CASE 是SQL 用来做为 if-then-else 之类逻辑的关键字。
    语法:CASE value WHEN [compare-value] THEN result
         [WHEN [compare-value] THEN result ...]
         [ELSE result]
    END
        或者
         CASE WHEN [condition] THEN result 
        [WHEN [condition] THEN result ...] 
        [ELSE result]
        END 
    描述:在第一个方案的返回结果中, value=compare-value。而第二个方案的返回结果是第一种情况的真实结果。如果没有匹配的结果值,则返回结果为ELSE后的结果,如果没有ELSE 部分,则返回值为 NULL。"条件" 可以是一个数值或是公式。ELSE 子句则并不是必须的。
  mysql>  SELECT CASE 1 WHEN 1 THEN 'one'
          ->  WHEN 2 THEN 'two' ELSE 'more' END;
 'one'
  mysql>  SELECT CASE WHEN 1>0 THEN 'true' ELSE 'false' END;
 'true'
  mysql> SELECT CASE BINARY 'B'
          ->  WHEN 'a' THEN 1 WHEN 'b' THEN 2 END;
 NULL
三、检查NULL值 IFNULL函数
    语法:IFNULL(expr1,expr2) 
    描述:假如expr1 不为 NULL,则返回值 expr1; 否则返回值 expr2。IFNULL()的返回值是数字或是字符串,具体情况取决于其所使用的语境。
  mysql> SELECT IFNULL(1,0);
 1
  mysql> SELECT IFNULL(NULL,10);
 10
  mysql> SELECT IFNULL(1/0,10);
 10
  mysql> SELECT IFNULL(1/0,'yes');
 'yes'

【参考资料】
W3SChool 在线SQL教程 http://www.w3SChool.com.cn/sql/sql_func.asp  SQL 函数
   http://www.w3SChool.com.cn/sql/sql_func_avg.asp  SQL AVG 函数
   http://www.w3SChool.com.cn/sql/sql_func_count.asp  SQL COUNT() 函数
   http://www.w3SChool.com.cn/sql/sql_func_max.asp  SQL MAX() 函数
   http://www.w3SChool.com.cn/sql/sql_func_min.asp  SQL MIN() 函数
   http://www.w3SChool.com.cn/sql/sql_func_sum.asp  SQL SUM() 函数
   http://www.w3SChool.com.cn/sql/sql_func_len.asp  SQL LEN() 函数
   http://www.w3school.com.cn/sql/sql_func_round.asp  SQL ROUND() 函数
   http://www.w3school.com.cn/sql/sql_dates.asp  SQL Date 函数
   http://www.w3SChool.com.cn/sql/sql_func_now.asp  SQL NOW() 函数
   http://www.w3SChool.com.cn/sql/sql_func_format.asp  SQL FORMAT() 函数

课后练习:
     1. 判断正误
       1)AVG 函数返回全部行里指定字段的平均值,包括 NULL 值。
       2)SUM 函数用于统计字段之和。
       3)COUNT(*) 函数统计表里的全部行。
       4)当查询里出现函数嵌套时,最外层的函数会首先被处理。
     2. 下面的 SELECT 语句能运行吗?如果不行,应该如何修改?
 a.
 SELECT COUNT(*)
 FROM EMPLOYEE_PAY_TBL;
 b.
 SELECT COUNT(EMP_ID),SALARY
 FROM EMPLOYEE_PAY_TBL;
 c.
 SELECT MIN(BONUS), MAX(SALARY)
 FROM EMPLOYEE_PAY_TBL;
 WHERE SALARY > 20000;
 d.
 SELECT COUNT(DISTINCT PROD_ID)
 FROM PRODUCTS_TBL;
 e.
 SELECT AVG(LAST_NAME) FROM EMPLOYEE_TBL;
 f.
 SELECT AVG(PAGER) FROM EMPLOYEE _TBL;
     3. 利用 learnsql 数据库里的表 EMPLOYEE_TBL 构造 SQL 语句,完成如下练习:
       1)平均薪水是多少?
       2)最高奖金是多少?
       3)总薪水是多少?
       4)最低小时工作是多少?
       5)表里有多少行记录?
     4. 编写一个查询,来确定有多少雇员的姓以 G 开头?
     5. 编写一个查询,来确定系统中所有订单的总额。如果每个产品的价格是$10.00,全部订单的总额是多少?
     6. 如果所有雇员的姓名按照字母表排序,那么编写一个查询,来确定第一个和最后一个雇员的姓名是什么?
     7. 编写一个查询,对雇员姓名列使用AVG函数。查询语句能运行吗?思考为什么会产生这样的结果。
     8. 匹配下面的字符串函数与其描述:
    描述                                       函数
    a. 从字符串里选择一部分                    CONCAT
    b. 从字符串左侧或右侧剪切字符串            RPAD
    c. 把全部字符都改变为大写                  LPAD
    d. 确定字符串的长度                        RTRIM
    e. 连接字符串                              UPPER
                f.  字符替换                               LTRIM
                                                LENGTH
                                                REPLACE
                                                SUBSTRING
     9. 输入如下命令,把每个雇员的姓和名连接起来:
 SELECT CONCAT(LAST_NAME, ',', FIRST_NAME)
 FROM EMPLOYEE_TBL;
     10. 输入以下MySQL命令,显示每个雇员的完整姓名和电话区号:
 SELECT CONCAT(LAST_NAME, ',', FIRST_NAME),SUBSTRING(PHONE,1,3)
 FROM EMPLOYEE_TBL;
     11. 编写一个SQL语句,列出雇员的电子邮件地址。电子邮件地址并不是数据库里的一个字段,雇员的电子邮件地址应该由以下形式构成:FIRST,LAST@ERPTECH.COM
 举例来说,John Smith 的电子邮件地址是JOHN.SMITH@ERPTECH.COM。
     12. 编写一个SQL语句,以如下形式列出雇员的姓名、ID和电话号码。
  1)姓名显示为 SMITH,JOHN;
  2)雇员ID显示为 999-99-9999;
  3)电话号码显示为 (999)999-9999。
     13. 输入以下 SQL 代码,从服务器显示当前日期、时间:
 SELECT CURRENT_DATE;
 SELECT NOW();
     14.  输入以下 SQL 代码,显示每名雇员的受雇日期:
 SELECT EMP_ID, DATE_HIRE
 FROM EMPLOYEE_PAY_TBL;
      15. 在MySQL里,通过联合使用 EXTRACT 函数与 MySQL 日期描述,我们能够以多种格式显示日期。
          输入以下代码显示每名雇员的受雇年份:SELECT EMP_ID, EXTRACT(YEAR FROM DATE_HIRE) FROM EMPLOYEE_PAY_TBL;
      16. 输入以下语句,显示当前日期和每名雇员的受雇日期: SELECT EMP_ID, DATE_HIRE, CURRENT_DATE FROM EMPLOYEE_PAY_TBL;
      17. 每名雇员是在星期几被雇用的?
      18. 今天是一年中的第几天?
      19. 输入3行SQL代码,第一行获得系统时间,第2行将系统时间转换成日期型数据,第3行将系统时间转换成时间值。