Sql Oracle是否有其他方法获得答案,如使用联接?
显示销售部门或研究部门员工的员工ID、姓氏、职务ID、经理ID,薪资等级为C 答案是:Sql Oracle是否有其他方法获得答案,如使用联接?,sql,oracle,subquery,Sql,Oracle,Subquery,显示销售部门或研究部门员工的员工ID、姓氏、职务ID、经理ID,薪资等级为C 答案是: select empno, ename, job, mgr from emp where deptno IN (select deptno from dept where dname IN ('SALES', 'RESEARCH')) and sal between(select losal from salgrade wh
select empno, ename, job, mgr
from emp
where deptno IN (select deptno
from dept
where dname IN ('SALES', 'RESEARCH'))
and sal between(select losal from salgrade
where grade=3)
and (select hisal
from salgrade where
grade=3);
- 表EMP有EMPNO、ENAME、JOB、MGR、HIREDATE、SAL、COMM、DEPTNO列
- 表SALGRADE有Grade、LoSal、HiSal列
- 表DEPT有DEPTNO、DNAME、LOC列
select e.empno,e.ename,e.job,e.mgr
from emp e
join dept d on e.deptno = d.deptno
join salgrade s on e.sal between (
select losal
from salgrade
where grade =3)
and (
select hisal
from salgrade
where grade=3)
但是找不到一种方法来包含DNAME,我认为薪水的问题不在losal和hisal之间
select emp.empno, emp.ename, emp.job, emp.mgr
from emp
inner join dept on emp.deptno = dept.deptno and dept.dname IN ('SALES', 'RESEARCH')
inner join salgrade on emp.sal >= salgrade.losal and
emp.sal <= salgrade.hisal and salgrade.grade = 3
选择emp.empno、emp.ename、emp.job、emp.mgr
来自emp
emp.deptno上的内部联接dept=中的dept.deptno和dept.dname('SALES','RESEARCH'))
emp.sal>上的内部连接salgrade>=salgrade.losal和
皇帝萨尔
“我不认为要求工资的问题在洛萨尔和希萨尔之间。”
该问题说明薪资需要与特定的等级相匹配
“C级薪金
当然,经典SCOTT/TIGER模式中的等级有一个数值级:
SQL> select * from salgrade;
GRADE LOSAL HISAL
---------- ---------- ----------
1 700 1200
2 1201 1400
3 1401 2000
4 2001 3000
5 3001 9999
SQL>
这个问题的草率符合答案的奇怪性质。无论如何,正如我们所看到的,等级是分配给工资级别的。因此,要找到特定等级的员工,我们需要将他们的工资与该等级的上下限相匹配,losal
和hisal
这里有一个解决方案:
SQL> select empno, ename, job, mgr
2 from emp
3 join dept
4 on emp.deptno = dept.deptno
5 join ( select * from salgrade
6 where grade = 3 ) sg3
7 on emp.sal between sg3.losal and sg3.hisal
8 where dept.dname IN ('SALES', 'RESEARCH')
9 /
EMPNO ENAME JOB MGR
---------- ---------- --------- ----------
7499 ALLEN SALESMAN 7698
7844 TURNER SALESMAN 7698
SQL>
我更喜欢将连接条件与筛选器分开。有几种方法可以做到这一点,查询同时演示了这两种方法:
在内联视图中筛选表
在主查询的WHERE子句中筛选表
语法允许我们在on
子句中包含非连接条件,但这可能会产生副作用。连接和过滤器之间最好保持清晰,这是ANSI 92语法的主要点。那么这个“答案”从何而来?哇……让它更容易。谢谢。有多少个“和”“如果你不介意我问的话,可以吗