一.查询案例(员工信息管理系统)
1.数据库与表的建立
2.数据的添加
二.统计查询
1.总人数查询
查询总人数,可借助count()函数实现,他的原理是对数据表实现全扫描。针对emp_infor表,他的count语句为:
select count(*) from emp_infor;
其中count(*)用于对所有字段进行统计,很显然这种方法相对低效,因为需要查询出全部字段,有一种优化的方案是只计算emp_id字段,SQL语句可以写成:
select count(emp_id) from emp_infor;
注:上面时间显示有问题,理应上面一个查询时间较长,如果记录达几万条,时间差距更明显。
2.部门总数查询
公司由若干个部门组成,如果管理人员想查询当前由哪几个部门组成,可以利用distinct关键字,来统计emp_dep字段有多少类。
如果想查询当前公司有多少个部门,查询语句稍作修改,查询语句及结果如下:
3.as语句的使用
as可以修改返回信息的标题
4.like语句使用
公司管理人员想了解各个部门人员的分布情况,比如想了解当前开发部有多少人,查询语句如下:
对于条件查询语句,可以实现并集的查找,即此时管理人员想了解,在开发部的所有人员中,有多少位项目经理,其查询语句及结果如下:
下面继续查询,开发部中项目经理的名字,性别,以及是否在职,查询语句及结果如下:
5.sum函数
公司财务人员想了解每一个月公司的财务部门在薪水方面支出多少钱,要用到sum函数:
想了解开发部在薪水支出上,占到总支出的百分比是多少,需要进行分解。
1)首先要查出开发部每月薪水总支出数
select sum(emp_salary) from emp_infor where emp_dep like 'kaifabu';
2)查询总支出数,见上面
3)将两者相除
select A/B
6.avg函数
MySQL提供了一种平均数的计算函数,avg(),查询平均薪水的语句如下:
select avg(emp_salary) from emp_infor;
查询开发人员的平均收入:
select avg(emp_salary) from emp_infor where emp_dep like 'kaifa%';
7.max与min函数
1)查询公司收入最高的人的相关信息:
select max(emp_salary) from emp_infor;
2)最低
select min(emp_salary) from emp_infor;
三.排序与分类
1.order by
按某一个字段进行排序,排序的方式可以是从低到高,也可以从高到低,分别对应asc和dsc属性,例如从高到低输出员工收入信息:
2.group by
对结果集进行分类,将相同的分为一组。
例如,管理人员想在一次查询中,查看各个部门最高收入,最低收入,以及平均收入
在group by语句中,有一个having子句,即针对group by的条件查询,例如,假设部门的平均工资大于1.2倍的最低收入,则表明存在收入分化危险,管理人员想在一次查询的基础上,获得哪些部门的平均收入高于最低收入的1.2倍。
其中要用到having字句,即对产生的结果集判断是否该结果的平均结果大于1.2倍的最低收入。
四.日期查询
1.生日查询
生日查询的原理就是对比数据表中emp_birth字段,看是否与某一个日期相等,。
例如可以查询生日为11月11日的员工信息:
要查询当天有没有人过生日,对于这种查询,需要借助MySQL所提供的字符操作,利用当前的日期,格式化出类似于‘%MM-DD’的字符串,其中MM表示当前的月份,DD表示这个月的哪一天。下面讲解这个语句的编写。
1)利用date_format函数,now函数格式化出今天是某年某日的字符串:
2)利用concat函数,将日期字符串与通配符'%'进行拼接,形成'%MM-DD'的形式:
3)利用like语句,进行匹配查询:
2.年龄查询
这里的年龄计算语句为:date_format(from_days(to_days(now())-to_days(emp_birth)),'y')+0 。
3.工作年限查询
查看工作年限超过5年的员工信息: