这两个Oracle查询有何不同?

时间:2018-05-06 12:57:23

标签: sql oracle

oracle如何使用不同的结果执行这两个查询

1

SELECT e.ename,
       m.ename
FROM   emp e,
       emp m
WHERE  e.empno = m.mgr;

2

SELECT e.ename,
       m.ename
FROM   emp e,
       emp m
WHERE  m.empno = e.mgr; /*<-- Different*/

没有得到明确的结果......

先谢谢你们所有人。

2 个答案:

答案 0 :(得分:2)

第一个查询显示经理及其员工,例如BLAKE是5名员工的经理。第二部分显示了员工及其经理,因此BLAKE在第二列中出现了五次。

我认为他们可以写得更清楚,如:

-- Managers and their employees:
select m.ename as manager
     , e.ename as employee
from   emp m
       join emp e on e.mgr = m.empno
order by 1,2;

MANAGER    EMPLOYEE
---------- ----------
BLAKE      ALLEN
BLAKE      JAMES
BLAKE      MARTIN
BLAKE      TURNER
BLAKE      WARD
CLARK      MILLER
FORD       SMITH
JONES      FORD
JONES      SCOTT
KING       BLAKE
KING       CLARK
KING       JONES
SCOTT      ADAMS

13 rows selected

-- Employees and their managers:
select e.ename as employee
     , m.ename as manager
from   emp e
       join emp m on m.empno = e.mgr
order by 1,2;

EMPLOYEE   MANAGER
---------- ----------
ADAMS      SCOTT
ALLEN      BLAKE
BLAKE      KING
CLARK      KING
FORD       JONES
JAMES      BLAKE
JONES      KING
MARTIN     BLAKE
MILLER     CLARK
SCOTT      JONES
SMITH      FORD
TURNER     BLAKE
WARD       BLAKE

13 rows selected

答案 1 :(得分:0)

这是两个不同的查询:

  • 第一个列出员工(左)及其经理(右)。

  • 第二个列出了经理(左)及其员工(右)。

你需要决定你想要哪一个。

此外,在连接两个表时,您应该真正使用JOIN关键字(它不再是90秒)。您的第一个查询将如下所示:

SELECT e.ename,
       m.ename
  FROM emp e
  JOIN emp m on e.empno = m.mgr;
相关问题