牛客网sql题目(一)

1.

  • 题目描述
    查找各个部门当前(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));

  • 题目解答

select salaries.*,dept_manager.dept_no
from salaries join dept_manager on dept_manager.emp_no=salaries.emp_no
where dept_manager.to_date ='9999-01-01' and salaries.to_date='9999-01-01'

2.

  • 题目描述
    查找所有已经分配部门的员工的last_name和first_name
    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));
  • 题目解答
select employees.last_name,employees.first_name,dept_emp.dept_no
from employees join dept_emp on employees.emp_no=dept_emp.emp_no

3.

  • 题目描述
    查找所有员工的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));

  • 题目解答:

select employees.last_name,employees.first_name,dept_emp.dept_no
from employees left join dept_emp on employees.emp_no=dept_emp.emp_no

4.

  • 题目描述
    查找所有员工入职时候的薪水情况,给出emp_no以及salary, 并按照emp_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));
    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));
  • 题目解答:
select employees.emp_no,salaries.salary
from employees join salaries on employees.emp_no=salaries.emp_no and employees.hire_date=salaries.from_date
order by employees.emp_no desc

5.

  • 题目描述
    查找薪水涨幅超过15次的员工号emp_no以及其对应的涨幅次数t
    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));

  • 题目解答:

select emp_no,count(distinct salary) as t
from salaries
group by emp_no
having t>15

6.

  • 题目描述
    找出所有员工当前(to_date=’9999-01-01’)具体的薪水salary情况,对于相同的薪水只显示一次,并按照逆序显示
    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));

  • 题目解答:

select distinct salary
from salaries
where to_date='9999-01-01'
order by salary desc

7.

  • 题目描述
    获取所有部门当前manager的当前薪水情况,给出dept_no, emp_no以及salary,当前表示to_date=’9999-01-01’
    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));

  • 题目解答:

SELECT dept_no,dept_manager.emp_no,salary
FROM salaries,dept_manager
WHERE salaries.emp_no=dept_manager.emp_no
and salaries.to_date='9999-01-01'
and dept_manager.to_date='9999-01-01'

8.

  • 题目描述
    获取所有非manager的员工emp_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 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));

  • 题目解答:

select emp_no
from employees
where employees.emp_no not in (select emp_no
                              from dept_manager)

9.

  • 题目描述
    获取所有员工当前的manager,如果当前的manager是自己的话结果不显示,当前表示to_date=’9999-01-01’。
    结果第一列给出当前员工的emp_no,第二列给出其manager对应的manager_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));

  • 题目解答:

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

10.

  • 题目描述
    获取所有部门中当前员工薪水最高的相关信息,给出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));
  • 题目解答:
select dept_emp.dept_no,dept_emp.emp_no,max(salaries.salary)
from dept_emp join salaries on dept_emp.emp_no=salaries.emp_no
where dept_emp.to_date='9999-01-01'
and salaries.to_date='9999-01-01'
group by dept_emp.dept_no

猜你喜欢

转载自blog.csdn.net/qq_33186949/article/details/79881845