1. 程式人生 > 其它 >資料庫SQL實戰-獲取所有部門中當前員工薪水最高的相關資訊(mysql)

資料庫SQL實戰-獲取所有部門中當前員工薪水最高的相關資訊(mysql)

技術標籤:資料庫SQL實戰mysqlsql資料庫

1. 獲取所有員工當前的manager

1.1 題目描述

獲取所有員工當前的(dept_manager.to_date=‘9999-01-01’)manager,如果員工是manager的話不顯示(也就是如果當前的manager是自己的話結果不顯示)。輸出結果第一列給出當前員工的emp_no,第二列給出其manager對應的emp_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 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));
如插入:
INSERT INTO dept_emp VALUES(10001,‘d001’,‘1986-06-26’,‘9999-01-01’);
INSERT INTO dept_emp VALUES(10002,‘d001’,‘1996-08-03’,‘9999-01-01’);
INSERT INTO dept_emp VALUES(10003,‘d004’,‘1995-12-03’,‘9999-01-01’);
INSERT INTO dept_emp VALUES(10004,‘d004’,‘1986-12-01’,‘9999-01-01’);
INSERT INTO dept_emp VALUES(10005,‘d003’,‘1989-09-12’,‘9999-01-01’);
INSERT INTO dept_emp VALUES(10006,‘d002’,‘1990-08-05’,‘9999-01-01’);
INSERT INTO dept_emp VALUES(10007,‘d005’,‘1989-02-10’,‘9999-01-01’);
INSERT INTO dept_emp VALUES(10008,‘d005’,‘1998-03-11’,‘2000-07-31’);
INSERT INTO dept_emp VALUES(10009,‘d006’,‘1985-02-18’,‘9999-01-01’);
INSERT INTO dept_emp VALUES(10010,‘d005’,‘1996-11-24’,‘2000-06-26’);
INSERT INTO dept_emp VALUES(10010,‘d006’,‘2000-06-26’,‘9999-01-01’);

INSERT INTO dept_manager VALUES(‘d001’,10002,‘1996-08-03’,‘9999-01-01’);
INSERT INTO dept_manager VALUES(‘d002’,10006,‘1990-08-05’,‘9999-01-01’);
INSERT INTO dept_manager VALUES(‘d003’,10005,‘1989-09-12’,‘9999-01-01’);
INSERT INTO dept_manager VALUES(‘d004’,10004,‘1986-12-01’,‘9999-01-01’);
INSERT INTO dept_manager VALUES(‘d005’,10010,‘1996-11-24’,‘2000-06-26’);
INSERT INTO dept_manager VALUES(‘d006’,10010,‘2000-06-26’,‘9999-01-01’);

輸入描述:

輸出描述:

在這裡插入圖片描述

1.2 語句實現

select e.emp_no, m.emp_no as manager_no
from dept_emp e left join dept_manager m
on e.dept_no = m.dept_no
where e.emp_no != m.emp_no and m.to_date = '9999-01-01'

2. 獲取所有部門中當前員工薪水最高的相關資訊

2.1 題目描述

獲取所有部門中當前(dept_emp.to_date = ‘9999-01-01’)員工當前(salaries.to_date=‘9999-01-01’)薪水最高的相關資訊,給出dept_no, emp_no以及其對應的salary,按照部門編號升序排列。
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 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));
如插入:
INSERT INTO dept_emp VALUES(10001,‘d001’,‘1986-06-26’,‘9999-01-01’);
INSERT INTO dept_emp VALUES(10002,‘d001’,‘1996-08-03’,‘9999-01-01’);
INSERT INTO dept_emp VALUES(10003,‘d001’,‘1996-08-03’,‘1997-08-03’);

INSERT INTO salaries VALUES(10001,90000,‘1986-06-26’,‘1987-06-26’);
INSERT INTO salaries VALUES(10001,88958,‘2002-06-22’,‘9999-01-01’);
INSERT INTO salaries VALUES(10002,72527,‘1996-08-03’,‘1997-08-03’);
INSERT INTO salaries VALUES(10002,72527,‘2000-08-02’,‘2001-08-02’);
INSERT INTO salaries VALUES(10002,72527,‘2001-08-02’,‘9999-01-01’);
INSERT INTO salaries VALUES(10003,90000,‘1996-08-03’,‘1997-08-03’);
則輸出
在這裡插入圖片描述

2.2 語句實現

select e.dept_no, e.emp_no, s.salary
from dept_emp e inner join salaries s
on e.emp_no = s.emp_no and e.to_date = '9999-01-01' and s.to_date = '9999-01-01'
where s.salary in (select max(s1.salary)
    from dept_emp e1 inner join salaries s1
    on e1.emp_no = s1.emp_no and e1.to_date = '9999-01-01'
    and s1.to_date = '9999-01-01' and e1.dept_no = e.dept_no
)
order by e.dept_no