在VIEWS上应用OUTER JOIN

时间:2013-04-21 01:35:52

标签: sql oracle oracle11g

我已经从以下问题创建了一个视图:

“创建一个视图以选择员工ID,员工姓名,雇用日期和部门编号。”

这是我的问题:

CREATE VIEW SIMPVIEW AS
SELECT EMPNO, ENAME, HIREDATE,DEPTNO
FROM EMP;

从上述查询中可以清楚地看到,视图名称为“SIMPVIEW”。现在我正在尝试编写另一个查询以回答以下问题:

“使用您在与department表连接的select语句中创建的视图,列出员工ID,员工姓名,部门名称和雇用日期。”

我明白基本上我需要加入我之前创建的视图和部门表的字段,因此我有两个问题:

由于我必须包含 SIMPVIEW 视图中的所有元素,有什么方法可以从视图中选择所有元素而不选择我在下面完成的每个元素。

SELECT s.empno,s.ename,s.hirdate,s.deptno,d.dname FROM SIMPVIEW s LEFT OUTER JOIN Dept d ON s.empno = d.deptno;

我的问题:上述查询是否正确?

以下是两个表格(DEPT和EMP)供您参考:

DEPT

DEPTNO,DNAME,LOC

EMP

EMPNO, ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO

3 个答案:

答案 0 :(得分:0)

您需要根据deptno加入,因此您的查询应该是

SELECT s.empno,
       s.ename,
       s.hirdate,
       s.deptno,
       d.dname 
FROM SIMPVIEW s 
   LEFT OUTER JOIN Dept d ON s.deptno = d.deptno;

是的,您可以将查询重写为

SELECT s.*,
       d.dname 
FROM SIMPVIEW s 
   LEFT OUTER JOIN Dept d ON s.deptno = d.deptno;

答案 1 :(得分:0)

阅读这个问题永远不会伤害。系统会要求您提供生成4列的查询;你的产生了5.因此答案是“它是正确的吗?”没有。

接下来,您没有说明表格是如何相关的。 可能EMP.EMPNODEPT.DEPTNO的外键,但至少可以说是非传统的!如果没有其他信息,我会假设

  1. 该问题打算根据EMP.DEPTNO = DEPT.DEPTNO`和
  2. 加入
  3. 员工必须在某个部门,而EMP.DEPTNO不能为NULL。
  4. 在这种情况下,简单的内部JOIN会做。

答案 2 :(得分:0)

希望这是你所需要的

Create or replace view simpview 
(empno, ename, hirdate, deptno,dname  )
AS
SELECT s.empno,
       s.ename,
       s.hirdate,
       s.deptno,
       d.dname 
FROM SIMPVIEW s 
   LEFT OUTER JOIN Dept d 
ON s.deptno = d.deptno;