首页 > 试题广场 >

查找当前薪水详情以及部门编号dept_no

[编程题]查找当前薪水详情以及部门编号dept_no
  • 热度指数:1002987 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
有一个全部员工的薪水表salaries简况如下:
emp_no
salary
from_date
to_date
10001
88958 2002-06-22
9999-01-01
10002
72527 2001-08-02
9999-01-01
10003
43311 2001-12-01 9999-01-01

有一个各个部门的领导表dept_manager简况如下:
dept_no
emp_no
to_date
d001 10001 9999-01-01
d002 10003 9999-01-01

请你查找各个部门当前领导的薪水详情以及其对应部门编号dept_no,输出结果以salaries.emp_no升序排序,并且请注意输出结果里面dept_no列是最后一列,以上例子输出如下:
emp_no salary from_date to_date dept_no
10001 88958 2002-06-22 9999-01-01 d001
10003 43311 2001-12-01 9999-01-01
d002
示例1

输入

drop table if exists  `salaries` ; 
drop table if exists  `dept_manager` ; 
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`));
INSERT INTO dept_manager VALUES('d001',10002,'9999-01-01');
INSERT INTO dept_manager VALUES('d002',10006,'9999-01-01');
INSERT INTO dept_manager VALUES('d003',10005,'9999-01-01');
INSERT INTO dept_manager VALUES('d004',10004,'9999-01-01');
INSERT INTO salaries VALUES(10001,88958,'2002-06-22','9999-01-01');
INSERT INTO salaries VALUES(10002,72527,'2001-08-02','9999-01-01');
INSERT INTO salaries VALUES(10003,43311,'2001-12-01','9999-01-01');
INSERT INTO salaries VALUES(10004,74057,'2001-11-27','9999-01-01');
INSERT INTO salaries VALUES(10005,94692,'2001-09-09','9999-01-01');
INSERT INTO salaries VALUES(10006,43311,'2001-08-02','9999-01-01');
INSERT INTO salaries VALUES(10007,88070,'2002-02-07','9999-01-01');

输出

10002|72527|2001-08-02|9999-01-01|d001
10004|74057|2001-11-27|9999-01-01|d004
10005|94692|2001-09-09|9999-01-01|d003
10006|43311|2001-08-02|9999-01-01|d002
SELECT
a.*,
b.dept_no
FROM
salaries a,
dept_manager b
WHERE
a.emp_no = b.emp_no
ORDER BY
a.emp_no

发表于 2025-03-06 16:33:28 回复(0)
SELECT
    s.emp_no,
    s.salary,
    from_date,
    s.to_date,
    dept_no
FROM
    salaries s
JOIN
    dept_manager dm
    USING(emp_no)

发表于 2025-01-04 20:23:50 回复(0)
select s.emp_no,s.salary,s.from_date,s.to_date,dept_no
from salaries s
left join dept_manager d
using(emp_no)
where dept_no is not null
发表于 2024-12-05 15:12:55 回复(0)
没有明白题目啥意思我靠 
我这样不行吗
select emp_no,
        salary,
        from_date,
        to_data,
        dept_no
from salaries
left join dept_manager
on salaries.emp_no=dept_manager.emp_no
where salaries.emp_no in (select dept_manager.emp_no from dept_manager)
order by salaries.emp_no;
发表于 2024-11-03 20:30:10 回复(0)
select
    s.emp_no emp_no,
    s.salary salary,
    s.from_date from_date,
    s.to_date to_date,
    d.dept_no dept_no
from
    salaries s
    inner join dept_manager d on s.emp_no = d.emp_no



发表于 2024-10-20 17:00:47 回复(0)

select s.*,d.dept_no from salaries s join dept_manager d on s.emp_no =d.emp_no order by emp_no 

发表于 2024-09-18 17:12:18 回复(0)
select s.*, d.dept_no
from salaries s
join
dept_manager d
on
s.emp_no = d.emp_no

通过观察得知需要表的连接,然后两张表的连接条件通过观察得知,是员工编号;至于时间,通俗来说不会以此来当作主键;因此只需要将两个表进行join连接,连接条件是两张表的员工编号相同。至于新表排序问题,sql默认以列的顺序进行升序排序,因此可以不写。

发表于 2024-09-03 16:11:48 回复(0)
select dm.emp_no,s.salary,s.from_date,s.to_date,dm.dept_no
from 
    dept_manager dm left join salaries s on dm.emp_no=s.emp_no左连接即可
发表于 2024-08-10 23:37:45 回复(0)
select 
    t2.emp_no
    ,salary
    ,t2.from_date
    ,t2.to_date
    ,dept_no
from dept_manager t1
     join salaries t2 on t1.emp_no=t2.emp_no
order by t2.emp_no 

发表于 2024-07-17 16:58:15 回复(0)
select s.*,dept_no from salaries s join  dept_manager d on s.emp_no=d.emp_no
order by s.emp_no
把两个表连接起来就好了,开始没理解题意
发表于 2024-06-23 22:53:08 回复(0)
select S.emp_no,S.salary,S.from_date,S.to_date,D.dept_no 
from salaries AS S 
left join 
dept_manager AS
on S.emp_no=D.emp_no 
where D.emp_no is NOT NULL order by S.emp_no
发表于 2024-06-04 17:32:56 回复(0)
select a.*,b.dept_no from salaries a ,dept_manager b  where a.emp_no =b.emp_no
发表于 2024-06-01 21:20:59 回复(0)
with t as (
    select
        t1.emp_no,
        t1.salary,
        t1.from_date,
        t1.to_date,
        t2.dept_no
    from salaries t1 left join dept_manager t2
        on t1.emp_no = t2.emp_no
    )
    
select *
from t
where dept_no is not null
order by emp_no

编辑于 2024-04-24 09:32:27 回复(0)
select s.* ,d.dept_no
from salaries as s
join dept_manager as d
on s.emp_no=d.emp_no
where s.to_date='999-01-01'
and d.to_date='999-01-01;
发表于 2024-03-29 15:04:57 回复(0)
select s.*,d.dept_no
from salaries as s join dept_manager as d
on s.emp_no = d.emp_no
where s.emp_no=d.emp_no
order by s.emp_no asc

where那一行省略也能通过。
发表于 2024-03-19 20:07:43 回复(0)
select a.*,b.dept_no from salaries a
join dept_manager b
on a.emp_no=b.emp_no
order by a.emp_no;

编辑于 2024-02-05 21:33:36 回复(0)
select s.*, d.dept_no
from salaries s 
inner join dept_manager d
on s.emp_no = d.emp_no
发表于 2024-01-22 23:58:11 回复(0)