SQL SELECT(初学者)

时间:2015-12-08 08:22:03

标签: sql oracle plsql

我有两张桌子:

Departament

id_dep, name_dep

员工

id_dep, salary

我想获得所有工资都低于7000的部门的名称。我必须创建一个SELECT语句。我是SQL的初学者,如果我会浪费你的时间,我很抱歉,但我需要帮助。

我有一个解决方案,但我不知道是否好:

SELECT name_dep
FROM departments
WHERE employee.salary < 7000
MINUS
SELECT name_dep
FROM departments
WHERE employee.salary >= 7000

4 个答案:

答案 0 :(得分:6)

您可以使用NOT EXISTS执行此操作:

SELECT id_dep , name_dep
FROM department AS d
WHERE NOT EXISTS (SELECT 1 
                  FROM employee AS e
                  WHERE e.id_dep = d.id_dep AND e.salary >=  7000)

答案 1 :(得分:0)

JOINs添加到原始MINUS次尝试中:

SELECT d.name_dep
FROM departments d
  JOIN employee e ON d.id_dep = e.id_dep
WHERE e.salary < 7000
MINUS
SELECT d.name_dep
FROM departments d
  JOIN employee e ON d.id_dep = e.id_dep
WHERE e.salary >= 7000

答案 2 :(得分:0)

您可以使用NOT EXISTSEXISTS,针对您的问题尝试此代码块。

NOT EXISTS

select d.name_dep
  from department as d
 where not exists (select 1
          from employee as e
         where e.id_dep = d.id_dep
           and e.salary >= 7000)
 group by d.dep_name

<强> EXISTS

select d.name_dep
  from department as d
 where exists (select 1
          from employee as e
         where e.id_dep = d.id_dep
           and e.salary < 7000)
 group by d.dep_name

答案 3 :(得分:0)

您可以按部门分组并检查组中的最高工资:

select d.id_dep, d.name_dep
from department d
join employee e on d.id_dep = e.id_dep
group by d.id_dep, d.name_dep
having max(e.salary) < 700