创建表employees
CREATE TABLE employees(
emp_no INT(11) NOT NULL,
birth_date DATE NOT NULL,
first_name VARCHAR(14) NOT NULL,
last_name VARCHAR(16) NOT NULL,
gender CHAR(1) NOT NULL,
hire_date DATE NOT NULL,
PRIMARY KEY (emp_no)
)
向表内插入数据
INSERT INTO employees VALUES(1, '1998-11-17', 'biao', 'yang', '男', '2021-09-01'),
(2, '1996-10-17', 'jie', 'wang', '男', '2020-09-01'),
(3, '1997-06-12', 'he', 'liu', '男', '2021-09-01'),
(4, '1998-7-21', 'ruiqi', 'ouyang', '男', '2019-09-01'),
(5, '1999-8-21', 'hailin', 'zhu', '女', '2021-09-01'),
(6, '1998-6-11', 'jiameng', 'li', '女', '2020-09-01'),
(7, '1998-3-16', 'tengfei', 'li', '男', '2022-09-01');
更新表内数据
# 更新表内数据
UPDATE employees SET hire_date='2018-09-01' WHERE emp_no=6;
UPDATE employees SET hire_date='2023-09-01' WHERE emp_no=7;
查找最晚入职员工的所有信息
采用子查询的方式,先找出入职时间最晚的,这样也可以确保有多条最晚入职时间被查询出来。有些小伙伴可能会使用 order by 的方式,不过这样的方式仅限于最晚入职数据只有一条的时候才正确。
# 查找最晚入职员工的所有信息(采用子查询的方法)
SELECT * FROM employees
WHERE hire_date IN (SELECT MAX(hire_date) FROM employees);
查找入职员工时间排名倒数第三的员工所有信息
目标是查找员工所有信息,条件是时间排名倒数第三,这里的考点也就在倒数第三怎么去写罢了,可以 再此去复习再 Limit 相关的内容。
- Limit m,n:表示的是从 m+1 开始,取 n 条数据
- Limit n: 标识从第 0 条开始,取 n 条数据 是 limit(0,n) 缩写
你可能会这样写:
select * from employees
order by hire_date desc
limit 2,1
这种做法不能查询员工入职时间排名倒数第三的所有员工信息。同样可以采用子查询的方式,并结合使用distinct函数。
select * from employees
where hire_date = (倒数第三的hire_date);
select * from employees
where hire_date = (select distinct hire_date from employees
order by hire_date desc
limit 2,1);
order by 结合 desc limit 进行使用是比较常见的使用方式。