2013-04-21 62 views
0

我创建从以下问题视图视图:应用OUTER JOIN上

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

这里是我的查询:

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

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

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

我明白,基本上我需要JOIN我之前创建的视图和部门表的莫名其妙,所以我有两个问题领域:

由于我必须包括所有从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 
+1

我认为没有必要为外连接。 – 2013-04-21 03:26:58

+0

@DanBracuk:你可能是对的。但是,这可能会导致一些员工未被分配到任何特定部门。 – 2013-04-21 03:37:14

回答

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; 
+0

谢谢您的宝贵意见。 – Tan 2013-04-23 05:59:17

+0

如果你喜欢我的回答,你为什么不把它标记为已接受? – 2013-04-23 06:01:31

0

它从来没有痛苦地阅读这个问题。你被要求提供一个产生4列的查询;你的结果是5.因此,答案是“它是正确的吗?”是否。

接下来,你不会说表是如何相关的。它可能EMP.EMPNODEPT.DEPTNO的外键,但至少可以说非常规!没有其他资料,我会承担

  1. ,这个问题你打算基于EMP.DEPTNO = DEPT.DEPTNO`加盟,
  2. 一个员工必须在一个部门,EMP.DEPTNO不能为空。

在这种情况下,一个简单的内部JOIN会做。

+0

谢谢你的宝贵意见。 – Tan 2013-04-23 05:59:47

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; 
+0

谢谢你的宝贵意见。 – Tan 2013-04-23 05:58:02