专注Java教育14年 全国咨询/投诉热线:444-1124-454
星辉LOGO图
始于2009,口口相传的Java黄埔军校
首页 学习攻略 职业指南 专业搬运工:sql数据常见面试题

专业搬运工:sql数据常见面试题

更新时间:2022-12-27 15:39:43 来源:星辉 浏览745次

无论是在数据分析师面试还是数据挖掘等的多数大数据岗位的面试、工作过程中,SQL都是比较重要的一部分,今天小编针对一些高频出现的面试题,整理出了这些,供大家参考:

sql常见面试题

SQL1:查找最晚入职员工的信息

  • 试题内容:查找最晚入职员工的所有信息,为了减轻入门难度,目前所有的数据里员工入职的日期都不是同一天(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));

分析:题目难度:简单

主要考察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常见面试题

以上就是“专业搬运工:sql数据常见面试题”,你能回答上来吗?如果想要了解更多的Java面试题相关内容,可以关注星辉Java官网。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>