DQL-案例

一.题目:

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 = 1
      and 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 job
            when 1 then '班主任'
            when 2 then '讲师'
            when 3 then '学工主管'
            when 4 then '教研主管'
            else '未分配职位' end) 职位, count(*)
from emp
group by job;

运行结果为:


三.总结:

1.流程控制函数:

2.DQL:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值