2011-10-12 224 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

只有正確從上面給出的答案。偉大的工作人保持它 –

相關問題