题目一描述:
查找最晚入职员工的所有信息
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`));
解法:
在表里搜索员工的所有信息
并按入职日期降序排序
限制查询的记录数为1
select * from employees order by hire_date desc limit 1
相关知识:
* ORDER BY排序 * DESC降序排序 * ASC升序排序 * LIMIT n限制查询的记录数为n
题目二描述:
查找入职员工时间排名倒数第三的员工所有信息
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`));
解法:
在表里搜索员工的所有信息
并按入职日期降序排序
限制查询的记录 用limit偏移,只取一条数据
select * from employees order by hire_date desc limit 2,1
相关知识:
* ORDER BY排序 * DESC降序排序 * LIMIT m,n限制查询的记录数为n条,从m+1开始查询 select * from tablename limit 2,4 即取出第3条至第6条,4条记录
题目三描述:
查找各个部门当前(to_date='9999-01-01')领导当前薪水详情以及其对应部门编号dept_no
CREATE TABLE `dept_manager` ( `dept_no` char(4) NOT NULL, `emp_no` int(11) NOT NULL, `from_date` date NOT NULL, `to_date` date NOT NULL, PRIMARY KEY (`emp_no`,`dept_no`)); CREATE TABLE `salaries` ( `emp_no` int(11) NOT NULL, `salary` int(11) NOT NULL, `from_date` date NOT NULL, `to_date` date NOT NULL, PRIMARY KEY (`emp_no`,`from_date`));
输出描述:

解法:
- 该表是两表关联表,但是元素不能重复出现,需要去重
- 该表的字段顺序为,salaries表的所有字段,和部门编号
- 该表的员工编号emp_no是按顺序递增的,所以在此进行关联时,需要将salaries表置于前面
select s.*,d.dept_no from salaries as s,dept_manager as d
where s.to_date="9999-01-01"
and d.to_date="9999-01-01"
and d.emp_no = s.emp_no
浙公网安备 33010602011771号