一.题目:
1)分析:
1.有 姓名 ,性别,入职时间(需要开始时间和结束时间-->范围查询);
2.右下角有分页条-->需要分页展示
2)创建表的代码:
-- 员工管理
create table emp
(id int unsigned primary key auto_increment comment 'ID',username varchar(20) not null unique comment '用户名',password varchar(32) default '123456' comment '密码',name varchar(10) not null comment '姓名',gender tinyint unsigned not null comment '性别, 说明: 1 男, 2 女',image varchar(300) comment '图像',job tinyint unsigned comment '职位, 说明: 1 班主任,2 讲师, 3 学工主管, 4 教研主管',entrydate date comment '入职时间',create_time datetime not null comment '创建时间',update_time datetime not null comment '修改时间'
) comment '员工表';
INSERT INTO emp
(id, username, password, name, gender, image, job, entrydate, create_time, update_time)
VALUES (1, 'jinyong', '123456', '金庸', 1, '1.jpg', 4, '2000-01-01', now(), now()),(2, 'zhangwuji', '123456', '张无忌', 1, '2.jpg', 2, '2015-01-01', now(), now()),(3, 'yangxiao', '123456', '杨逍', 1, '3.jpg', 2, '2008-05-01', now(), now()),(4, 'weiyixiao', '123456', '韦一笑', 1, '4.jpg', 2, '2007-01-01', now(), now()),(5, 'changyuchun', '123456', '常遇春', 1, '5.jpg', 2, '2012-12-05', now(), now()),(6, 'xiaozhao', '123456', '小昭', 2, '6.jpg', 3, '2013-09-05', now(), now()),(7, 'jixiaofu', '123456', '纪晓芙', 2, '7.jpg', 1, '2005-08-01', now(), now()),(8, 'zhouzhiruo', '123456', '周芷若', 2, '8.jpg', 1, '2014-11-09', now(), now()),(9, 'dingminjun', '123456', '丁敏君', 2, '9.jpg', 1, '2011-03-11', now(), now()),(10, 'zhaomin', '123456', '赵敏', 2, '10.jpg', 1, '2013-09-05', now(), now()),(11, 'luzhangke', '123456', '鹿杖客', 1, '11.jpg', 2, '2007-02-01', now(), now()),(12, 'hebiweng', '123456', '鹤笔翁', 1, '12.jpg', 2, '2008-08-18', now(), now()),(13, 'fangdongbai', '123456', '方东白', 1, '13.jpg', 1, '2012-11-01', now(), now()),(14, 'zhangsanfeng', '123456', '张三丰', 1, '14.jpg', 2, '2002-08-01', now(), now()),(15, 'yulianzhou', '123456', '俞莲舟', 1, '15.jpg', 2, '2011-05-01', now(), now()),(16, 'songyuanqiao', '123456', '宋远桥', 1, '16.jpg', 2, '2010-01-01', now(), now()),(17, 'chenyouliang', '12345678', '陈友谅', 1, '17.jpg', NULL, '2015-03-21', now(), now()),(18, 'zhang1', '123456', '张一', 1, '2.jpg', 2, '2015-01-01', now(), now()),(19, 'zhang2', '123456', '张二', 1, '2.jpg', 2, '2012-01-01', now(), now()),(20, 'zhang3', '123456', '张三', 1, '2.jpg', 2, '2018-01-01', now(), now()),(21, 'zhang4', '123456', '张四', 1, '2.jpg', 2, '2015-01-01', now(), now()),(22, 'zhang5', '123456', '张五', 1, '2.jpg', 2, '2016-01-01', now(), now()),(23, 'zhang6', '123456', '张六', 1, '2.jpg', 2, '2012-01-01', now(), now()),(24, 'zhang7', '123456', '张七', 1, '2.jpg', 2, '2006-01-01', now(), now()),(25, 'zhang8', '123456', '张八', 1, '2.jpg', 2, '2002-01-01', now(), now()),(26, 'zhang9', '123456', '张九', 1, '2.jpg', 2, '2011-01-01', now(), now()),(27, 'zhang10', '123456', '张十', 1, '2.jpg', 2, '2004-01-01', now(), now()),(28, 'zhang11', '123456', '张十一', 1, '2.jpg', 2, '2007-01-01', now(), now()),(29, 'zhang12', '123456', '张十二', 1, '2.jpg', 2, '2020-01-01', now(), now());
二.书写条件语句:
条件如下:
案例1:按需求完成员工管理的条件分页查询 - 根据输入条件,查询第一页数据,每页展示10条记录
输入条件: 姓名:张 性别:男 入职时间:2000-01-01 到 2015-12-31
-
规则:
-
代码实现:
select * from emp where name like '张%'and gender = 1and entrydate between '2000-01-01' and '2015-12-31' order by update_time desc limit 0,10;
案例2:根据需求,完成员工信息的统计
-
案例2-1:根据需求,完成员工性别信息的统计
代码实现:
先查询出男性员工和女性员工的数量:
select gender, count(*) from emp group by gender;
运行结果为:
但题目要求的是男性员工和女性员工的数量,所以要把gender下面的信息中1改为男性员工,2改为女性员工
此时需要用到流程控制函数if 即
if(条件表达式,条件表达式结果为true取该值,条件表达式结果为false取该值)
代码实现:
select if(gender = 1, '男性员工', '女性员工'), count(*) -- gender为1时1改为男性员工,不为1时改为女性员工
from emp
group by gender;
运行结果为:
简化if(gender = 1, '男性员工', '女性员工'):
代码实现:
select if(gender = 1, '男性员工', '女性员工') 性别, count(*) -- gender为1时1改为男性员工,不为1时改为女性员工
from emp
group by gender;
运行结果为:
-
案例2-2:根据需求,完成员工职位信息的统计
代码实现:
先查询职位数量:
select job, count(*)
from emp
group by job;
运行结果为:
根据题目需求,需要把job下面的1改为班主任,2改为讲师,3改为学工主管,4改为教研主管
(创建表时1代表班主任,2代表讲师,3代表学工主管,4代表教研主管)
由于此时需要修改的数据大于2,因此无法用if语句,要用到
另外一个流程控制函数 case 即
case 表达式 when 值1 then 结果1 when 值2 then 结果2 ...(后面可加多个修改方案) else ... end
(case 表达式 when 值1 then 结果1 when 值2 then 结果2 ...(后面可加多个修改方案) else ... end) 别名 即把case整个语句用括号括住后再在后面加一个别名即可把case后面的表达式改为别名
代码实现:
select (case jobwhen 1 then '班主任'when 2 then '讲师'when 3 then '学工主管'when 4 then '教研主管'else '未分配职位' end) 职位, count(*)
from emp
group by job;
运行结果为: