2013-04-21 55 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