2011-10-12 283 views
0

的问题是SQL查询来显示姓名,职务,部门名称和工资等级

所创造的一切EMPLOYEE S.

将显示在NAME,JOB,DEPARTMENT NAME,SALARYGRADE(从SALGRADE表)查询MY CODE SO FAR GIVES OUTPUT

select e.ename, e.job, d.dname, e.sal, s.grade 
from emp e, dept d, salgrade s 
where e.deptno = d.deptno 

这将返回70行,但结果应该只产生14行。

EMPLOYEE EMP JOB DEPT NAME  EMP SALARY SALARY GRADE        
---------- --------- -------------- ---------- ------------        
JAMES  CLERK  SALES     950   1        
SMITH  CLERK  RESEARCH    800   1        
ADAMS  CLERK  RESEARCH    1100   1        
MARTIN  SALESMAN SALES    1250   2        
WARD  SALESMAN SALES    1250   2        
MILLER  CLERK  ACCOUNTING   1300   2        
ALLEN  SALESMAN SALES    1600   3        
TURNER  SALESMAN SALES    1500   3        
BLAKE  MANAGER RESEARCH    2850   4        
CLARK  MANAGER ACCOUNTING   2450   4        
JONES  MANAGER RESEARCH    2975   4        
FORD  ANALYST RESEARCH    3000   4        
SCOTT  ANALYST RESEARCH    3000   4        
KING  PRESIDENT ACCOUNTING   5000   5   
  • emp表有empno, ename, job, deptno, comm, sal
  • salgrade表已经grade
  • DEPT表已经deptno, loc

请帮助只有14行应选择

+2

无需使用大写字母! – Benoit

+0

哪里缺少表salgrade中的链接? – JellyBelly

回答

1

试试这个。

SELECT e.ename,e.job,d.dname,e.sal,s.grade 
    FROM emp e , dept d ,salgrade s 
WHERE e.deptno=d.deptno 
GROUP BY e.ename 
+0

这不是正确的答案...... D –

+0

仍然给我70行而不是14 @Bryan – rohit

3

的根本原因是你的旧的使用,不推荐使用“隐式连接”语法:

select e.ename, e.job, d.dname, e.sal, s.grade 
    from emp e, dept d, salgrade s 
    where e.deptno = d.deptno 

你只能用WHERE子句中的条件加入empdept表 - 你salgrade表是交叉连接 - 一个条目将与结果中的所有条目进行匹配。

我会推荐给始终使用新的ANSI标准JOIN语法:

SELECT 
     e.ename, e.job, d.dname, e.sal, s.grade 
    FROM 
     dbo.emp e 
    INNER JOIN 
     dbo.dept d ON e.deptno = d.deptno 
    INNER JOIN 
     dbo.salgrade s ON ??????? 

向右走,你看到有关于如何加入salgrade表到您的查询中定义的任何条件 - 你需要在这里提供一个适当的条件,那么你的结果应该就好了!

+0

条件是否会包括所有员工? @marc_s – rohit

+0

@rohit:我不明白你在问什么 - 对不起。 'emp'和'salgrade'之间需要有某种联系(很可能) - 不知何故,你必须知道每个员工的工资等级是多少 - 对吗?这是需要放在那里的缺失条件:'INNER JOIN dbo.salgrade s ON e.salgradeid = s.grade'或任何这些列被称为..... –

1
select e.ename, e.job, d.dname, e.sal, s.grade 
    from emp e, dept d, salgrade s 
    where e.deptno = d.deptno 
    and s.grade in (1,2,3,4,5) 
+0

仍然给我70行@ Sam Casil – rohit

2

创建一个查询,将显示姓名,工作,部门名称,工资等级(从SALGRADE TABLE)为所有员工 查询应该是---

SELECT e.ename,e.job,dname,e.sal,g.grade 
FROM emp e,dept,salgrade g 
WHERE (e.sal BETWEEN g.losal AND g.hisal) AND e.deptno=dept.deptno; 
+0

只有正确从上面给出的答案。伟大的工作人保持它 –

相关问题