- -- 准备测试数据
- INSERT INTO tb_emp (id, username, password, name, gender, image, job, entrydate, create_time, update_time) VALUES
- (1, 'jinyong', '123456', '金庸', 1, '1.jpg', 4, '2000-01-01', '2022-10-27 16:35:33', '2022-10-27 16:35:35'),
- (2, 'zhangwuji', '123456', '张无忌', 1, '2.jpg', 2, '2015-01-01', '2022-10-27 16:35:33', '2022-10-27 16:35:37'),
- (3, 'yangxiao', '123456', '杨逍', 1, '3.jpg', 2, '2008-05-01', '2022-10-27 16:35:33', '2022-10-27 16:35:39'),
- (4, 'weiyixiao', '123456', '韦一笑', 1, '4.jpg', 2, '2007-01-01', '2022-10-27 16:35:33', '2022-10-27 16:35:41'),
- (5, 'changyuchun', '123456', '常遇春', 1, '5.jpg', 2, '2012-12-05', '2022-10-27 16:35:33', '2022-10-27 16:35:43'),
- (6, 'xiaozhao', '123456', '小昭', 2, '6.jpg', 3, '2013-09-05', '2022-10-27 16:35:33', '2022-10-27 16:35:45'),
- (7, 'jixiaofu', '123456', '纪晓芙', 2, '7.jpg', 1, '2005-08-01', '2022-10-27 16:35:33', '2022-10-27 16:35:47'),
- (8, 'zhouzhiruo', '123456', '周芷若', 2, '8.jpg', 1, '2014-11-09', '2022-10-27 16:35:33', '2022-10-27 16:35:49'),
- (9, 'dingminjun', '123456', '丁敏君', 2, '9.jpg', 1, '2011-03-11', '2022-10-27 16:35:33', '2022-10-27 16:35:51'),
- (10, 'zhaomin', '123456', '赵敏', 2, '10.jpg', 1, '2013-09-05', '2022-10-27 16:35:33', '2022-10-27 16:35:53'),
- (11, 'luzhangke', '123456', '鹿杖客', 1, '11.jpg', 2, '2007-02-01', '2022-10-27 16:35:33', '2022-10-27 16:35:55'),
- (12, 'hebiweng', '123456', '鹤笔翁', 1, '12.jpg', 2, '2008-08-18', '2022-10-27 16:35:33', '2022-10-27 16:35:57'),
- (13, 'fangdongbai', '123456', '方东白', 1, '13.jpg', 1, '2012-11-01', '2022-10-27 16:35:33', '2022-10-27 16:35:59'),
- (14, 'zhangsanfeng', '123456', '张三丰', 1, '14.jpg', 2, '2002-08-01', '2022-10-27 16:35:33', '2022-10-27 16:36:01'),
- (15, 'yulianzhou', '123456', '俞莲舟', 1, '15.jpg', 2, '2011-05-01', '2022-10-27 16:35:33', '2022-10-27 16:36:03'),
- (16, 'songyuanqiao', '123456', '宋远桥', 1, '16.jpg', 2, '2010-01-01', '2022-10-27 16:35:33', '2022-10-27 16:36:05'),
- (17, 'chenyouliang', '12345678', '陈友谅', 1, '17.jpg', null, '2015-03-21', '2022-10-27 16:35:33', '2022-10-27 16:36:07'),
- (18, 'zhang1', '123456', '张一', 1, '2.jpg', 2, '2015-01-01', '2022-10-27 16:35:33', '2022-10-27 16:36:09'),
- (19, 'zhang2', '123456', '张二', 1, '2.jpg', 2, '2012-01-01', '2022-10-27 16:35:33', '2022-10-27 16:36:11'),
- (20, 'zhang3', '123456', '张三', 1, '2.jpg', 2, '2018-01-01', '2022-10-27 16:35:33', '2022-10-27 16:36:13'),
- (21, 'zhang4', '123456', '张四', 1, '2.jpg', 2, '2015-01-01', '2022-10-27 16:35:33', '2022-10-27 16:36:15'),
- (22, 'zhang5', '123456', '张五', 1, '2.jpg', 2, '2016-01-01', '2022-10-27 16:35:33', '2022-10-27 16:36:17'),
- (23, 'zhang6', '123456', '张六', 1, '2.jpg', 2, '2012-01-01', '2022-10-27 16:35:33', '2022-10-27 16:36:19'),
- (24, 'zhang7', '123456', '张七', 1, '2.jpg', 2, '2006-01-01', '2022-10-27 16:35:33', '2022-10-27 16:36:21'),
- (25, 'zhang8', '123456', '张八', 1, '2.jpg', 2, '2002-01-01', '2022-10-27 16:35:33', '2022-10-27 16:36:23'),
- (26, 'zhang9', '123456', '张九', 1, '2.jpg', 2, '2011-01-01', '2022-10-27 16:35:33', '2022-10-27 16:36:25'),
- (27, 'zhang10', '123456', '张十', 1, '2.jpg', 2, '2004-01-01', '2022-10-27 16:35:33', '2022-10-27 16:36:27'),
- (28, 'zhang11', '123456', '张十一', 1, '2.jpg', 2, '2007-01-01', '2022-10-27 16:35:33', '2022-10-27 16:36:29'),
- (29, 'zhang12', '123456', '张十二', 1, '2.jpg', 2, '2020-01-01', '2022-10-27 16:35:33', '2022-10-27 16:36:31');
- -- ========================= DQL : 基本查询 =========================
- -- 1.查询指定字段 name, entrydate 并返回
- select name, entrydate from tb_emp;
-
-
- -- 2.查询返回所有字段
- -- (推荐)
- select id, username, password, name, gender, image, job, entrydate, create_time, update_time from tb_emp;
-
- -- (不推荐: 不直观,性能低)
- select * from tb_emp;
-
-
- -- 3.查询所有员工的 name, entrydate, 并起别名(姓名, 入职日期)
- select name '姓名', entrydate '入职日期' from tb_emp;
-
-
- -- 4.查询已有的员工关联了哪几种职业(不要重复)
- -- distinct 去重复
- select distinct job from tb_emp;
- -- ========================= DQL : 条件查询 =========================
- -- 1.查询 姓名 为 杨逍 的员工
- select * from tb_emp where name='杨逍';
-
- -- 2.查询 id 小于等于 5 的 员工信息
- select * from tb_emp where id <= 5;
-
- -- 3.查询 没有分配职务的 员工信息
- select * from tb_emp where job is null;
-
- -- 4.查询 有职位的 员工信息
- select * from tb_emp where job is not null;
-
- -- 5.查询 密码不等于 '123456' 的员工信息
- select * from tb_emp where password != '123456';
- select * from tb_emp where password <> '123456';
-
- -- 6.查询 入职日期 在'2000-01-01' (包含) 到 '2010-01-01' (包含) 之间的员工信息'
- select * from tb_emp where entrydate between '2000-01-01' and '2010-01-01';
-
- select * from tb_emp where entrydate >= '2000-01-01' and entrydate <= '2010-01-01';
-
- -- 7.查询 入职日期在 '2000-01-01' (包含) 到 '2010-01-01' (包含) 之间 且性别为 女 的员工信息
- select * from tb_emp where entrydate between '2000-01-01' and '2010-01-01' && gender = 2;
-
- select * from tb_emp where entrydate >= '2000-01-01' and entrydate <= '2010-01-01' and gender = 2;
-
- -- 8.查询 职位是 2 (讲师), 3(班主任), 4(教研主管) 的员工信息
- select * from tb_emp where job between 2 and 4;
-
- select * from tb_emp where job = 2 or job = 3 or job = 4;
-
- select * from tb_emp where job in (2,3,4);
-
- -- 9.查询 姓名 为两个字的员工信息
- select * from tb_emp where name like '__';
-
- -- 10.查询 姓 '张' 的员工信息
- select * from tb_emp where name like '张%';
- -- ========================= DQL : 条件查询 =========================
- -- 聚合函数 : 不对null值运算
- -- 1.统计企业员工数量
- -- A.count(字段)
- select count(id) from tb_emp;
-
- -- B.count(常量)
- select count(0) from tb_emp;
-
- -- C.count(*) --推荐
- select count(*) from tb_emp;
-
- -- 2.统计企业最早入职的员工 -- min
- select min(entrydate) from tb_emp;
-
- -- 3.统计企业最晚入职的员工
- select max(entrydate) from tb_emp;
-
- -- 4.统计企业员工 ID 的平均值 -- avg
- select avg(id) from tb_emp;
-
- -- 5.统计企业员工 ID 之和 -- sum
- select sum(id) from tb_emp;
面试题:
where与having区别:
1.执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而
having是分组之后对结果进行过滤。
2.判断条件不同:where不能对聚合函数进行判断,而having可以。
- -- 分组
- -- 分组查询:select 字段列表 from 表名 [ where 条件 ] group by 分组字段名 [ having 分组后过滤条件 ];
- -- 1.根据性别分组, 统计男性和女性的员工数量
- select gender,count(*) from tb_emp group by gender;
-
- -- 2.先查询入职时间在 '2015-01-01' (包含) 以前的员工, 并对结果根据职位分组, 获取员工数量大于等于2的职位
- select job,count(*) from tb_emp where entrydate <= '2015-01-01' group by job having count(*) >= 2;
- -- ========================= DQL : 排序查询 =========================
- -- 条件查询:select 字段列表 from 表名 [ where 条件列表 ] [ group by 分组字段 ] order by 字段1 排序方式1 , 字段2 排序方式2 ......
- -- ASC:升序(默认值) DESC:降序
- -- 1.根据 入职时间,对员工进行升序排序
- select * from tb_emp order by entrydate asc;
- select * from tb_emp order by entrydate;
-
- -- 2.根据 入职时间,对员工进行降序排序
- select * from tb_emp order by entrydate desc;
-
- -- 3.根据 入职时间,对公司的员工进行升序排序,入职时间相同,在按照 更新时间 进行降序排序
- select * from tb_emp order by entrydate asc, update_time desc ;
- select * from tb_emp order by entrydate, update_time desc ;
- -- ========================= DQL : 分页查询 =========================
- -- 分页查询:select 字段列表 from 表名 limit 起始索引, 查询记录数 ;
- -- 1.从 起始索引0 开始查询员工数据, 每页显示5条记录
- select * from tb_emp limit 0, 5;
-
- -- 2.查询 第1页 员工数据,每页展示5条记录
- select * from tb_emp limit 0, 5;
-
- -- 3.查询 第2页 员工数据,每页展示5条记录
- select * from tb_emp limit 5, 5;
-
- -- 3.查询 第3页 员工数据,每页展示5条记录
- select * from tb_emp limit 10, 5;
-
- -- 公式: 起始索引 = (页 - 1) * 条
公式: 起始索引 = (页码 - 1) * 条数
- -- 案例一: 按需求完成员工管理的条件分页查询 - 根据输入条件, 查询第一页数据, 每页展示10条记录
- -- 输入条件;
- -- 姓名: 张
- -- 性别: 男
- -- 入职时间: 2000-01-01 2015-12-13
- select *
- from tb_emp
- where name like '张%'
- and gender = 1
- and entrydate between '2000-01-01' and '2015-12-13'
- order by update_time desc
- limit 0,10;
- -- 案例2-1: 根据需求,完成员工性别信息的统计 -- count
- -- if(条件表达式,true取值,false取值)
- select if(gender = 1, '男性员工','女性员工') '性别', count(*) '数量' from tb_emp group by gender;
-
- -- 案例2-2: 根据需求, 完成员工职位信息的统计
- -- if嵌套 --经典屎山,不推荐
- select if(job <= 2, if(job = 1, '班主任', '讲师'), if(job = 3, '教研主管', if(job = 4,'学工主管','未分配职位'))) '职位', count(*) '数量'
- from tb_emp
- group by job;
-
- -- case 表达式 when 值 1 then 结果1 when 值 2 then 结果2 when 值 3 then 结果3...else...end
- select case job when 1 then '班主任' when 2 then '讲师' when 3 then '教研主管' when 4 then '学工主管' else '未分配职位' end '职位', count(*) '数量'
- from tb_emp
- group by job;
- -- ===========================================一对多=====================================
- -- 员工
- create table tb_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 '入职时间',
- dept_id int unsigned comment '归属部门ID',
- create_time datetime not null comment '创建时间',
- update_time datetime not null comment '修改时间'
- ) comment '员工表';
-
- -- 新增部门
- create table tb_dept
- (
- id int unsigned primary key auto_increment comment 'ID',
- name varchar(20) not null unique comment '部门名称',
- create_time datetime not null comment '创建时间',
- update_time datetime not null comment '修改时间'
- ) comment '部门表';
-
- -- 插入测试数据
- insert into tb_dept (id, name, create_time, update_time)
- values (1, '学工部', now(), now()),
- (2, '教研部', now(), now()),
- (3, '咨询部', now(), now()),
- (4, '就业部', now(), now()),
- (5, '人事部', now(), now());
-
- INSERT INTO tb_emp
- (id, username, password, name, gender, image, job, entrydate, dept_id, create_time, update_time)
- VALUES (1, 'jinyong', '123456', '金庸', 1, '1.jpg', 4, '2000-01-01', 2, now(), now()),
- (2, 'zhangwuji', '123456', '张无忌', 1, '2.jpg', 2, '2015-01-01', 2, now(), now()),
- (3, 'yangxiao', '123456', '杨逍', 1, '3.jpg', 2, '2008-05-01', 2, now(), now()),
- (4, 'weiyixiao', '123456', '韦一笑', 1, '4.jpg', 2, '2007-01-01', 2, now(), now()),
- (5, 'changyuchun', '123456', '常遇春', 1, '5.jpg', 2, '2012-12-05', 2, now(), now()),
- (6, 'xiaozhao', '123456', '小昭', 2, '6.jpg', 3, '2013-09-05', 1, now(), now()),
- (7, 'jixiaofu', '123456', '纪晓芙', 2, '7.jpg', 1, '2005-08-01', 1, now(), now()),
- (8, 'zhouzhiruo', '123456', '周芷若', 2, '8.jpg', 1, '2014-11-09', 1, now(), now()),
- (9, 'dingminjun', '123456', '丁敏君', 2, '9.jpg', 1, '2011-03-11', 1, now(), now()),
- (10, 'zhaomin', '123456', '赵敏', 2, '10.jpg', 1, '2013-09-05', 1, now(), now()),
- (11, 'luzhangke', '123456', '鹿杖客', 1, '11.jpg', 1, '2007-02-01', 1, now(), now()),
- (12, 'hebiweng', '123456', '鹤笔翁', 1, '12.jpg', 1, '2008-08-18', 1, now(), now()),
- (13, 'fangdongbai', '123456', '方东白', 1, '13.jpg', 2, '2012-11-01', 2, now(), now()),
- (14, 'zhangsanfeng', '123456', '张三丰', 1, '14.jpg', 2, '2002-08-01', 2, now(), now()),
- (15, 'yulianzhou', '123456', '俞莲舟', 1, '15.jpg', 2, '2011-05-01', 2, now(), now()),
- (16, 'songyuanqiao', '123456', '宋远桥', 1, '16.jpg', 2, '2010-01-01', 2, now(), now()),
- (17, 'chenyouliang', '123456', '陈友谅', 1, '17.jpg', NULL, '2015-03-21', NULL, now(), now());
-
-
- -- ===========================================一对一=====================================
- create table tb_user
- (
- id int unsigned primary key auto_increment comment 'ID',
- name varchar(10) not null comment '姓名',
- gender tinyint unsigned not null comment '性别, 1 男 2 女',
- phone char(11) comment '手机号',
- degree varchar(10) comment '学历'
- ) comment '用户信息表';
-
- insert into tb_user
- values (1, '白眉鹰王', 1, '18812340001', '初中'),
- (2, '青翼蝠王', 1, '18812340002', '大专'),
- (3, '金毛狮王', 1, '18812340003', '初中'),
- (4, '紫衫龙王', 2, '18812340004', '硕士');
-
-
- create table tb_user_card
- (
- id int unsigned primary key auto_increment comment 'ID',
- nationality varchar(10) not null comment '民族',
- birthday date not null comment '生日',
- idcard char(18) not null comment '身份证号',
- issued varchar(20) not null comment '签发机关',
- expire_begin date not null comment '有效期限-开始',
- expire_end date comment '有效期限-结束',
- user_id int unsigned not null unique comment '用户ID',
- constraint fk_user_id foreign key (user_id) references tb_user (id)
- ) comment '用户信息表';
-
- insert into tb_user_card
- values (1, '汉', '1960-11-06', '100000100000100001', '朝阳区公安局', '2000-06-10', null, 1),
- (2, '汉', '1971-11-06', '100000100000100002', '静安区公安局', '2005-06-10', '2025-06-10', 2),
- (3, '汉', '1963-11-06', '100000100000100003', '昌平区公安局', '2006-06-10', null, 3),
- (4, '回', '1980-11-06', '100000100000100004', '海淀区公安局', '2008-06-10', '2028-06-10', 4);
-
- -- ======================================多对多=============================
- create table tb_student
- (
- id int auto_increment primary key comment '主键ID',
- name varchar(10) comment '姓名',
- no varchar(10) comment '学号'
- ) comment '学生表';
-
- insert into tb_student(name, no)
- values ('黛绮丝', '2000100101'),
- ('谢逊', '2000100102'),
- ('殷天正', '2000100103'),
- ('韦一笑', '2000100104');
-
- -- ------------------- -----------------
-
- create table tb_course
- (
- id int auto_increment primary key comment '主键ID',
- name varchar(10) comment '课程名称'
- ) comment '课程表';
-
- insert into tb_course (name)
- values ('Java'),
- ('PHP'),
- ('MySQL'),
- ('Hadoop');
-
- -- ------------------- -----------------
-
- create table tb_student_course
- (
- id int auto_increment comment '主键' primary key,
- student_id int not null comment '学生ID',
- course_id int not null comment '课程ID',
- constraint fk_courseid foreign key (course_id) references tb_course (id),
- constraint fk_studentid foreign key (student_id) references tb_student (id)
- ) comment '学生课程中间表';
-
- insert into tb_student_course(student_id, course_id)
- values (1, 1),
- (1, 2),
- (1, 3),
- (2, 2),
- (2, 3),
- (3, 4);
- -- auto-generated definition
- create table category
- (
- id int unsigned auto_increment comment '主键id'
- primary key,
- name varchar(20) not null comment '分类名称',
- type tinyint unsigned not null comment '分类类型:1 菜品分类, 2 套餐分类',
- sort tinyint unsigned not null comment '排序',
- status tinyint unsigned default '0' not null comment '状态: 0 停用, 1 启用',
- create_time datetime not null comment '创建时间',
- update_time datetime not null comment '修改时间',
- constraint category_name_uindex
- unique (name)
- )
- comment '分类表';
-
- -- auto-generated definition
- create table dish
- (
- id tinyint unsigned auto_increment comment '主键id'
- primary key,
- name varchar(20) not null comment '菜品名称',
- category_id int unsigned not null comment '菜品分类id',
- price decimal(8, 2) unsigned not null comment '价格',
- image varchar(300) not null comment '图片',
- description varchar(200) null comment '描述',
- status tinyint unsigned default '0' not null comment '状态:0 停售, 1 启售',
- create_time datetime not null comment '创建时间',
- update_time datetime not null comment '修改时间',
- constraint dish_name_uindex
- unique (name)
- )
- comment '菜品表';
-
- -- auto-generated definition
- create table setmeal
- (
- id int unsigned auto_increment comment '主键id'
- primary key,
- name varchar(20) not null comment '套餐名称',
- category_id int unsigned not null comment '套餐分类',
- price decimal(8, 2) unsigned not null comment '价格',
- image varchar(300) not null comment '图片',
- description varchar(200) null comment '套餐描述',
- status tinyint unsigned default '0' not null comment '状态:0 停售, 1 启售',
- create_time datetime not null comment '创建时间',
- update_time datetime not null comment '修改时间',
- constraint setmeal_name_uindex
- unique (name)
- )
- comment '套餐表';
-
- -- auto-generated definition
- create table setmeal_dish
- (
- id int unsigned auto_increment comment '主键id'
- primary key,
- setmeal_id int unsigned not null comment '套餐id',
- dish_id int unsigned not null comment '菜品id',
- copies tinyint unsigned not null comment '菜品份数'
- )
- comment '套餐菜品关系表';
-