更新时间:2022-12-27 15:39:43 来源:极悦 浏览861次
无论是在数据分析师面试还是数据挖掘等的多数大数据岗位的面试、工作过程中,SQL都是比较重要的一部分,今天小编针对一些高频出现的面试题,整理出了这些,供大家参考:
SQL1:查找最晚入职员工的信息
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));
分析:题目难度:简单
主要考察where条件查询,需要注意的case是最晚入职的员工对应的最大的hire_date,同时也考虑使用order+limit实现最晚员工的找寻。
知识点;ORDER BY field1 [ASC [DESC][默认 ASC]], [field2…] [ASC [DESC][默认 ASC]] (desc降序排列,asc是升序排列) SELECT * FROM table LIMIT a,b;从a+1行开始a+b行结束。
SQL实现:
思路1
SELECT * FROM employees order by hire_date desc limit 0,1
思路2
SELECT *
FROM employees
WHERE hire_date =
(
SELECT MAX(hire_date)
FROM employees
)
SQL2:查找入职员工时间排名倒数第三的员工所有信息
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));
思路:找到入职时间倒数第三可以使用排序order by倒数第三是倒序第3个,可以用limit或者offset
SQL实现
# 思路1
select *
from employees
order by hire_date desc
limit 2,1
#知识点limit的用法
# 思路2
SELECT * FROM employees
ORDER BY hire_date DESC
LIMIT 1 offset 2;
SQL3:查找各个部门当前领导当前薪水详情
例题:查找各个部门当前(dept_manager.to_date=‘9999-01-01’)领导当前(salaries.to_date=‘9999-01-01’)薪水详情以及其对应部门编号dept_no
(注:输出结果以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,dept_no));
多表连接加排序问题,笔者在这里遗漏了时间条件发生报错 思路:where条件实先两表连接限制条件+order by实现排序
SQL实现
select salaries.emp_no, salaries.salary, salaries.from_date, salaries.to_date, dept_manager.dept_no
from dept_manager, salaries
where dept_manager.emp_no=salaries.emp_no
and dept_manager.to_date='9999-01-01'
and salaries.to_date='9999-01-01'
order by salaries.emp_no;
SQL4:查找所有已经分配部门的员工的last_name和first_name
题目:查找所有已经分配部门的员工的last_name和first_name以及dept_no(请注意输出描述里各个列的前后顺序)
CREATE TABLE dept_emp (
emp_no int(11) NOT NULL,
dept_no char(4) NOT NULL,
from_date date NOT NULL,
to_date date NOT NULL,
PRIMARY KEY (emp_no,dept_no));
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));
两表查询取交集问题,已分配部分的员工的逻辑是两表关于emp_no
select employees.last_name,employees.first_name,dept_emp.dept_no
from employees inner join dept_emp
where employees.emp_no=dept_emp.emp_no;
多表查询问题用下图可以帮助比较好的理解记忆:
以上就是“专业搬运工:sql数据常见面试题”,你能回答上来吗?如果想要了解更多的相关内容,可以关注极悦Java官网。
0基础 0学费 15天面授
Java就业班有基础 直达就业
业余时间 高薪转行
Java在职加薪班工作1~3年,加薪神器
工作3~5年,晋升架构
提交申请后,顾问老师会电话与您沟通安排学习