-- 函数使用
-- 1.单行函数 执行QSL语句时候 分别产生了一条记录影响的是多行。
-- 2.多行函数 执行QSL语句时候 只产生一条结果
-- 自己理解:多行函数,就是需要多条数据才能执行的结果。
-- max() min() sum() avg() count()
SELECT ENAME,LOWER(ENAME),UPPER(ENAME) FROM emp;
SELECT MAX(sal) from emp;
SELECT * from emp;
-- 字符类型函数
SELECT ENAME,LOWER(ENAME),UPPER(ENAME),JOB,REPLACE(JOB,"CLERK","A") FROM emp;
SELECT ENAME,LOWER(ENAME),UPPER(ENAME),JOB,REPLACE(JOB,"CLERK","员工") FROM emp;
-- SUBSTRING(ENAME,2,3) 从第二个字符开始,截取三个字符。
SELECT ENAME,SUBSTRING(ENAME,2,3) FROM emp;
-- 数值函数
-- 绝对值,向上取余,向下取余,四舍五入,取余数,pi 2的n次方,开方
SELECT ABS(-1),CEIL(3.2),FLOOR(3.9),ROUND(3.6),MOD(10,4),PI(),POW(2,5),SQRT(36) FROM emp;
-- 虚拟表
SELECT ABS(-1),CEIL(3.2),FLOOR(3.9),ROUND(3.6),MOD(10,4),PI(),POW(2,5),SQRT(36) FROM DUAL;
SELECT ABS(-1),CEIL(3.2),FLOOR(3.9),ROUND(3.6),MOD(10,4),PI(),POW(2,5),SQRT(36)
-- 日期函数
-- CURDATE()只含有年月日 CURTIME()只含有时分秒
-- NOW(),NOW(),SYSDATE(),CURRENT_DATE() 即含有年月日,又含有时分秒。
-- SLEEP(3)失眠3秒。
SELECT CURDATE(),CURTIME(),NOW(),SLEEP(3),NOW() FROM DUAL;
-- 提示:NOW(),SYSDATE()只有和sleep配合的使用,才会有区别,单纯获得年月日时分秒没有区别
SELECT NOW(),SYSDATE(),SLEEP(3),NOW(),SYSDATE();
-- 流程函数
select * FROM emp;
-- 需求1 SAL>1500 A sal>1200 B sal >500 C else D
-- SAL>1500 A sal>1200 B sal >500 C else D
SELECT ENAME,SAL,
case
WHEN SAL>=1500 THEN "A"
WHEN SAL>=1200 THEN "B"
WHEN SAL>=500 THEN "C"
ELSE "D"
END as "薪资等级"
FROM emp;
-- 需求2 这个月收入=SAL+COMM COMM=NULL +=NULL
SELECT ENAME,SAL,if(SAL>=1500,"高收入","低收入") AS "薪资等级" from emp;
-- 判断当前数是否为null,如果不是null,返回comm,否则返回0;
SELECT ENAME,SAL,COMM,SAL+IFNULL(COMM,0) FROM emp;
-- 其他函数
SELECT DATABASE(),USER(),VERSION(),INET_ATON('192.168.10.1'),INET_NTOA(23322248815)
-- 多行函数,常用5个,MAX(),MIN(),SUM(),AVG(),COUNT()
-- 最大值,最小值,求和,平均数,总记录数
-- sum avg 仅限于数值类型(整数,浮点数)
SELECT MAX(SAL),MIN(SAL),SUM(SAL),AVG(SAL),COUNT(SAL) FROM emp;
SELECT COUNT(*) FROM emp;
-- ()中内容可以数据库中任意一列,也可以是*,也可以使用1或者别的表示。
-- count(1) 这种执行效率是最高的
SELECT COUNT(1) FROM emp;
-- 统计emp中有几个岗位job
SELECT * FROM emp;
-- 可以先去重复,然后在进行统计
SELECT COUNT(DISTINCT JOB) FROM emp;
-- 多行函数进行操作的时候,会自动忽视null字段
SELECT SUM(COMM) FROM emp;