MySQL学习笔记(四)

317 阅读4分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

1.1.4 数据处理函数
  • 数据处理函数又被称为单行处理函数

  • 特点:一个输入对应一个输出

    函数名函数功能
    lower转换小写
    upper转换大写
    substr取子串(substr(被截取的字符子串,起始下标,截取的长度))
    length取长度
    trim去空格
    str_to_date将字符串转换成日期
    date_format格式化日期
    format设置千分位
    round四舍五入
    rand()生成随机数
    ifnull可以将null转换成一个具体值
 // 单行处理函数
 1、lower / upper  转换大小写
  【案例】:将员工姓名转换成小写
  select lower(ename) from emp ;
 ​
 2、substr  取子串
 【格式】:substr(字符串 , 起始下标 , 截取长度)      起始下标从1开始
 【案例】:请找出员工名字第一个字母是A的员工信息
  select ename from emp where ename like 'a%' ;
  select ename from emp where substr(ename , 1  1) = 'A' ;      // 注意是一个等号
 ​
 3、length
 【格式】:length(字段名)
 【案例】:求取员工姓名的长度,并更名为enamelength
  select length(ename) as enamelength from emp ;
 ​
 4、trim         去空格
 【格式】: select 字符段 from 表名 where 字符段 = trim('传过来的数据');
 【案例】: 查询king的数据
  select * from emp where ename = trim('  king '); 
 ​
 5、str_to_date   将字符串varchar转换成date 类型
  【格式】:str_to_date('字符串日期''日期格式') ;
         日期格式:年月日时分秒分别为: %Y , %m , %d , %h , %i , %s ;
  【案例】:向t_user表中插入一个数据,将字符串类型转换成日期类型
  insert into t_user (id , name , birth) values (1 , 'zhangsan' , str_to_date('01-10-1990' , '%d-%m-%Y')) ;
  【注意】:如果输入的格式是 %Y-%m-%d , 则转换函数可以省略。
 ​
 6、date_format   将date类型转换成具有一定格式的varchar字符串类型
  【格式】:date_format(字段名 ,'日期格式')
  【案例】:查询t_user表中的名字和生日
  select name , date_format(birth , '%Y-%m') as birth from t_user ;
 ​
 7、format    数字格式化
 【格式】:format (数字 , ‘格式’);
 mysql> select empno , ename , Format(sal , '$999,999') from emp ;
 +-------+--------+--------------------------+
 | empno | ename  | Format(sal , '$999,999') |
 +-------+--------+--------------------------+
 |  7369 | SMITH  | 800                      |
 |  7499 | ALLEN  | 1,600                    |
 |  7521 | WARD   | 1,250                    |
 |  7566 | JONES  | 2,975                    |
 |  7654 | MARTIN | 1,250                    |
 |  7698 | BLAKE  | 2,850                    |
 |  7782 | CLARK  | 2,450                    |
 |  7788 | SCOTT  | 3,000                    |
 |  7839 | KING   | 5,000                    |
 |  7844 | TURNER | 1,500                    |
 |  7876 | ADAMS  | 1,100                    |
 |  7900 | JAMES  | 950                      |
 |  7902 | FORD   | 3,000                    |
 |  7934 | MILLER | 1,300                    |
 +-------+--------+--------------------------+
 14 rows in set, 14 warnings (0.06 sec)
 ​
 ​
 8、round        四舍五入(可以有负数,负数表示相应的整数位数 ; 可以有小数,也是四舍五入保留位数 : 0.40.6 保留的位数就不一样)
 【格式】: select round(值, 保留的小数位数) from 表名 ;
 【案例】: 测试  1236.567  的四舍五入值
   select round(1236.567 , 0) as result from emp ;
 ​
 9、rand()      生成随机数  , 也会借助表的结构
 【格式】:  select rand() as result from emp ;
 【案例】:生成 100 以内的 随机数
   select round(rand() * 100) as result from emp ;
 ​
 10、ifnull       可以将null转换成一个具体值
 【注意】:在数据库之中,只要有null参与的数学运算 , 结果均为null
 【格式】:ifnull(数据 , 被当做的值) 
 【案例】:将null 改为0 , 计算员工的年薪 , 并重命名为yearsal
  select ename , (sal + ifnull(comm , 0)) * 12 as yearsal from emp ;
 ​
 10、concat    字符串拼接
 【案例】:将员工的姓名和员工的编号拼接起来
  select concat(ename , empno) from emp ;
  
 11case.. when... then... when... then...else... end ....
 【案例】:当员工的岗位是manager的时候,工资上调10% , 当工作岗位是salesman的时候,工资上调50% (注意:不修改数据库)
  select ename , job , sal as oldsal ,(case job when 'manager' then  sal*1.1 when 'salesman' then sal * 1.5  else sal end) as newsal from emp order by sal asc , ename  desc ;
  
  
 【案例】:将员工信息以首字母大写的形式展现出来         
  select concat(upper(substr(ename , 1 , 1)) , lower(substr(ename , 2 , length(ename) - 1)) ) as ename from emp ; 
1.1.5 分组函数
  • 概念:分组函数又被称为聚合函数、多行处理函数

  • 特点:多个输入对应一个输出

    函数名函数功能
    count取得记录数
    sum求和
    avg取平均值
    max取最大的数
    min取最小的数
  • 注意:

    • 1、分组函数在使用的时候必须先进行分组,然后才能用;如果进行分组,整张表为一个组

    • 2、分组函数会自动忽略null , 不需要提前进行处理

    • 3、分组函数count(*)和count(字段)的区别

      • count(具体字段) : 表示统计该字段下所有不为null的元素的总数
      • count(*) : 只要有一行数据,count则++
    • 4、分组函数不能够直接使用在where子句中

      • 执行顺序:from、 where 、 group by、select 、 order by
      • 因为执行where 语句的时候 尚未分组 ,所以会报错
    • 5、所用的分组函数可以组合起来一起用

 // 多行处理函数
 1、count 
 【案例】:求出员工数量总和
 select count(ename) from emp ;
 ​
 2、sum
 3、avg
 4、max
 5、min
 ​
 【案例】:同时计算所有员工的工资总和、最高工资、最低工资、平均工资、总数
   select sum(sal) , max(sal) , min(sal) , avg(sal) , count(sal) from emp ;
   +----------+----------+----------+-------------+------------+
  | sum(sal) | max(sal) | min(sal) | avg(sal)    | count(sal) |
  +----------+----------+----------+-------------+------------+
  | 29025.00 |  5000.00 |   800.00 | 2073.214286 |         14 |
  +----------+----------+----------+-------------+------------+