SQL查询以显示名称、职务、部门名称和薪资等级

SQL查询以显示名称、职务、部门名称和薪资等级,sql,Sql,问题是: “创建一个查询,该查询将显示所有员工的姓名、职务、部门名称、工资和等级(来自SALGRADE表)。” 到目前为止,我的代码是: 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 G

问题是:

  • “创建一个查询,该查询将显示所有
    员工的
    姓名、职务、部门名称、工资
    等级
    (来自
    SALGRADE
    表)。”
到目前为止,我的代码是:

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
试试这个

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
试试这个

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

根本原因是您使用了过时的“隐式联接”语法:

您仅将
emp
dept
表与
WHERE
子句中的条件连接在一起-您的
salgrade
表是交叉连接的-其中的一个条目将与结果中的所有条目相匹配

我建议始终使用新的ANSI标准联接语法:

  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
表加入查询的条件,您需要在这里提供一个适当的条件,然后您的结果应该就可以了

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

 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)
您仅将
emp
dept
表与
WHERE
子句中的条件连接在一起-您的
salgrade
表是交叉连接的-其中的一个条目将与结果中的所有条目相匹配

我建议始终使用新的ANSI标准联接语法:

  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
表加入查询的条件,您需要在这里提供一个适当的条件,然后您的结果应该就可以了

创建一个查询,该查询将显示所有员工的姓名、职务、部门名称、薪资和等级(从SALGRADE表中)
 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)
查询应该是---


创建一个查询,该查询将显示所有员工的姓名、职务、部门名称、薪资和等级(从SALGRADE表中) 查询应该是---


在使用join时尝试此选项

select e.ename,d.dname,s.grade 
from emp e 
join dept d on (e.deptno=d.deptno)
join salgrade s on (e.sal between s.losal and s.hisal);

在使用join时尝试此选项

select e.ename,d.dname,s.grade 
from emp e 
join dept d on (e.deptno=d.deptno)
join salgrade s on (e.sal between s.losal and s.hisal);

不需要使用大写字母!表中哪里缺少链接?不需要使用大写字母!表中缺失的链接在哪里?条件是否包括所有员工@马克_s@rohit当前位置我不明白你在问什么-对不起。在
emp
salgrade
(最有可能)之间需要某种联系-不知何故,你必须知道每个员工的薪资等级-对吗??这是需要放在那里的缺失条件:
内部连接dbo.salgrade s ON e.salgradeid=s.grade
或任何这些列的名称……该条件是否包括所有员工@马克_s@rohit当前位置我不明白你在问什么-对不起。在
emp
salgrade
(最有可能)之间需要某种联系-不知何故,你必须知道每个员工的薪资等级-对吗??这就是需要放在那里的缺少的条件:
内部连接dbo.salgrade s ON e.salgradeid=s.grade
或任何那些列的名称……仍然给我70行而不是14@bryan仍然给我70行而不是14@bryan仍然给我70行@Sam casil仍然给我70行@Sam Casilonly正确的答案在上面伟大的工人坚持下去,上面给出的答案是唯一正确的。伟大的工人坚持下去