0

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

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

这是我的查询:

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

从上面的查询中可以清楚地看出,视图名称是"SIMPVIEW"。现在我正在尝试编写另一个查询来回答以下问题:

“使用您刚刚在与部门表连接的 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
4

3 回答 3

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;
于 2013-04-22T23:59:02.547 回答
0

阅读这个问题永远不会受到伤害。您被要求生成 4 列的查询;你的产生 5。因此,“它正确吗?”的答案。没有。

接下来,您不说这些表是如何相关的。这可能EMP.EMPNO一个外键,DEPT.DEPTNO但至少可以说是非常规的!如果没有其他信息,我会假设

  1. 该问题打算根据EMP.DEPTNO =DEPT.DEPTNO` 加入,并且
  2. 员工必须在一个部门,EMP.DEPTNO不能为 NULL。

在这种情况下,一个简单的内部JOIN就可以了。

于 2013-04-21T04:35:15.907 回答
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;
于 2013-04-21T01:44:24.233 回答