SQL练习-查找当前薪水详情以及部门编号

一颗蔬菜 2019-10-04 PM 35℃ 0条
题目描述

查找各个部门当前(to_date='9999-01-01')领导当前薪水详情以及其对应部门编号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`));
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`));
输入描述
输出描述
emp_nosalaryfrom_dateto_datedept_no
10002725272001-08-029999-01-01d001
10004740572001-11-279999-01-01d004
10005946922001-09-099999-01-01d003
10006433112001-08-029999-01-01d002
10010944092001-11-239999-01-01d006
题解

写法1

select  b.emp_no
        , b.salary
        , b.from_date
        , b.to_date
        , a.dept_no
  from (
        select emp_no
               , salary
               , from_date
               , to_date
          from salaries
         where to_date='9999-01-01'
       ) b
  join
       (
        select emp_no
               , dept_no
          from dept_manager
         where to_date='9999-01-01'
        ) a
    on (a.emp_no = b.emp_no)
;

写法2

select s.emp_no
       , s.salary
       , s.from_date
       , s.to_date
       , d.dept_no
   from salaries s
   join dept_manager d
     on d.emp_no = s.emp_no
  where d.to_date = '9999-01-01'
    and s.to_date = '9999-01-01'
;

两种写法都是正确的,但感觉第二种写法更快,因为只需要查一次,而第一种写法需要查两次。这题中,调换两个表的位置会不通过,但感觉没有本质上的差别。

标签: none

非特殊说明,本博所有文章均为博主原创。

上一篇 这半年
下一篇 没有了