更新時間:2022-12-27 15:39:43 來源:動力節點 瀏覽1177次
無論是在數據分析師面試還是數據挖掘等的多數大數據崗位的面試、工作過程中,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面試題相關內容,可以關注動力節點Java官網。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習