掘金日新计划 · 8 月更文挑战第46天--mysql高级查询

43 阅读1分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第46天,点击查看活动详情

1.数据准备

数据表结构

image.png

基础数据

image.png

2.几种高级查询说明

查询员工的工资(IFNULL使用)【基本工资加绩效】(薪资结构为sal+comm)--

错误的查询方式:SELECT sal+comm FROM t_emp;

image.png
错误原因:comm可能存在null值,在进行加法运算,被赋值为null了
正确的查询方式: SELECT sal+IFNULL(comm,0) from t_emp

image.png

用法:IFNULL(comm,0)函数说明:如果变量comm为空,则赋值为0

查询员工平均工资(AVG函数)

查询语句
SELECT avg(sal+IFNULL(comm,0)) from t_emp
查询结果:

image.png
存在问题:
看到查询结果有6为小数点,我们进行保留两位小数
优化方案: ROUND函数使用
SELECT ROUND(avg(sal+IFNULL(comm,0)),2) from t_emp
查询结果image.png

查询薪资最高的员工

查询语句:
SELECT MAX(sal+IFNULL(comm,0)) from t_emp
查询结果:
image.png

查询名字最长的员工信息(max函数)

查询语句:
SELECT MAX(LENGTH(ename)),empno,job from t_emp
查询结果:

image.png

查询总数(count函数)

查询语句
SELECT COUNT(*) from t_emp
查询结果
image.png

查询语句:
SELECT COUNT(comm) from t_emp
查询结果:
image.png
区别:
count(*)和count(字段)的区别:count(id)会统计出所有数量,count(字段)只会统计非空的字段数据

查询入职时间超过40年的员工

查询语句:
SELECT * from t_emp WHERE (DATEDIFF(NOW(),hiredate))/365>40
查询结果:
image.png