MySQL数据库select语句6大子句(from、where、group by、having、order by 、limit )#经典员工、部门表案例语句练手!
MySQL中的select语句,有说5大子句,有说6大子句的,两者都没有问题,只不过把from接表名算上一个子句,where是条件查询,group by是分组查询,having是筛选,order by是排序,limit是分页,下面对这五个子句进行了详细的总结,结合一些栗子,方便快速上手。
这6个子句在我们进行查询操作时不一定同时出现,如果同时应用到了这6大子句,就一定要注意它们的先后顺序,不能随意调换,即编写顺序from->where ->group by->having ->order by ->limit。
简要介绍
字句 | 说明 |
---|---|
from | 表示查询数据从哪些表进行筛选 |
where | 表示从表中筛选出满足 |
group by | 表示按照什么条件进行分组统计 |
having | 对group by分组统计后的结果,再次筛选出满足条件的行 |
order by | 对最后的结果进行排序(desc降序、asc升序-默认的) |
limit | 对排序后的最后结果,查询一部分(即进行分页处理操作) |
测试表1: t_employee(员工表)
mysql> select * from t_employee;
±----±---------±-------±--------±-----------±-----------±-----±-------------±-----+
| eid | ename | gender | salary | birthday | hiredate | mid | native_place | did |
±----±---------±-------±--------±-----------±-----------±-----±-------------±-----+
| 1 | 林大侠 | 男 | 8000.46 | 1980-10-08 | 2011-07-28 | 7 | 浙江 | 1 |
| 2 | 刘猪猪 | 男 | 7000.67 | 1984-08-03 | 2015-07-03 | 7 | 河北 | 1 |
| 3 | 猪猪侠 | 男 | 8000 | 1985-04-09 | 2014-07-01 | 7 | 陕西 | 1 |
| 4 | 李大象 | 男 | 9456 | 1986-09-07 | 2015-08-08 | 22 | 黑龙江 | 3 |
| 5 | 周泡泡 | 男 | 8567 | 1978-08-02 | 2015-01-01 | 7 | 吉林 | 1 |
| 6 | 斯瓦辛格 | 男 | 12000 | 1985-04-03 | 2015-02-02 | 7 | 内蒙古 | 1 |
| 7 | 乐乐 | 男 | 15700 | 1982-08-02 | 2015-03-03 | 7 | 新疆 | 1 |
| 8 | 周大龙 | 男 | 9000 | 1983-03-02 | 2015-01-06 | 7 | 西藏 | 1 |
| 9 | 李峰 | 男 | 7897 | 1984-09-01 | 2015-04-01 | 7 | 天津 | 1 |
| 10 | 韩噶 | 男 | 8789 | 1989-04-02 | 2014-09-03 | 7 | 江苏 | 1 |
| 11 | 黄大大 | 男 | 15678 | 1983-05-07 | 2014-04-04 | 7 | 安徽 | 1 |
| 12 | 范冰 | 女 | 8909 | 1986-04-02 | 2014-02-08 | 7 | 贵州 | 1 |
| 13 | 李冰 | 女 | 18760 | 1987-04-09 | 2015-06-07 | 7 | 四川 | 1 |
| 14 | 邻娜 | 女 | 18978 | 1990-01-01 | 2015-09-05 | 14 | 成都 | 2 |
| 15 | 董号 | 女 | 8978 | 1987-05-05 | 2015-08-04 | 14 | 云南 | 2 |
| 16 | 汤唯俄 | 女 | 9878 | 1988-03-06 | 2015-03-06 | 14 | 宁夏 | 2 |
| 17 | 李诗圣 | 女 | 9000 | 1990-08-09 | 2013-06-09 | 14 | 河南 | 2 |
| 18 | 凯记卡 | 女 | 16788 | 1978-09-04 | 2013-04-05 | 18 | 福建 | 4 |
| 19 | 周积极 | 女 | 7876 | 1988-06-13 | 2014-04-07 | 18 | 广西 | 4 |
| 20 | 张章子 | 女 | 15099 | 1989-12-11 | 2015-08-04 | 20 | 广东 | 5 |
| 21 | 白百客 | 女 | 9787 | 1989-09-04 | 2014-06-05 | 20 | 海南 | 5 |
| 22 | 刘化环 | 男 | 130990 | 1990-11-09 | 2016-08-09 | 22 | 北京 | 3 |
| 23 | 陈龙 | 男 | 130990 | 1990-02-04 | 2016-05-09 | 2 | 上海 | 1 |
| 24 | 迪丽热 | 女 | 10289 | 1990-04-01 | 2017-02-06 | 18 | 北京 | 5 |
| 25 | 姚杰杰 | 女 | 9087 | 1989-08-01 | 2017-09-01 | 18 | 北京 | 5 |
-----±---------±-------±--------±-----------±-----------±-----±-------------±-----+
25 rows in set (0.00 sec)
测试表2: t_department(部门表)
mysql> select * from t_department;
±----±-------±-----------------+
| did | dname | description |
±----±-------±-----------------+
| 1 | 开发部 | 负责后台开发工作 |
| 2 | 前端部 | 负责前端开发工作 |
| 3 | 运维部 | 负责服务运营工作 |
| 4 | 客户部 | 负责需求服务工作 |
| 5 | 测试部 | 负责测试工作 |
±----±-------±-----------------+
5 rows in set (0.00 sec)
1.group by分组查询
语法格式:
group by 字段名
group by 字段列表
(1)查询每一个部门的人数
mysql> SELECT did AS "did",COUNT(*) AS "count(*)"-> FROM t_employee GROUP BY did;
+------+----------+
| did | count(*) |
+------+----------+
| 1 | 13 |
| 2 | 4 |
| 3 | 2 |
| 4 | 2 |
| 5 | 4 |
+------+----------+
5 rows in set (0.00 sec)
(2)查询每一个部门的男女人数
mysql> SELECT did,gender,COUNT(*)-> FROM t_employee GROUP BY did,gender;
+------+--------+----------+
| did | gender | COUNT(*) |
+------+--------+----------+
| 1 | 女 | 2 |
| 1 | 男 | 11 |
| 2 | 女 | 4 |
| 3 | 男 | 2 |
| 4 | 女 | 2 |
| 5 | 女 | 4 |
+------+--------+----------+
6 rows in set (0.00 sec)
(3)统计每个部门,薪资高于13000的男员工的人数
mysql> SELECT did,COUNT(*) FROM t_employee-> WHERE salary >13000 AND gender ='男' GROUP BY did;
+------+----------+
| did | COUNT(*) |
+------+----------+
| 1 | 3 |
| 3 | 1 |
+------+----------+
2 rows in set (0.00 sec)
(4)统计每个部门,薪资高于13000的男员工的人数,并且显示部门名称
mysql> SELECT t_employee.did,dname,COUNT(*)-> FROM t_employee INNER JOIN t_department-> ON t_employee.did = t_department.`did`-> WHERE salary >13000 AND gender ='男'-> GROUP BY did;
+------+--------+----------+
| did | dname | COUNT(*) |
+------+--------+----------+
| 1 | 开发部 | 3 |
| 3 | 运维部 | 1 |
+------+--------+----------+
2 rows in set (0.00 sec)
2.having筛选
having与where的区别;
①where后面不能跟分组函数(count()、avg()、sum()、min()、max()),但可以有单行函数,where的条件表示对数据库表的记录中进行筛选
②having后面可以跟分组函数,having的条件是在统计的结果中再次筛选
(1)查询每一个部门的人数,并且只显示部门人数大于3个
-- 报错:错误的使用分组函数
mysql> select did,count(*) from t_employee-> where count(*)>3-> group by did;
ERROR 1111 (HY000): Invalid use of group function
mysql> select did,count(*) from T_employee-> group by did-> having count(*)>3;
+------+----------+
| did | count(*) |
+------+----------+
| 1 | 13 |
| 2 | 4 |
| 5 | 4 |
+------+----------+
3 rows in set (0.00 sec)
(2)查询每个部门的女员工的人数,并且只显示女员工人数大于3个
mysql> select did,count(*) from t_employee-> where gender = '女'-> group by did-> having count(*)>3;
+------+----------+
| did | count(*) |
+------+----------+
| 2 | 4 |
| 5 | 4 |
+------+----------+
2 rows in set (0.00 sec)
(3)查询每个部门的女员工的人数,并且只显示女员工人数大于3个,并且显示部门名称
mysql> select t_employee.did,dname,count(*)-> from t_employee inner join t_department-> on t_employee.did = t_department.did-> where gender = '女'-> group by did-> having count(*)>3;
+------+--------+----------+
| did | dname | count(*) |
+------+--------+----------+
| 2 | 前端部 | 4 |
| 5 | 测试部 | 4 |
+------+--------+----------+
2 rows in set (0.00 sec)
(4)查询每个部门的男女员工的工资,并且只显示平均工资低于15000
mysql> select did,gender,avg(salary)-> from t_employee-> group by did,gender-> having avg(salary)<15000;
+------+--------+-------------+
| did | gender | avg(salary) |
+------+--------+-------------+
| 1 | 女 | 13834.5 |
| 2 | 女 | 11708.5 |
| 4 | 女 | 12332 |
| 5 | 女 | 11065.5 |
+------+--------+-------------+
4 rows in set (0.00 sec)
(5)查询男女员工的最高工资,并且显示最高工资高于15000
mysql> select gender,max(salary)-> from t_employee-> group by gender-> having max(salary)>15000;
+--------+-------------+
| gender | max(salary) |
+--------+-------------+
| 女 | 18978 |
| 男 | 130990 |
+--------+-------------+
2 rows in set (0.00 sec)
(6)查询年龄大于35岁的男女员工的最低工资,并显示最低工资低于15000
mysql> select gender,min(salary)-> from t_employee-> where YEAR(CURRENT_DATE())-YEAR(birthday) >35-> having min(salary)<15000;
+--------+-------------+
| gender | min(salary) |
+--------+-------------+
| 男 | 8000.46 |
+--------+-------------+
1 row in set (0.00 sec)
3.order by排序
order by 语法结构:
order by 字段名/表达式
无非就是两种:
①升序->从低到高(asc)【默认的排序方式】–可以写也可以不写
②降序->从高到低(desc)
(1)查询员工信息,按照薪水从高到低
mysql> select * from t_employee-> order by salary desc;
mysql> select * from t_employee
-> order by salary desc;
±----±---------±-------±--------±-----------±-----------±-----±-------------±-----+
| eid | ename | gender | salary | birthday | hiredate | mid | native_place | did |
±----±---------±-------±--------±-----------±-----------±-----±-------------±-----+
| 23 | 陈龙 | 男 | 130990 | 1990-02-04 | 2016-05-09 | 2 | 上海 | 1 |
| 22 | 刘化环 | 男 | 130990 | 1990-11-09 | 2016-08-09 | 22 | 北京 | 3 |
| 14 | 邻娜 | 女 | 18978 | 1990-01-01 | 2015-09-05 | 14 | 成都 | 2 |
| 13 | 李冰 | 女 | 18760 | 1987-04-09 | 2015-06-07 | 7 | 四川 | 1 |
| 18 | 凯记卡 | 女 | 16788 | 1978-09-04 | 2013-04-05 | 18 | 福建 | 4 |
| 7 | 乐乐 | 男 | 15700 | 1982-08-02 | 2015-03-03 | 7 | 新疆 | 1 |
| 11 | 黄大大 | 男 | 15678 | 1983-05-07 | 2014-04-04 | 7 | 安徽 | 1 |
| 20 | 张章子 | 女 | 15099 | 1989-12-11 | 2015-08-04 | 20 | 广东 | 5 |
| 6 | 斯瓦辛格 | 男 | 12000 | 1985-04-03 | 2015-02-02 | 7 | 内蒙古 | 1 |
| 24 | 迪丽热 | 女 | 10289 | 1990-04-01 | 2017-02-06 | 18 | 北京 | 5 |
| 16 | 汤唯俄 | 女 | 9878 | 1988-03-06 | 2015-03-06 | 14 | 宁夏 | 2 |
| 21 | 白百客 | 女 | 9787 | 1989-09-04 | 2014-06-05 | 20 | 海南 | 5 |
| 4 | 李大象 | 男 | 9456 | 1986-09-07 | 2015-08-08 | 22 | 黑龙江 | 3 |
| 25 | 姚杰杰 | 女 | 9087 | 1989-08-01 | 2017-09-01 | 18 | 北京 | 5 |
| 17 | 李诗圣 | 女 | 9000 | 1990-08-09 | 2013-06-09 | 14 | 河南 | 2 |
| 8 | 周大龙 | 男 | 9000 | 1983-03-02 | 2015-01-06 | 7 | 西藏 | 1 |
| 15 | 董号 | 女 | 8978 | 1987-05-05 | 2015-08-04 | 14 | 云南 | 2 |
| 12 | 范冰 | 女 | 8909 | 1986-04-02 | 2014-02-08 | 7 | 贵州 | 1 |
| 10 | 韩噶 | 男 | 8789 | 1989-04-02 | 2014-09-03 | 7 | 江苏 | 1 |
| 5 | 周泡泡 | 男 | 8567 | 1978-08-02 | 2015-01-01 | 7 | 吉林 | 1 |
| 1 | 林大侠 | 男 | 8000.46 | 1980-10-08 | 2011-07-28 | 7 | 浙江 | 1 |
| 3 | 猪猪侠 | 男 | 8000 | 1985-04-09 | 2014-07-01 | 7 | 陕西 | 1 |
| 9 | 李峰 | 男 | 7897 | 1984-09-01 | 2015-04-01 | 7 | 天津 | 1 |
| 19 | 周积极 | 女 | 7876 | 1988-06-13 | 2014-04-07 | 18 | 广西 | 4 |
| 2 | 刘猪猪 | 男 | 7000.67 | 1984-08-03 | 2015-07-03 | 7 | 河北 | 1 |
±----±---------±-------±--------±-----------±-----------±-----±-------------±-----+
25 rows in set (0.00 sec)
(2)查询员工信息,按照薪水从高到低,如果薪水相同,按照编号从低到高
mysql> select * from t_employee order by salary desc,eid asc;
±----±---------±-------±--------±-----------±-----------±-----±-------------±-----+
| eid | ename | gender | salary | birthday | hiredate | mid | native_place | did |
±----±---------±-------±--------±-----------±-----------±-----±-------------±-----+
| 22 | 刘化环 | 男 | 130990 | 1990-11-09 | 2016-08-09 | 22 | 北京 | 3 |
| 23 | 陈龙 | 男 | 130990 | 1990-02-04 | 2016-05-09 | 2 | 上海 | 1 |
| 14 | 邻娜 | 女 | 18978 | 1990-01-01 | 2015-09-05 | 14 | 成都 | 2 |
| 13 | 李冰 | 女 | 18760 | 1987-04-09 | 2015-06-07 | 7 | 四川 | 1 |
| 18 | 凯记卡 | 女 | 16788 | 1978-09-04 | 2013-04-05 | 18 | 福建 | 4 |
| 7 | 乐乐 | 男 | 15700 | 1982-08-02 | 2015-03-03 | 7 | 新疆 | 1 |
| 11 | 黄大大 | 男 | 15678 | 1983-05-07 | 2014-04-04 | 7 | 安徽 | 1 |
| 20 | 张章子 | 女 | 15099 | 1989-12-11 | 2015-08-04 | 20 | 广东 | 5 |
| 6 | 斯瓦辛格 | 男 | 12000 | 1985-04-03 | 2015-02-02 | 7 | 内蒙古 | 1 |
| 24 | 迪丽热 | 女 | 10289 | 1990-04-01 | 2017-02-06 | 18 | 北京 | 5 |
| 16 | 汤唯俄 | 女 | 9878 | 1988-03-06 | 2015-03-06 | 14 | 宁夏 | 2 |
| 21 | 白百客 | 女 | 9787 | 1989-09-04 | 2014-06-05 | 20 | 海南 | 5 |
| 4 | 李大象 | 男 | 9456 | 1986-09-07 | 2015-08-08 | 22 | 黑龙江 | 3 |
| 25 | 姚杰杰 | 女 | 9087 | 1989-08-01 | 2017-09-01 | 18 | 北京 | 5 |
| 8 | 周大龙 | 男 | 9000 | 1983-03-02 | 2015-01-06 | 7 | 西藏 | 1 |
| 17 | 李诗圣 | 女 | 9000 | 1990-08-09 | 2013-06-09 | 14 | 河南 | 2 |
| 15 | 董号 | 女 | 8978 | 1987-05-05 | 2015-08-04 | 14 | 云南 | 2 |
| 12 | 范冰 | 女 | 8909 | 1986-04-02 | 2014-02-08 | 7 | 贵州 | 1 |
| 10 | 韩噶 | 男 | 8789 | 1989-04-02 | 2014-09-03 | 7 | 江苏 | 1 |
| 5 | 周泡泡 | 男 | 8567 | 1978-08-02 | 2015-01-01 | 7 | 吉林 | 1 |
| 1 | 林大侠 | 男 | 8000.46 | 1980-10-08 | 2011-07-28 | 7 | 浙江 | 1 |
| 3 | 猪猪侠 | 男 | 8000 | 1985-04-09 | 2014-07-01 | 7 | 陕西 | 1 |
| 9 | 李峰 | 男 | 7897 | 1984-09-01 | 2015-04-01 | 7 | 天津 | 1 |
| 19 | 周积极 | 女 | 7876 | 1988-06-13 | 2014-04-07 | 18 | 广西 | 4 |
| 2 | 刘猪猪 | 男 | 7000.67 | 1984-08-03 | 2015-07-03 | 7 | 河北 | 1 |
±----±---------±-------±--------±-----------±-----------±-----±-------------±-----+
25 rows in set (0.00 sec)
(3)查询员工信息,按照性别从低到高,如果性别相同,按照薪水从高到低
mysql> select * from t_employee order by gender asc,salary desc;
±----±---------±-------±--------±-----------±-----------±-----±-------------±-----+
| eid | ename | gender | salary | birthday | hiredate | mid | native_place | did |
±----±---------±-------±--------±-----------±-----------±-----±-------------±-----+
| 14 | 邻娜 | 女 | 18978 | 1990-01-01 | 2015-09-05 | 14 | 成都 | 2 |
| 13 | 李冰 | 女 | 18760 | 1987-04-09 | 2015-06-07 | 7 | 四川 | 1 |
| 18 | 凯记卡 | 女 | 16788 | 1978-09-04 | 2013-04-05 | 18 | 福建 | 4 |
| 20 | 张章子 | 女 | 15099 | 1989-12-11 | 2015-08-04 | 20 | 广东 | 5 |
| 24 | 迪丽热 | 女 | 10289 | 1990-04-01 | 2017-02-06 | 18 | 北京 | 5 |
| 16 | 汤唯俄 | 女 | 9878 | 1988-03-06 | 2015-03-06 | 14 | 宁夏 | 2 |
| 21 | 白百客 | 女 | 9787 | 1989-09-04 | 2014-06-05 | 20 | 海南 | 5 |
| 25 | 姚杰杰 | 女 | 9087 | 1989-08-01 | 2017-09-01 | 18 | 北京 | 5 |
| 17 | 李诗圣 | 女 | 9000 | 1990-08-09 | 2013-06-09 | 14 | 河南 | 2 |
| 15 | 董号 | 女 | 8978 | 1987-05-05 | 2015-08-04 | 14 | 云南 | 2 |
| 12 | 范冰 | 女 | 8909 | 1986-04-02 | 2014-02-08 | 7 | 贵州 | 1 |
| 19 | 周积极 | 女 | 7876 | 1988-06-13 | 2014-04-07 | 18 | 广西 | 4 |
| 22 | 刘化环 | 男 | 130990 | 1990-11-09 | 2016-08-09 | 22 | 北京 | 3 |
| 23 | 陈龙 | 男 | 130990 | 1990-02-04 | 2016-05-09 | 2 | 上海 | 1 |
| 7 | 乐乐 | 男 | 15700 | 1982-08-02 | 2015-03-03 | 7 | 新疆 | 1 |
| 11 | 黄大大 | 男 | 15678 | 1983-05-07 | 2014-04-04 | 7 | 安徽 | 1 |
| 6 | 斯瓦辛格 | 男 | 12000 | 1985-04-03 | 2015-02-02 | 7 | 内蒙古 | 1 |
| 4 | 李大象 | 男 | 9456 | 1986-09-07 | 2015-08-08 | 22 | 黑龙江 | 3 |
| 8 | 周大龙 | 男 | 9000 | 1983-03-02 | 2015-01-06 | 7 | 西藏 | 1 |
| 10 | 韩噶 | 男 | 8789 | 1989-04-02 | 2014-09-03 | 7 | 江苏 | 1 |
| 5 | 周泡泡 | 男 | 8567 | 1978-08-02 | 2015-01-01 | 7 | 吉林 | 1 |
| 1 | 林大侠 | 男 | 8000.46 | 1980-10-08 | 2011-07-28 | 7 | 浙江 | 1 |
| 3 | 猪猪侠 | 男 | 8000 | 1985-04-09 | 2014-07-01 | 7 | 陕西 | 1 |
| 9 | 李峰 | 男 | 7897 | 1984-09-01 | 2015-04-01 | 7 | 天津 | 1 |
| 2 | 刘猪猪 | 男 | 7000.67 | 1984-08-03 | 2015-07-03 | 7 | 河北 | 1 |
±----±---------±-------±--------±-----------±-----------±-----±-------------±-----+
25 rows in set (0.00 sec)
(4)查询年龄大于30岁,按照年龄从高到低排序
mysql> select * from t_employee-> where YEAR(CURRENT_DATE())-YEAR(birthday) >30-> order by YEAR(CURRENT_DATE())-YEAR(birthday) desc;
±----±---------±-------±--------±-----------±-----------±-----±-------------±-----+
| eid | ename | gender | salary | birthday | hiredate | mid | native_place | did |
±----±---------±-------±--------±-----------±-----------±-----±-------------±-----+
| 18 | 凯记卡 | 女 | 16788 | 1978-09-04 | 2013-04-05 | 18 | 福建 | 4 |
| 5 | 周泡泡 | 男 | 8567 | 1978-08-02 | 2015-01-01 | 7 | 吉林 | 1 |
| 1 | 林大侠 | 男 | 8000.46 | 1980-10-08 | 2011-07-28 | 7 | 浙江 | 1 |
| 7 | 乐乐 | 男 | 15700 | 1982-08-02 | 2015-03-03 | 7 | 新疆 | 1 |
| 11 | 黄大大 | 男 | 15678 | 1983-05-07 | 2014-04-04 | 7 | 安徽 | 1 |
| 8 | 周大龙 | 男 | 9000 | 1983-03-02 | 2015-01-06 | 7 | 西藏 | 1 |
| 9 | 李峰 | 男 | 7897 | 1984-09-01 | 2015-04-01 | 7 | 天津 | 1 |
| 2 | 刘猪猪 | 男 | 7000.67 | 1984-08-03 | 2015-07-03 | 7 | 河北 | 1 |
| 6 | 斯瓦辛格 | 男 | 12000 | 1985-04-03 | 2015-02-02 | 7 | 内蒙古 | 1 |
| 3 | 猪猪侠 | 男 | 8000 | 1985-04-09 | 2014-07-01 | 7 | 陕西 | 1 |
| 4 | 李大象 | 男 | 9456 | 1986-09-07 | 2015-08-08 | 22 | 黑龙江 | 3 |
| 12 | 范冰 | 女 | 8909 | 1986-04-02 | 2014-02-08 | 7 | 贵州 | 1 |
| 13 | 李冰 | 女 | 18760 | 1987-04-09 | 2015-06-07 | 7 | 四川 | 1 |
| 15 | 董号 | 女 | 8978 | 1987-05-05 | 2015-08-04 | 14 | 云南 | 2 |
| 16 | 汤唯俄 | 女 | 9878 | 1988-03-06 | 2015-03-06 | 14 | 宁夏 | 2 |
| 19 | 周积极 | 女 | 7876 | 1988-06-13 | 2014-04-07 | 18 | 广西 | 4 |
±----±---------±-------±--------±-----------±-----------±-----±-------------±-----+
16 rows in set (0.00 sec)
(5)查询员工编号,姓名,年龄,并且显示年龄大于30岁,按照年龄从高到低排序
mysql> SELECT eid,ename,YEAR(CURRENT_DATE()) - YEAR(birthday) >30 AS "年龄"-> FROM t_employee-> WHERE YEAR(CURRENT_DATE()) - YEAR(birthday) > 30-> ORDER BY 年龄 DESC;
±----±---------±-----+
| eid | ename | 年龄 |
±----±---------±-----+
| 1 | 林大侠 | 1 |
| 18 | 凯记卡 | 1 |
| 16 | 汤唯俄 | 1 |
| 15 | 董号 | 1 |
| 13 | 李冰 | 1 |
| 12 | 范冰 | 1 |
| 11 | 黄大大 | 1 |
| 9 | 李峰 | 1 |
| 8 | 周大龙 | 1 |
| 7 | 乐乐 | 1 |
| 6 | 斯瓦辛格 | 1 |
| 5 | 周泡泡 | 1 |
| 4 | 李大象 | 1 |
| 3 | 猪猪侠 | 1 |
| 2 | 刘猪猪 | 1 |
| 19 | 周积极 | 1 |
±----±---------±-----+
16 rows in set (0.00 sec)
(6)查询部门编号,部门的平均工资,按照部门的平均工资升序排列
mysql> SELECT did,AVG(salary)-> FROM t_employee-> GROUP BY did-> ORDER BY AVG(salary) DESC;
±-----±-------------------+
| did | AVG(salary) |
±-----±-------------------+
| 3 | 70223 |
| 1 | 19945.471538461537 |
| 4 | 12332 |
| 2 | 11708.5 |
| 5 | 11065.5 |
±-----±-------------------+
5 rows in set (0.00 sec)
▲工资小数点TRUNCATE()截取到两位,参考银行家算法,四舍五入round()并不符合需求!
SELECT did,TRUNCATE(AVG(salary),2)
FROM t_employee
GROUP BY did
ORDER BY AVG(salary) DESC;
±-----±------------------------+
| did | TRUNCATE(AVG(salary),2) |
±-----±------------------------+
| 3 | 70223.00 |
| 1 | 19945.47 |
| 4 | 12332.00 |
| 2 | 11708.50 |
| 5 | 11065.50 |
±-----±------------------------+
5 rows in set (0.00 sec)
(7)查询部门编号,部门的男女人数,按照部门编号升序
SELECT did,gender,COUNT(*)
FROM t_employee
GROUP BY did,gender
ORDER BY did;
±-----±-------±---------+
| did | gender | COUNT(*) |
±-----±-------±---------+
| 1 | 女 | 2 |
| 1 | 男 | 11 |
| 2 | 女 | 4 |
| 3 | 男 | 2 |
| 4 | 女 | 2 |
| 5 | 女 | 4 |
±-----±-------±---------+
6 rows in set (0.00 sec)
(8)查询部门的编号,部门的男女人数,按照人数升序
SELECT did,gender,COUNT(*)
FROM t_employee
GROUP BY did,gender
ORDER BY COUNT(*)
±-----±-------±---------+
| did | gender | COUNT(*) |
±-----±-------±---------+
| 3 | 男 | 2 |
| 1 | 女 | 2 |
| 4 | 女 | 2 |
| 2 | 女 | 4 |
| 5 | 女 | 4 |
| 1 | 男 | 11 |
±-----±-------±---------+
6 rows in set (0.00 sec)
(9)查询部门的编号,部门名称,部门的男女人数,按照人数排序
SELECT t_employee.did,dname,gender,COUNT(*)
FROM t_employee INNER JOIN t_department
ON t_employee.did = t_department.`did`
GROUP BY did,gender
ORDER BY COUNT(*);
±-----±-------±-------±---------+
| did | dname | gender | COUNT(*) |
±-----±-------±-------±---------+
| 3 | 运维部 | 男 | 2 |
| 4 | 客户部 | 女 | 2 |
| 1 | 开发部 | 女 | 2 |
| 5 | 测试部 | 女 | 4 |
| 2 | 前端部 | 女 | 4 |
| 1 | 开发部 | 男 | 11 |
±-----±-------±-------±---------+
6 rows in set (0.00 sec)
(10)查询部门得编号,部门名称,部门的薪水高于15000的男女人数,按照人数排序
SELECT t_employee.did,dname,gender,COUNT(*)
FROM t_employee INNER JOIN t_department
ON t_employee.did = t_department.`did`
WHERE salary >15000
GROUP BY did,gender
ORDER BY COUNT(*);
±-----±-------±-------±---------+
| did | dname | gender | COUNT(*) |
±-----±-------±-------±---------+
| 3 | 运维部 | 男 | 1 |
| 4 | 客户部 | 女 | 1 |
| 1 | 开发部 | 女 | 1 |
| 5 | 测试部 | 女 | 1 |
| 2 | 前端部 | 女 | 1 |
| 1 | 开发部 | 男 | 3 |
±-----±-------±-------±---------+
6 rows in set (0.00 sec)
(11)查询每一个部门的编号,部门名称,部门的薪水高于15000的男女人数,按照人数升序,只显示人数高于1个人
SELECT t_employee.did,dname,gender,COUNT(*)
FROM t_employee INNER JOIN t_department
ON t_employee.did = t_department.`did`
WHERE salary >15000
GROUP BY did,gender
HAVING COUNT(*)>1
ORDER BY COUNT(*);
±-----±-------±-------±---------+
| did | dname | gender | COUNT(*) |
±-----±-------±-------±---------+
| 1 | 开发部 | 男 | 3 |
±-----±-------±-------±---------+
1 row in set (0.00 sec)
4…limit分页
limit m,n
①m:表示从第几行开始显示,*计算公式:m=(第几页-1)m
②n:表示每页表示的数据条数,最多n条(一页最多n条记录,不满n条的也在一页中显示)
(1)查询员工的信息,要求查询前10条的记录
SELECT * FROM t_employee LIMIT 0,10;
±----±---------±-------±--------±-----------±-----------±-----±-------------±-----+
| eid | ename | gender | salary | birthday | hiredate | mid | native_place | did |
±----±---------±-------±--------±-----------±-----------±-----±-------------±-----+
| 1 | 林大侠 | 男 | 8000.46 | 1980-10-08 | 2011-07-28 | 7 | 浙江 | 1 |
| 2 | 刘猪猪 | 男 | 7000.67 | 1984-08-03 | 2015-07-03 | 7 | 河北 | 1 |
| 3 | 猪猪侠 | 男 | 8000 | 1985-04-09 | 2014-07-01 | 7 | 陕西 | 1 |
| 4 | 李大象 | 男 | 9456 | 1986-09-07 | 2015-08-08 | 22 | 黑龙江 | 3 |
| 5 | 周泡泡 | 男 | 8567 | 1978-08-02 | 2015-01-01 | 7 | 吉林 | 1 |
| 6 | 斯瓦辛格 | 男 | 12000 | 1985-04-03 | 2015-02-02 | 7 | 内蒙古 | 1 |
| 7 | 乐乐 | 男 | 15700 | 1982-08-02 | 2015-03-03 | 7 | 新疆 | 1 |
| 8 | 周大龙 | 男 | 9000 | 1983-03-02 | 2015-01-06 | 7 | 西藏 | 1 |
| 9 | 李峰 | 男 | 7897 | 1984-09-01 | 2015-04-01 | 7 | 天津 | 1 |
| 10 | 韩噶 | 男 | 8789 | 1989-04-02 | 2014-09-03 | 7 | 江苏 | 1 |
±----±---------±-------±--------±-----------±-----------±-----±-------------±-----+
10 rows in set (0.00 sec)
(2)查询员工的信息,要求查询第二页,每页显示10条
SELECT * FROM t_employee LIMIT 10,10;
±----±-------±-------±-------±-----------±-----------±-----±-------------±-----+
| eid | ename | gender | salary | birthday | hiredate | mid | native_place | did |
±----±-------±-------±-------±-----------±-----------±-----±-------------±-----+
| 11 | 黄大大 | 男 | 15678 | 1983-05-07 | 2014-04-04 | 7 | 安徽 | 1 |
| 12 | 范冰 | 女 | 8909 | 1986-04-02 | 2014-02-08 | 7 | 贵州 | 1 |
| 13 | 李冰 | 女 | 18760 | 1987-04-09 | 2015-06-07 | 7 | 四川 | 1 |
| 14 | 邻娜 | 女 | 18978 | 1990-01-01 | 2015-09-05 | 14 | 成都 | 2 |
| 15 | 董号 | 女 | 8978 | 1987-05-05 | 2015-08-04 | 14 | 云南 | 2 |
| 16 | 汤唯俄 | 女 | 9878 | 1988-03-06 | 2015-03-06 | 14 | 宁夏 | 2 |
| 17 | 李诗圣 | 女 | 9000 | 1990-08-09 | 2013-06-09 | 14 | 河南 | 2 |
| 18 | 凯记卡 | 女 | 16788 | 1978-09-04 | 2013-04-05 | 18 | 福建 | 4 |
| 19 | 周积极 | 女 | 7876 | 1988-06-13 | 2014-04-07 | 18 | 广西 | 4 |
| 20 | 张章子 | 女 | 15099 | 1989-12-11 | 2015-08-04 | 20 | 广东 | 5 |
±----±-------±-------±-------±-----------±-----------±-----±-------------±-----+
10 rows in set (0.00 sec)
(3)查询员工的信息,薪水高于15000的,显示第2页,每页显示4条
SELECT * FROM t_employee WHERE salary >15000 LIMIT 4,4;
±----±-------±-------±-------±-----------±-----------±-----±-------------±-----+
| eid | ename | gender | salary | birthday | hiredate | mid | native_place | did |
±----±-------±-------±-------±-----------±-----------±-----±-------------±-----+
| 18 | 凯记卡 | 女 | 16788 | 1978-09-04 | 2013-04-05 | 18 | 福建 | 4 |
| 20 | 张章子 | 女 | 15099 | 1989-12-11 | 2015-08-04 | 20 | 广东 | 5 |
| 22 | 刘化环 | 男 | 130990 | 1990-11-09 | 2016-08-09 | 22 | 北京 | 3 |
| 23 | 陈龙 | 男 | 130990 | 1990-02-04 | 2016-05-09 | 2 | 上海 | 1 |
±----±-------±-------±-------±-----------±-----------±-----±-------------±-----+
4 rows in set (0.00 sec)
(4)查询每一个部门的人数信息,显示第1页,每页显示2条
SELECT did,COUNT(*) FROM t_employee GROUP BY did LIMIT 0,2;
±-----±---------+
| did | COUNT(*) |
±-----±---------+
| 1 | 13 |
| 2 | 4 |
±-----±---------+
2 rows in set (0.00 sec)
(5)查询每个部门的女员工的人数信息,显示第1页,每页显示2条
SELECT did,COUNT(*) FROM t_employee WHERE gender='女' GROUP BY did LIMIT 0,2;
±-----±---------+
| did | COUNT(*) |
±-----±---------+
| 1 | 2 |
| 2 | 4 |
±-----±---------+
2 rows in set (0.00 sec)
#轻松一刻:
☝上述分享来源个人总结,如果分享对您有帮忙,希望您积极转载;如果您有不同的见解,希望您积极留言,让我们一起探讨,您的鼓励将是我前进道路上一份助力,非常感谢!我会不定时更新相关技术动态,同时我也会不断完善自己,提升技术,希望与君同成长同进步!
☞本人博客:https://coding0110lin.blog.csdn.net/ 欢迎转载,一起技术交流吧!
MySQL数据库select语句6大子句(from、where、group by、having、order by 、limit )#经典员工、部门表案例语句练手!相关推荐
- select的5中子句where,group by, havaing, order by, limit的使用顺序及实例
-- 语法: SELECT select_list FROM table_name [ WHERE search_condition ] [ GROUP BY group_by_expression ...
- mysql数据库select语句用法_mysql学习笔记之完整的select语句用法实例详解
本文实例讲述了mysql学习笔记之完整的select语句用法.分享给大家供大家参考,具体如下: 本文内容: 完整语法 去重选项 字段别名 数据源 where group by having order ...
- mysql数据库中查询第几条到第几条数据_在 mysql 数据库中,从查询结果的第四条记录开始选取5条记录,下面 sql 语句正确的是( )...
[单选题]同一种货物,在同一线路上或平行线路上作相对方向的运送,而与对方运程的全部或一部分发生重迭交错的运输被称为( ). [多选题]水闸一般由()三部分组成 [单选题]在一个常规的统计表内,非必需包 ...
- mysql数据库 SELECT COUNT(1) FROM new_comps WHERE deleted = 0 统计数据太慢了二十多秒
@TOC使用mybatis-puls分页查询数据量大很慢,怎么处理 mysql数据库 SELECT COUNT(1) FROM new_comps WHERE deleted = 0 统计数据太慢了二 ...
- MySQL数据库select查询命令大全
MySQL数据库select查询命令大全 --数据库操作前的准备 -- 创建数据库 -- create database python_test_1 charset=utf8; -- 使用数据库 -- ...
- Mysql 设计超市经营管理系统,包括员工信息表(employee)和 员工部门表(department)
互联网技术学院周测机试题(二) 一.需求分析 为进一步完善连锁超市经营管理,提高管理效率,减少管理成本,决定开发一套商品管理系统,用于日常的管理.本系统分为商品管理.员工管理.店铺管理,库存管理等功能 ...
- MySQL数据库select语句的使用方法
select语句可 以用回车分隔 $sql="select * from article where id=1"和 $sql="select * from article ...
- mysql数据库select语句用法_mysql数据库select查询语句简单用法
mysql select简单用法 1.select语句可以用回车分隔$sql="select * from article where id=1"和$sql="selec ...
- MySQL数据库性能优化史诗级大总结
点击上方蓝色字体,选择"设为星标" 回复"资源"获取更多资源 大数据技术与架构 点击右侧关注,大数据开发领域最强公众号! 大数据真好玩 点击右侧关注,大数据真好 ...
最新文章
- UltraEdit 21激活
- rocketmq 重复消费_RocketMQ的十二个特性,你都知道吗「下」
- ffmpeg文件拼接
- mysql 视图 字符集_MySQL创建子视图并查看的时候,字符集报错问题
- 解决查询时报的cannot be cast to com.credithc.enjoy.manager.OrderResp错误
- jpa 测试_使用外星人进行测试:如何使用Arquillian测试JPA类型转换器
- 使用PostgREST的RestAPI操作之 类型转JSON对象 | 嵌入视图
- 自动改变文字大小和颜色的javascript效果
- 编译器后端,寄存器分配算法
- a new weekday
- bzoj 2431: [HAOI2009]逆序对数列
- 【小松教你手游开发】【游戏渲染】单色shader,纹理shader
- 数据包接收系列 — 上半部实现(网卡驱动)
- chage 修改用户密码的有效期限
- HFSS19 官方中文教程系列 L04
- ssm教师教学评价系统(ssm教学评价系统教师ssm学生评教系统)JSP网上评教系统jsp评教系统
- Guri团队的侧信道攻击研究
- Weblogic安装时闪退问题
- PackageManager的参数及使用
- 谈业务流程全生命周期管理支撑业务流程再造(2)
热门文章
- php捉迷藏,查看“蘑菇捉迷藏!”的源代码
- Win7 64b的VS2015 如何使用nmake成功编译detour express 3.0-error2202 警告被视为错误 - 没有生成“object”文件
- mac 重置mysql root密码_MAC 重置MySQL root 密码
- 2021年美容师(初级)考试总结及美容师(初级)模拟试题
- Rust更适合经验较少的程序员?
- Hash一致性算法(分片机制)
- 我辞职了准备系统学习新知识和技提升自己
- kasp技术原理_SNP检测Massarray法怎么样?中高通量大样本适用吗?
- 蚁群算法求最值c语言实现,蚁群算法代码(求函数最值)
- MyBatis入门级(增删改查)