一、目录
题目链接:
https://www.nowcoder.com/ta/sql
题目 | 知识点 |
---|---|
1 | 条件筛选和MAX()函数 |
2 | LIMIT 和 OFFSET 的用法 |
3 | INNER JOIN |
4 | INNER JOIN |
5 | LEFT JOIN |
6 | INNER JOIN/并列查询 ORDER BY |
7 | COUNT()函数、GROUP BY 、HAVING |
8 | DISTINCT(GROUP BY去重的用法) |
9 | INNER JOIN/ 并列查询 |
10 | LEFT JOIN、NOT IN、 IS NULL |
二、题目
1. 查找最晚入职员工的所有信息
- 题目描述
查找最晚入职员工的所有信息,为了减轻入门难度,目前所有的数据里员工入职的日期都不是同一天(sqlite里面的注释为--,mysql为comment)
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`));
-
思路
筛选出符合最晚入职要求的员工编号的全部信息 -
代码
select * from employees
where hire_date in (select max(hire_date) from employees)
2. 查找入职员工时间排名倒数第三的员工所有信息
- 题目描述
查找入职员工时间排名倒数第三的员工所有信息,为了减轻入门难度,目前所有的数据里员工入职的日期都不是同一天
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和OFFSET限定记录范围 -
代码
select * from employees
order by hire_date DESC LIMIT 1 OFFSET 2
- 参考资料
https://www.runoob.com/sqlite/sqlite-limit-clause.html
LIMIT 可以限制select语句返回的数据数量,结合OFFSET 返回直到指定的行为止。
3. 查找当前薪水详情以及部门编号dept_no
- 题目描述
查找各个部门当前(dept_manager.to_date='9999-01-01')领导当前(salaries.to_date='9999-01-01')薪水详情以及其对应部门编号dept_no
(注:请以salaries表为主表进行查询,输出结果以salaries.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`));
CREATE TABLE `dept_manager` (
`dept_no` char(4) NOT NULL, -- '部门编号'
`emp_no` int(11) NOT NULL, -- '员工编号'
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`