一.基本函数
1.概述
Mysql数据库提供了丰富的函数,
常见的: lower upper length concat substr replace ifnull round/ceil/floor
2.测试
length求长度,(utf-8:一个字母算一个字符,一个汉字算3个字符)
substr截取子串
#查部门名称
#substr(1,2,3)截取字符串-1是字段名2是开始位置3是总长度
SELECT dname,SUBSTR(dname,2),SUBSTR(dname,2,3) FROM dept
#replace(1,2,3)替换-1是字段名2是要被替换的3是新的数据
SELECT dname,REPLACE(dname,'o','666') FROM dept
#ifnull(1,2)判断是否为null,如果是null就替换成0-1是字段名2是要替换的值
SELECT comm,IFNULL(comm,0) FROM emp
SELECT *,sal+IFNULL(comm,0) FROM emp
floor:向下取整,
ceil:向上取整,
round:四舍五入
select now():获取年 月 日 时 分 秒
select curdate():获取年 月 日
select curtime():获取时 分 秒
select year():获取年份
转义字符
作为sql语句符号,内容中出现单撇就会乱套,进行转义即可
select 'ab'cd' -- 单引号是一个SQL语句的特殊字符
select 'ab\'cd' --数据中有单引号时,用一个\转义变成普通字符
条件查询
distinct:
使用distinct关键字,去除重复的记录行
#查询部门地址
SELECT loc FROM dept;
#用来去重
SELECT DISTINCT loc FROM dept;
where
注意:where中不能使用别名
#where满足条件的才查出来
#查询deptno等于1的部门记录 SELECT * FROM dept WHERE 字段名=地址值;
SELECT * FROM dept WHERE deptno=1;
#查询地址在一区的部门记录
SELECT * FROM dept WHERE loc='一区';
#查询地址在二区的部门名称
SELECT dname FROM dept WHERE loc='二区';
#根据名称查询部门记录
SELECT * FROM dept WHERE dname='delete';
SELECT * FROM dept WHERE dname='abc';
#根据名称和地址值 查询部门记录
SELECT * FROM dept WHERE deptno=4 AND loc='二区';
SELECT * FROM dept WHERE deptno=4 or loc='二区';
#查询工资大于8000的员工信息
SELECT * FROM emp WHERE sal > 8000;
#查询工资等于8000的或者工资等于3000员工信息
SELECT * FROM emp WHERE sal=8000 OR sal=3000;
SELECT * FROM emp WHERE sal IN(3000,8000);
SELECT * FROM emp WHERE empo IN(100,300,500);
like
通配符%代表0到n个字符,通配符下划线_代表1个字符
#like 像,模糊查询 % 动态匹配0~n个字符 _下划线代表一个字符
#查询名字里包含a的员工信息
SELECT * FROM emp WHERE ename LIKE '%a%';
#查询员工名字以l开头的员工的信息
SELECT * FROM emp WHERE ename LIKE 'l%';
null
#查询mgr是null 的员工信息
SELECT * FROM emp WHERE mgr IS NULL;
#查询mgr不是null 的员工信息
SELECT * FROM emp WHERE mgr IS NOT NULL;
between and
#查询工资3000到10000的员工信息
SELECT * FROM emp WHERE sal>=3000 AND sal<=10000;
SELECT * FROM emp WHERE sal BETWEEN 3000 AND 10000;
#查询2015年到2019年入职的员工的信息
SELECT * FROM emp WHERE YEAR(hiredate) BETWEEN 2015 AND 2019;
limit
#limit分页
SELECT * FROM emp LIMIT 2;#只查前2条
#第一个数字是开始位置,第二个是总条数
SELECT * FROM emp LIMIT 1,2;
order by
#order by 默认升序
SELECT * FROM emp ORDER BY sal ASC;#升序
SELECT * FROM emp ORDER BY sal DESC;#降序
SELECT * FROM emp WHERE hiredate IS NOT NULL ORDER BY YEAR(hiredate) ASC;#按照日期的进行排序、
SELECT * FROM emp ORDER BY ename ;
SELECT * FROM emp ORDER BY job;
#拿着每个汉字对应的数字(utf8),升序排序
二.统计案例
#统计2019年入职的员工
SELECT * FROM emp WHERE YEAR(hiredate)=2019;
#统计2017年以前入职的员工、
SELECT * FROM emp WHERE YEAR(hiredate)<2017;
#统计2015~2017年入职的员工
SELECT * FROM emp WHERE YEAR(hiredate) BETWEEN 2015 AND 2017;
#统计员工入职了几年
SELECT *,YEAR(NOW())-YEAR(hiredate) FROM emp WHERE hiredate IS NOT NULL ;