SQL入门第二篇——函数

简介: 单行处理函数的特点:一个输入对应一个输出多行处理函数的特点:多个输入对应一个输出单行处理函数有哪些

SQL入门第二篇——函数

数据处理函数

  • 单行处理函数的特点:一个输入对应一个输出
  • 多行处理函数的特点:多个输入对应一个输出
  • 单行处理函数有哪些
Lower 转换小写
Upper 转换大写
substr 取字串(被截取的字符串,起始,截取长度);
length 取长度
trim 去空格
str_to_date 将字符串转换成日期
date_format 格式化日期
format 设置千分位
round 四舍五入
rand() 生成随机数
ifnull 可以将null转换成一个具体值
  • Lower 转换小写 Upper 转换大写
    select lower(ename) from emp;
    如果ename那一列有15个数据就会有14个输入和15个输出
    select upper(ename) from emp;
    一样的只不过相反而已
  • substr 取字串(被截取的字符串,起始,截取长度);
    找出员工名字第一个字母是A的员工信息
    第一种方法:模糊查询,这里就不演示了
    第二种方法:substr函数
    select ename from emp where substr(ename,1,1) = 'A';
  • length 取长度
    取出员工名字的长度
    select length(ename) from emp;
  • trim 取空格
    select * from emp where ename = ('   KING');
  • round 四舍五入
    对1236.567取一位小数
    select round(1236.567,1) as result from emp;
    对1236.567小数点前一位四舍五入
    select round(1236.567,-1) as result from emp;
  • rand() 取随机数
    取一百以内的随机数
    select round(rand() * 100,0) from emp;
  • ifnull(字段,0)将一个为null转换为具体值
    计算总体员工的年薪(月工资+月补助)*12考虑到月补助有可能为null需要使用ifnull 赋值 因为null也会参与运算,那样的话他的年薪都没有了肯定不开心
    select ename,(sal + ifnull(comm,0)) *12 as yearsal from emp;
  • 还有一个语句做补充:case...when..then..when..then...else..end 类似于switch语句
    当员工的工作岗位是MANAGER的时候,给你工资上调10%,当工作岗位是SALESMAN的时候,工资上调50%,其他正常(这里不修改数据库,只作为显示)
    select ename,job,sal,(case job when 'MANAGER' then sal * 1.1 when 'SALESMAN' then sal * 1.5 else sal end) from emp;

分组函数(多行处理函数)

  • 多行处理函数的特点:多个输入对应一个输出
  • 分组函数在使用的时候必须先分组,然后才能使用如果没有分组整张表默认为一组
count 计数
sum 求和
min 最小值
max 最大值
avg 求平均值
  • min/max
    计算最低工资
    select min(sal) from emp;
    计算最高工资
    select mxa(sal) from emp;
  • sum
    求工资总和
    select sum(sal) from emp;
  • 求平均工资
    select avg(sal) from emp;
  • 求员工总量
    select count(ename) from emp;
  • 分组函数需要注意哪些
  1. 分组函数自动忽略null
  2. 分组函数count( * )和count(具体字段)区别在于count(具体字段)只记录具体字段的行数,count(*)记录总行数
  3. 分组函数不能够直接使用在where子句中

分组查询(很重要)

  • 当我们知道对某个部门的工资和就需要使用
  • select ..... from ....where...gruop by....order by....
  • 执行顺序:from > where > gruop by > select > order by 所以我们知道了为什么上面说分组函数不能在where后面使用
  • select ename,job,sum(sal) from emp group by job;
    这个语句在mysql中可以执行,但没有意义,在Oracle中会报错
    这里就是:在一条select 语句中,如果有group by语句的话,select后面只能跟:参加分组的字段,以及分组函数其它一律不跟。
    就像这样:select job sum(sal) from emp group by job;
  • 找出每个部门的最高薪资
    select deptno,max(sal) from emp group by deptno;
  • 找出每个部门薪资大于3000的
    第一种:select deptno,max(sal) from emp where sal>3000 group by deptno;
    第二种:select deptno,max(sal) from emp  group by deptno having max(sal)>3000;
  • 找出平均薪资超过2500的
    select deptno avg(sal) from emp group by deptno having avg(sal) > 2500;
  • 总结(单表查询)
    select
    ...
    from
    ...
    where
    ...
    group by
    ...
    having
    ...
    order by
    ...
    执行顺序:from>where>group by>having>select>order by
    小知识:distinct去重,要去除重复记录放在最前面使用select后面
相关文章
|
2月前
|
SQL 数据库
SQL FORMAT() 函数
SQL FORMAT() 函数
40 2
|
14天前
|
SQL 索引
在 SQL Server 中使用 STRING_AGG 函数
【8月更文挑战第5天】
165 2
在 SQL Server 中使用 STRING_AGG 函数
|
11天前
|
SQL 数据库
|
14天前
|
SQL 缓存 BI
在 SQL Server 中使用 SPACE 函数
【8月更文挑战第5天】
40 6
在 SQL Server 中使用 SPACE 函数
|
11天前
|
SQL 数据采集 数据处理
如何在 SQL Server 中使用 LEN 函数
【8月更文挑战第9天】
33 1
如何在 SQL Server 中使用 LEN 函数
|
14天前
|
SQL 数据格式
在 SQL Server 中使用 STR 函数
【8月更文挑战第5天】
62 3
在 SQL Server 中使用 STR 函数
|
3天前
|
SQL 存储 关系型数据库
数据库SQL入门指南
数据库SQL入门指南
|
11天前
|
SQL 监控 索引
如何在 SQL Server 中使用 `PATINDEX` 函数
【8月更文挑战第8天】
87 9
|
11天前
|
SQL 关系型数据库 MySQL
如何在 SQL Server 中使用 `REPLACE` 函数
【8月更文挑战第8天】
108 9
|
24天前
|
SQL 数据挖掘 数据处理
SQL中有哪些常用的函数?
【7月更文挑战第27天】SQL中有哪些常用的函数?
14 4