SQL查询以查找和

SQL查询以查找和,sql,oracle,sum,schema,Sql,Oracle,Sum,Schema,我也是SQL新手,我一直在努力编写这个查询。我想找出某个部门员工的工资总额,比如说“M”,以及某个雇佣日期,比如说“2002”,有什么想法吗?我想我必须以某种方式加入表,但是遇到了麻烦,我已经建立了这样一个模式 作业表和列 JOBS ------------ job_id salary hire_date EMPLOYEES ------------ employee_id name job_id department_id DEPARTMENTS ------------ departme

我也是SQL新手,我一直在努力编写这个查询。我想找出某个部门员工的工资总额,比如说“M”,以及某个雇佣日期,比如说“2002”,有什么想法吗?我想我必须以某种方式加入表,但是遇到了麻烦,我已经建立了这样一个模式

作业表和列

JOBS
------------
job_id
salary
hire_date
EMPLOYEES
------------
employee_id
name
job_id
department_id
DEPARTMENTS
------------
department_id
department_name
employees表和列

JOBS
------------
job_id
salary
hire_date
EMPLOYEES
------------
employee_id
name
job_id
department_id
DEPARTMENTS
------------
department_id
department_name
部门表和列

JOBS
------------
job_id
salary
hire_date
EMPLOYEES
------------
employee_id
name
job_id
department_id
DEPARTMENTS
------------
department_id
department_name

这与Oracle中的HR模式非常相似,因此我认为模式应该可以,现在需要查询帮助。

是的,您只需要在所有三个表之间进行简单的内部联接

SELECT SUM(salary)
FROM JOBS j
JOIN EMPLOYEES e ON j.job_id = e.job_id
JOIN DEPARTMENTS d ON e.department_id = d.department_id
WHERE d.department_name = 'M'
AND e.hire_date = 2002

您需要这样的声明:

    SELECT e.name, 
           d.department_name, 
           SUM(j.salary)
      FROM employees e, 
           departments d, 
           jobs j
     WHERE d.department_name = 'M' 
       AND TO_CHAR(j.hire_date, 'YYYY') = '2002'
       AND d.department_id = e.department_id 
       AND e.job_id = j.job_id
  GROUP BY e.name, 
           d.department_name;

FWIW,您不应该使用旧的ANSI-89(使用
)。自从ANSI-92标准(20多年前!)和一些供应商开始放弃其支持(MS SQL Server 2008;我不知道Oracle中是否有此“功能”的弃用警告)以来,它被认为是不推荐使用的

所以,作为一个新手,你不应该从一开始就学习

使用“现代”语法,您的查询应该编写为:

SELECT e.name, 
       d.department_name, 
       SUM(j.salary)
  FROM employees e
  JOIN departments d USING(department_id)
  JOIN jobs j USING(job_id)
 
 WHERE d.department_name = 'M' 
   AND TO_CHAR(j.hire_date, 'YYYY') = '2002'

 GROUP BY e.name, d.department_name;

使用这种语法,
JOIN
关系(
USING
ON
)和filter子句
WHERE
之间有着明显的区别。当您遇到“高级”连接(如
OUTER-JOIN

)时,它将使事情变得简单。这比我想象的要简单得多。我在想我可能需要加入表格。谢谢你确实需要加入这些表,但这是通过
和d.department\u id=e.department\u id和e.job\u id=j完成的。job\u id
看起来你已经离开了
groupby
进行
SUM
是的,我自己刚刚注意到了这一点。更正了,谢谢你指出这一点。