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正确的答案在上面伟大的工人坚持下去,上面给出的答案是唯一正确的。伟大的工人坚持下去