本章关键字:
CONCAT 连接
UPPER 转换大写
LENGTH 返回字符串长度
SUBSTR 从第几位置开始获取字段,到第几个位置结束; #返回结果:es;
NOW() 返回当前系统时间
YEAR() 查询入职时间年
MONTH() 查询入职时间月
if 函数,如果字段不为null,则取第二个值,如果为空,取第三个值
ifnull 函数,如果字段不为null,则直接返回该值,如果为空,取第二个值
AVG(sal) 平均工资
SUM(sal) 总工资
MAX(sal) 最大工资
MIN(sal) 最小工资
count 不统计null, 统计的是记录数
DISTINCT 返回不包含重复得查询结果
GROUP BY 用来对查询出来的数据进行分组
LIMIT 常用来分页 (Mysql特有)
继"五"的学习记录的那2张表
# CONCAT 连接 返回结果:财务部北京
SELECT CONCAT(dname,loc) FROM tb_dept; #dname和loc字符串连接在一起#插入一条数据测试下面函数
INSERT INTO tb_emp(empno,ename,sal)
VALUES(8000,'test',500);
# UPPER转换大写 #返回结果:TEST
SELECT UPPER(ename) FROM tb_emp WHERE empno=8000;
# LENGTH返回字符串长度 #返回结果:4
SELECT LENGTH(ename) FROM tb_emp WHERE empno=8000;
# SUBSTR 从第几位置开始获取字段,到第几个位置结束; #返回结果:es;
SELECT SUBSTR(ename,2,2) FROM tb_emp WHERE empno=8000;
# NOW() 返回当前系统时间
SELECT NOW();
#查询入职时间是1980年 YEAR()
SELECT * FROM tb_emp
WHERE YEAR(HIREDATE) = 1980;
#查询入职时间是1981年2月 MONTH()
SELECT * FROM tb_emp
WHERE YEAR(HIREDATE) = 1981
AND MONTH(HIREDATE) = 2;
#插入日期 #可以使用NOW()插入当前系统日期
INSERT INTO tb_emp(empno,ename,job,hiredate,sal)
VALUES(8001,'周杰伦','天王','2011-12-14',600);
INSERT INTO tb_emp(empno,ename,job,hiredate,sal)
VALUES(8002,'蔡依林','小天后',NOW(),600);
#if函数,如果字段不为null,则取第二个值,如果为空,取第三个值
#字段comm+200为第二个值;100为第三个值
SELECT comm,IF(comm,comm+200,100) AS comm2 FROM tb_emp;#ifnull函数,如果字段不为null,则直接返回该值,如果为空,取第二个值
SELECT comm,IFNULL(comm,100) AS comm2 FROM tb_emp;
#条件判断语句
SELECT ename,job,sal,comm '原定奖金',
CASE
WHEN comm IS NULL THEN 100
ELSE comm
END AS '奖金'
FROM tb_emp;
#聚合函数,也叫组合函数
SELECT AVG(sal) FROM tb_emp ##平均工资
SELECT SUM(sal) FROM tb_emp ##总工资
SELECT MAX(sal) FROM tb_emp ##最大工资
SELECT MIN(sal) FROM tb_emp ##最小工资
SELECT SUM(sal) AS 工资总额,MAX(sal) AS 最高工资,
MIN(sal) AS 最低工资,AVG(sal) AS 平均工资
FROM tb_emp
SELECT COUNT(*) FROM tb_emp #count不统计null, 统计的是记录数
SELECT COUNT(comm) FROM tb_emp #count不统计null
SELECT COUNT(deptno) FROM tb_emp
SELECT COUNT(DISTINCT deptno) FROM tb_emp #查询部门(不包含重复)
SELECT AVG(comm) FROM tb_emp #组合函数都是忽略空值 2200/4=550
#IFNULL(arg,arg) 如果第一个参数为null,则取第二个参数的值
SELECT comm FROM tb_emp;
SELECT IFNULL(comm,0) FROM tb_emp;
SELECT AVG(IFNULL(comm,0)) FROM tb_emp;
#GROUP BY字句的真正作用在于各种聚合函数配合使用。 它 用 来对查询出来的数据进行分组
#每个部门的平均工资
SELECT deptno,AVG(sal) FROM tb_emp GROUP BY deptno
#每个部门的员工数
SELECT deptno,COUNT(*) FROM tb_emp GROUP BY deptno
#查询每个部门的整体工资情况
#如果select语句中的列未使用组函数,那么它必须出现在GROUP BY子句中
#而出现在GROUP BY子句中的列,不一定要出现在SELECT语句中
SELECT deptno,AVG(sal),MAX(sal),MIN(sal),SUM(sal),COUNT(1)
FROM tb_emp
GROUP BY deptno #根据部门编号分组
#每个部门每个职位的平均工资
SELECT deptno,job,AVG(sal) FROM tb_emp WHERE deptno=10 GROUP BY deptno,job
#查询部门平均工资大于2000的
#分组后加条件 使用having
#where和having都是用来做条件限定的,但是having只能用在group by之后
SELECT deptno,AVG(sal),MAX(sal),MIN(sal),SUM(sal),COUNT(1)
FROM tb_emp
#where avg(sal) > 2000 where子句中不可以使用组函数
GROUP BY deptno
HAVING AVG(sal) > 2000
ORDER BY AVG(sal) ASC #将sal进行从小到大排序,注意ORDER BY必须放在having后面
LIMIT 1,2
/*LIMIT,常用来分页 (Mysql特有)
select ... LIMIT offset_start,row_count;
offset_start:第一个返回记录行的偏移量。默认为0.
row_count:要返回记录行的最大数目。*/
SELECT * FROM tb_emp LIMIT 5; #检索前5个记录
SELECT * FROM tb_emp LIMIT 5,10; #检索记录行6-15 从第6行开始查,查10条记录