MySQL中的select语句,有说5大子句,有说6大子句的,两者都没有问题,只不过把from接表名算上一个子句,where是条件查询,group by是分组查询,having是筛选,order by是排序,limit是分页,下面对这五个子句进行了详细的总结,结合一些栗子,方便快速上手。
这6个子句在我们进行查询操作时不一定同时出现,如果同时应用到了这6大子句,就一定要注意它们的先后顺序,不能随意调换,即编写顺序from->where ->group by->having ->order by ->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 | -07-28 | 7 | 浙江 | 1 |
| 2 | 刘猪猪 | 男 | 7000.67 | 1984-08-03 | -07-03 | 7 | 河北 | 1 |
| 3 | 猪猪侠 | 男 | 8000 | 1985-04-09 | -07-01 | 7 | 陕西 | 1 |
| 4 | 李大象 | 男 | 9456 | 1986-09-07 | -08-08 | 22 | 黑龙江 | 3 |
| 5 | 周泡泡 | 男 | 8567 | 1978-08-02 | -01-01 | 7 | 吉林 | 1 |
| 6 | 斯瓦辛格 | 男 | 12000 | 1985-04-03 | -02-02 | 7 | 内蒙古 | 1 |
| 7 | 乐乐 | 男 | 15700 | 1982-08-02 | -03-03 | 7 | 新疆 | 1 |
| 8 | 周大龙 | 男 | 9000 | 1983-03-02 | -01-06 | 7 | 西藏 | 1 |
| 9 | 李峰 | 男 | 7897 | 1984-09-01 | -04-01 | 7 | 天津 | 1 |
| 10 | 韩噶 | 男 | 8789 | 1989-04-02 | -09-03 | 7 | 江苏 | 1 |
| 11 | 黄大大 | 男 | 15678 | 1983-05-07 | -04-04 | 7 | 安徽 | 1 |
| 12 | 范冰 | 女 | 8909 | 1986-04-02 | -02-08 | 7 | 贵州 | 1 |
| 13 | 李冰 | 女 | 18760 | 1987-04-09 | -06-07 | 7 | 四川 | 1 |
| 14 | 邻娜 | 女 | 18978 | 1990-01-01 | -09-05 | 14 | 成都 | 2 |
| 15 | 董号 | 女 | 8978 | 1987-05-05 | -08-04 | 14 | 云南 | 2 |
| 16 | 汤唯俄 | 女 | 9878 | 1988-03-06 | -03-06 | 14 | 宁夏 | 2 |
| 17 | 李诗圣 | 女 | 9000 | 1990-08-09 | -06-09 | 14 | 河南 | 2 |
| 18 | 凯记卡 | 女 | 16788 | 1978-09-04 | -04-05 | 18 | 福建 | 4 |
| 19 | 周积极 | 女 | 7876 | 1988-06-13 | -04-07 | 18 | 广西 | 4 |
| 20 | 张章子 | 女 | 15099 | 1989-12-11 | -08-04 | 20 | 广东 | 5 |
| 21 | 白百客 | 女 | 9787 | 1989-09-04 | -06-05 | 20 | 海南 | 5 |
| 22 | 刘化环 | 男 | 130990 | 1990-11-09 | -08-09 | 22 | 北京 | 3 |
| 23 | 陈龙 | 男 | 130990 | 1990-02-04 | -05-09 | 2 | 上海 | 1 |
| 24 | 迪丽热 | 女 | 10289 | 1990-04-01 | -02-06 | 18 | 北京 | 5 |
| 25 | 姚杰杰 | 女 | 9087 | 1989-08-01 | -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 | -05-09 | 2 | 上海 | 1 |
| 22 | 刘化环 | 男 | 130990 | 1990-11-09 | -08-09 | 22 | 北京 | 3 |
| 14 | 邻娜 | 女 | 18978 | 1990-01-01 | -09-05 | 14 | 成都 | 2 |
| 13 | 李冰 | 女 | 18760 | 1987-04-09 | -06-07 | 7 | 四川 | 1 |
| 18 | 凯记卡 | 女 | 16788 | 1978-09-04 | -04-05 | 18 | 福建 | 4 |
| 7 | 乐乐 | 男 | 15700 | 1982-08-02 | -03-03 | 7 | 新疆 | 1 |
| 11 | 黄大大 | 男 | 15678 | 1983-05-07 | -04-04 | 7 | 安徽 | 1 |
| 20 | 张章子 | 女 | 15099 | 1989-12-11 | -08-04 | 20 | 广东 | 5 |
| 6 | 斯瓦辛格 | 男 | 12000 | 1985-04-03 | -02-02 | 7 | 内蒙古 | 1 |
| 24 | 迪丽热 | 女 | 10289 | 1990-04-01 | -02-06 | 18 | 北京 | 5 |
| 16 | 汤唯俄 | 女 | 9878 | 1988-03-06 | -03-06 | 14 | 宁夏 | 2 |
| 21 | 白百客 | 女 | 9787 | 1989-09-04 | -06-05 | 20 | 海南 | 5 |
| 4 | 李大象 | 男 | 9456 | 1986-09-07 | -08-08 | 22 | 黑龙江 | 3 |
| 25 | 姚杰杰 | 女 | 9087 | 1989-08-01 | -09-01 | 18 | 北京 | 5 |
| 17 | 李诗圣 | 女 | 9000 | 1990-08-09 | -06-09 | 14 | 河南 | 2 |
| 8 | 周大龙 | 男 | 9000 | 1983-03-02 | -01-06 | 7 | 西藏 | 1 |
| 15 | 董号 | 女 | 8978 | 1987-05-05 | -08-04 | 14 | 云南 | 2 |
| 12 | 范冰 | 女 | 8909 | 1986-04-02 | -02-08 | 7 | 贵州 | 1 |
| 10 | 韩噶 | 男 | 8789 | 1989-04-02 | -09-03 | 7 | 江苏 | 1 |
| 5 | 周泡泡 | 男 | 8567 | 1978-08-02 | -01-01 | 7 | 吉林 | 1 |
| 1 | 林大侠 | 男 | 8000.46 | 1980-10-08 | -07-28 | 7 | 浙江 | 1 |
| 3 | 猪猪侠 | 男 | 8000 | 1985-04-09 | -07-01 | 7 | 陕西 | 1 |
| 9 | 李峰 | 男 | 7897 | 1984-09-01 | -04-01 | 7 | 天津 | 1 |
| 19 | 周积极 | 女 | 7876 | 1988-06-13 | -04-07 | 18 | 广西 | 4 |
| 2 | 刘猪猪 | 男 | 7000.67 | 1984-08-03 | -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 | -08-09 | 22 | 北京 | 3 |
| 23 | 陈龙 | 男 | 130990 | 1990-02-04 | -05-09 | 2 | 上海 | 1 |
| 14 | 邻娜 | 女 | 18978 | 1990-01-01 | -09-05 | 14 | 成都 | 2 |
| 13 | 李冰 | 女 | 18760 | 1987-04-09 | -06-07 | 7 | 四川 | 1 |
| 18 | 凯记卡 | 女 | 16788 | 1978-09-04 | -04-05 | 18 | 福建 | 4 |
| 7 | 乐乐 | 男 | 15700 | 1982-08-02 | -03-03 | 7 | 新疆 | 1 |
| 11 | 黄大大 | 男 | 15678 | 1983-05-07 | -04-04 | 7 | 安徽 | 1 |
| 20 | 张章子 | 女 | 15099 | 1989-12-11 | -08-04 | 20 | 广东 | 5 |
| 6 | 斯瓦辛格 | 男 | 12000 | 1985-04-03 | -02-02 | 7 | 内蒙古 | 1 |
| 24 | 迪丽热 | 女 | 10289 | 1990-04-01 | -02-06 | 18 | 北京 | 5 |
| 16 | 汤唯俄 | 女 | 9878 | 1988-03-06 | -03-06 | 14 | 宁夏 | 2 |
| 21 | 白百客 | 女 | 9787 | 1989-09-04 | -06-05 | 20 | 海南 | 5 |
| 4 | 李大象 | 男 | 9456 | 1986-09-07 | -08-08 | 22 | 黑龙江 | 3 |
| 25 | 姚杰杰 | 女 | 9087 | 1989-08-01 | -09-01 | 18 | 北京 | 5 |
| 8 | 周大龙 | 男 | 9000 | 1983-03-02 | -01-06 | 7 | 西藏 | 1 |
| 17 | 李诗圣 | 女 | 9000 | 1990-08-09 | -06-09 | 14 | 河南 | 2 |
| 15 | 董号 | 女 | 8978 | 1987-05-05 | -08-04 | 14 | 云南 | 2 |
| 12 | 范冰 | 女 | 8909 | 1986-04-02 | -02-08 | 7 | 贵州 | 1 |
| 10 | 韩噶 | 男 | 8789 | 1989-04-02 | -09-03 | 7 | 江苏 | 1 |
| 5 | 周泡泡 | 男 | 8567 | 1978-08-02 | -01-01 | 7 | 吉林 | 1 |
| 1 | 林大侠 | 男 | 8000.46 | 1980-10-08 | -07-28 | 7 | 浙江 | 1 |
| 3 | 猪猪侠 | 男 | 8000 | 1985-04-09 | -07-01 | 7 | 陕西 | 1 |
| 9 | 李峰 | 男 | 7897 | 1984-09-01 | -04-01 | 7 | 天津 | 1 |
| 19 | 周积极 | 女 | 7876 | 1988-06-13 | -04-07 | 18 | 广西 | 4 |
| 2 | 刘猪猪 | 男 | 7000.67 | 1984-08-03 | -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 | -09-05 | 14 | 成都 | 2 |
| 13 | 李冰 | 女 | 18760 | 1987-04-09 | -06-07 | 7 | 四川 | 1 |
| 18 | 凯记卡 | 女 | 16788 | 1978-09-04 | -04-05 | 18 | 福建 | 4 |
| 20 | 张章子 | 女 | 15099 | 1989-12-11 | -08-04 | 20 | 广东 | 5 |
| 24 | 迪丽热 | 女 | 10289 | 1990-04-01 | -02-06 | 18 | 北京 | 5 |
| 16 | 汤唯俄 | 女 | 9878 | 1988-03-06 | -03-06 | 14 | 宁夏 | 2 |
| 21 | 白百客 | 女 | 9787 | 1989-09-04 | -06-05 | 20 | 海南 | 5 |
| 25 | 姚杰杰 | 女 | 9087 | 1989-08-01 | -09-01 | 18 | 北京 | 5 |
| 17 | 李诗圣 | 女 | 9000 | 1990-08-09 | -06-09 | 14 | 河南 | 2 |
| 15 | 董号 | 女 | 8978 | 1987-05-05 | -08-04 | 14 | 云南 | 2 |
| 12 | 范冰 | 女 | 8909 | 1986-04-02 | -02-08 | 7 | 贵州 | 1 |
| 19 | 周积极 | 女 | 7876 | 1988-06-13 | -04-07 | 18 | 广西 | 4 |
| 22 | 刘化环 | 男 | 130990 | 1990-11-09 | -08-09 | 22 | 北京 | 3 |
| 23 | 陈龙 | 男 | 130990 | 1990-02-04 | -05-09 | 2 | 上海 | 1 |
| 7 | 乐乐 | 男 | 15700 | 1982-08-02 | -03-03 | 7 | 新疆 | 1 |
| 11 | 黄大大 | 男 | 15678 | 1983-05-07 | -04-04 | 7 | 安徽 | 1 |
| 6 | 斯瓦辛格 | 男 | 12000 | 1985-04-03 | -02-02 | 7 | 内蒙古 | 1 |
| 4 | 李大象 | 男 | 9456 | 1986-09-07 | -08-08 | 22 | 黑龙江 | 3 |
| 8 | 周大龙 | 男 | 9000 | 1983-03-02 | -01-06 | 7 | 西藏 | 1 |
| 10 | 韩噶 | 男 | 8789 | 1989-04-02 | -09-03 | 7 | 江苏 | 1 |
| 5 | 周泡泡 | 男 | 8567 | 1978-08-02 | -01-01 | 7 | 吉林 | 1 |
| 1 | 林大侠 | 男 | 8000.46 | 1980-10-08 | -07-28 | 7 | 浙江 | 1 |
| 3 | 猪猪侠 | 男 | 8000 | 1985-04-09 | -07-01 | 7 | 陕西 | 1 |
| 9 | 李峰 | 男 | 7897 | 1984-09-01 | -04-01 | 7 | 天津 | 1 |
| 2 | 刘猪猪 | 男 | 7000.67 | 1984-08-03 | -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 | -04-05 | 18 | 福建 | 4 |
| 5 | 周泡泡 | 男 | 8567 | 1978-08-02 | -01-01 | 7 | 吉林 | 1 |
| 1 | 林大侠 | 男 | 8000.46 | 1980-10-08 | -07-28 | 7 | 浙江 | 1 |
| 7 | 乐乐 | 男 | 15700 | 1982-08-02 | -03-03 | 7 | 新疆 | 1 |
| 11 | 黄大大 | 男 | 15678 | 1983-05-07 | -04-04 | 7 | 安徽 | 1 |
| 8 | 周大龙 | 男 | 9000 | 1983-03-02 | -01-06 | 7 | 西藏 | 1 |
| 9 | 李峰 | 男 | 7897 | 1984-09-01 | -04-01 | 7 | 天津 | 1 |
| 2 | 刘猪猪 | 男 | 7000.67 | 1984-08-03 | -07-03 | 7 | 河北 | 1 |
| 6 | 斯瓦辛格 | 男 | 12000 | 1985-04-03 | -02-02 | 7 | 内蒙古 | 1 |
| 3 | 猪猪侠 | 男 | 8000 | 1985-04-09 | -07-01 | 7 | 陕西 | 1 |
| 4 | 李大象 | 男 | 9456 | 1986-09-07 | -08-08 | 22 | 黑龙江 | 3 |
| 12 | 范冰 | 女 | 8909 | 1986-04-02 | -02-08 | 7 | 贵州 | 1 |
| 13 | 李冰 | 女 | 18760 | 1987-04-09 | -06-07 | 7 | 四川 | 1 |
| 15 | 董号 | 女 | 8978 | 1987-05-05 | -08-04 | 14 | 云南 | 2 |
| 16 | 汤唯俄 | 女 | 9878 | 1988-03-06 | -03-06 | 14 | 宁夏 | 2 |
| 19 | 周积极 | 女 | 7876 | 1988-06-13 | -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_employeeGROUP BY didORDER 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_employeeGROUP BY did,genderORDER 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_employeeGROUP BY did,genderORDER 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_departmentON t_employee.did = t_department.`did`GROUP BY did,genderORDER 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_departmentON t_employee.did = t_department.`did`WHERE salary >15000GROUP BY did,genderORDER 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_departmentON t_employee.did = t_department.`did`WHERE salary >15000GROUP BY did,genderHAVING COUNT(*)>1ORDER 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 | -07-28 | 7 | 浙江 | 1 |
| 2 | 刘猪猪 | 男 | 7000.67 | 1984-08-03 | -07-03 | 7 | 河北 | 1 |
| 3 | 猪猪侠 | 男 | 8000 | 1985-04-09 | -07-01 | 7 | 陕西 | 1 |
| 4 | 李大象 | 男 | 9456 | 1986-09-07 | -08-08 | 22 | 黑龙江 | 3 |
| 5 | 周泡泡 | 男 | 8567 | 1978-08-02 | -01-01 | 7 | 吉林 | 1 |
| 6 | 斯瓦辛格 | 男 | 12000 | 1985-04-03 | -02-02 | 7 | 内蒙古 | 1 |
| 7 | 乐乐 | 男 | 15700 | 1982-08-02 | -03-03 | 7 | 新疆 | 1 |
| 8 | 周大龙 | 男 | 9000 | 1983-03-02 | -01-06 | 7 | 西藏 | 1 |
| 9 | 李峰 | 男 | 7897 | 1984-09-01 | -04-01 | 7 | 天津 | 1 |
| 10 | 韩噶 | 男 | 8789 | 1989-04-02 | -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 | -04-04 | 7 | 安徽 | 1 |
| 12 | 范冰 | 女 | 8909 | 1986-04-02 | -02-08 | 7 | 贵州 | 1 |
| 13 | 李冰 | 女 | 18760 | 1987-04-09 | -06-07 | 7 | 四川 | 1 |
| 14 | 邻娜 | 女 | 18978 | 1990-01-01 | -09-05 | 14 | 成都 | 2 |
| 15 | 董号 | 女 | 8978 | 1987-05-05 | -08-04 | 14 | 云南 | 2 |
| 16 | 汤唯俄 | 女 | 9878 | 1988-03-06 | -03-06 | 14 | 宁夏 | 2 |
| 17 | 李诗圣 | 女 | 9000 | 1990-08-09 | -06-09 | 14 | 河南 | 2 |
| 18 | 凯记卡 | 女 | 16788 | 1978-09-04 | -04-05 | 18 | 福建 | 4 |
| 19 | 周积极 | 女 | 7876 | 1988-06-13 | -04-07 | 18 | 广西 | 4 |
| 20 | 张章子 | 女 | 15099 | 1989-12-11 | -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 | -04-05 | 18 | 福建 | 4 |
| 20 | 张章子 | 女 | 15099 | 1989-12-11 | -08-04 | 20 | 广东 | 5 |
| 22 | 刘化环 | 男 | 130990 | 1990-11-09 | -08-09 | 22 | 北京 | 3 |
| 23 | 陈龙 | 男 | 130990 | 1990-02-04 | -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./ 欢迎转载,一起技术交流吧!
MySQL数据库select语句6大子句(from where group by having order by limit )#经典员工 部门表案例语句练手!