从一个表中选择所有内容,从另一个SQL中选择某些列

从一个表中选择所有内容,从另一个SQL中选择某些列,sql,oracle,select,Sql,Oracle,Select,创建视图时,如何从一个表中选择所有内容,从另一个表中选择某些列 比如我写过 CREATE VIEW NOT_IN_MAN_GLA_LND AS SELECT E.EMPLOYEE_ID, E.TITLE, E.FIRST_NAME, E.LAST_NAME, E.HOUSE_NO, E.ADDRESS, E.POSTCODE, E.TELE_NO, E.START_DATE, P.CITY, P.POST_CODE

创建视图时,如何从一个表中选择所有内容,从另一个表中选择某些列

比如我写过

CREATE VIEW NOT_IN_MAN_GLA_LND
AS 
     SELECT 
         E.EMPLOYEE_ID, E.TITLE, E.FIRST_NAME, E.LAST_NAME, 
         E.HOUSE_NO, E.ADDRESS, E.POSTCODE, E.TELE_NO, E.START_DATE, 
         P.CITY, P.POST_CODE
     FROM 
         EMPLOYEE E, POSTCODE P
     WHERE 
         E.POSTCODE = P.POSTCODE
         AND P.CITY NOT IN ('MAN', 'GLA', 'LND');
因此,我不必从employee表中写入所有列,而是可以选择所有列,同时仍然只从postcode表中选择两列

create or replace VIEW NOT_IN_MAN_GLA_LND
AS SELECT E.*, P.CITY, P.POST_CODE as P_POST_CODE

FROM EMPLOYEE E, POSTCODE P

WHERE E.POSTCODE = P.POSTCODE

AND P.CITY NOT IN ('MAN', 'GLA', 'LND');

for example dept nd emp table:

create or replace view ns_1_v as
select e.*,d.deptno as d_dname,d.dname 
from scott.emp e ,scott.dept d
where
e.deptno=d.deptno;

如果两个表中都有相同的名称,则必须为列名指定别名,否则在邮政编码相同的情况下会出现UPLLICAATE列名错误,因此为其指定别名更好的答案是使用正确、明确、标准的联接语法:

如果您希望在结果中包括员工(即使是那些没有匹配邮政编码的员工),那么:

CREATE VIEW NOT_IN_MAN_GLA_LND AS
    SELECT E.*, P.CITY, P.POST_CODE
    FROM EMPLOYEE E LEFT JOIN
         POSTCODE P
         ON E.POSTCODE = P.POSTCODE
    WHERE P.CITY NOT IN ('MAN', 'GLA', 'LND') OR
          P.CITY IS NULL;

您可以使用SELECT*,但我认为在任何严肃的代码中这是一个糟糕的做法。如果有人向您的表中添加列,会发生什么情况?令人惊讶的是,这不在你的视野之内!只要把这些列打出来就行了。这将花费你60秒,你就完成了。SQL开发人员甚至会为您这样做。-早在25年前,在ANSI-92 SQL标准中,这种旧式的逗号分隔表列表样式就被正确的ANSI连接语法所取代,并且它的使用非常简单discouraged@The_Baer谢谢
CREATE VIEW NOT_IN_MAN_GLA_LND AS
    SELECT E.*, P.CITY, P.POST_CODE
    FROM EMPLOYEE E LEFT JOIN
         POSTCODE P
         ON E.POSTCODE = P.POSTCODE
    WHERE P.CITY NOT IN ('MAN', 'GLA', 'LND') OR
          P.CITY IS NULL;