【问题标题】:Listing all columns for one employee (dept, emp, salgrade)列出一名员工的所有列(dept、emp、salgrade)
【发布时间】:2020-08-31 15:36:52
【问题描述】:

我正在使用 ORACLE 的 Emp/Dept 数据库。如果有人不知道,这里是结构:

 CREATE TABLE EMP
           (EMPNO NUMBER(4) NOT NULL,
            ENAME VARCHAR2(10),
            JOB VARCHAR2(9),
            MGR NUMBER(4),
            HIREDATE DATE,
            SAL NUMBER(7, 2),
            COMM NUMBER(7, 2),
            DEPTNO NUMBER(2));

    INSERT INTO EMP VALUES
            (7369, 'SMITH',  'CLERK',     7902,
            TO_DATE('17-MAR-1980', 'DD-MON-YYYY'),  800, NULL, 20);
    INSERT INTO EMP VALUES
            (7499, 'ALLEN',  'SALESMAN',  7698,
            TO_DATE('20-MAR-1981', 'DD-MON-YYYY'), 1600,  300, 30);
    INSERT INTO EMP VALUES
            (7521, 'WARD',   'SALESMAN',  7698,
            TO_DATE('22-MAR-1981', 'DD-MON-YYYY'), 1250,  500, 30);
    INSERT INTO EMP VALUES
            (7566, 'JONES',  'MANAGER',   7839,
            TO_DATE('2-MAR-1981', 'DD-MON-YYYY'),  2975, NULL, 20);
    INSERT INTO EMP VALUES
            (7654, 'MARTIN', 'SALESMAN',  7698,
            TO_DATE('28-MAR-1981', 'DD-MON-YYYY'), 1250, 1400, 30);
    INSERT INTO EMP VALUES
            (7698, 'BLAKE',  'MANAGER',   7839,
            TO_DATE('1-MAR-1981', 'DD-MON-YYYY'),  2850, NULL, 30);
    INSERT INTO EMP VALUES
            (7782, 'CLARK',  'MANAGER',   7839,
            TO_DATE('9-MAR-1981', 'DD-MON-YYYY'),  2450, NULL, 10);
    INSERT INTO EMP VALUES
            (7788, 'SCOTT',  'ANALYST',   7566,
            TO_DATE('09-MAR-1982', 'DD-MON-YYYY'), 3000, NULL, 20);
    INSERT INTO EMP VALUES
            (7839, 'KING',   'PRESIDENT', NULL,
            TO_DATE('17-MAR-1981', 'DD-MON-YYYY'), 5000, NULL, 10);
    INSERT INTO EMP VALUES
            (7844, 'TURNER', 'SALESMAN',  7698,
            TO_DATE('8-MAR-1981', 'DD-MON-YYYY'),  1500,    0, 30);
    INSERT INTO EMP VALUES
            (7876, 'ADAMS',  'CLERK',     7788,
            TO_DATE('12-MAR-1983', 'DD-MON-YYYY'), 1100, NULL, 20);
    INSERT INTO EMP VALUES
            (7900, 'JAMES',  'CLERK',     7698,
            TO_DATE('3-MAR-1981', 'DD-MON-YYYY'),   950, NULL, 30);
    INSERT INTO EMP VALUES
            (7902, 'FORD',   'ANALYST',   7566,
            TO_DATE('3-MAR-1981', 'DD-MON-YYYY'),  3000, NULL, 20);
    INSERT INTO EMP VALUES
            (7934, 'MILLER', 'CLERK',     7782,
            TO_DATE('23-MAR-1982', 'DD-MON-YYYY'), 1300, NULL, 10);

    CREATE TABLE DEPT
           (DEPTNO NUMBER(2),
            DNAME VARCHAR2(14),
            LOC VARCHAR2(13) );

    INSERT INTO DEPT VALUES (10, 'ACCOUNTING', 'NEW YORK');
    INSERT INTO DEPT VALUES (20, 'RESEARCH',   'DALLAS');
    INSERT INTO DEPT VALUES (30, 'SALES',      'CHICAGO');
    INSERT INTO DEPT VALUES (40, 'OPERATIONS', 'BOSTON');

    CREATE TABLE SALGRADE
            (GRADE NUMBER,
             LOSAL NUMBER,
             HISAL NUMBER);

    INSERT INTO SALGRADE VALUES (1,  700, 1200);
    INSERT INTO SALGRADE VALUES (2, 1201, 1400);
    INSERT INTO SALGRADE VALUES (3, 1401, 2000);
    INSERT INTO SALGRADE VALUES (4, 2001, 3000);
    INSERT INTO SALGRADE VALUES (5, 3001, 9999);

我需要在一个查询中列出一位员工(假设为 KING)的所有列。一切都会很容易,但有一张萨尔格莱德表,我不知道如何与其他人联系...... 我正在尝试这样的事情,但它不起作用......

SELECT e.Empno, e.Ename, e.Job, e.Mgr, e.Hiredate, e.Sal, e.Comm, e.Deptno, d.Dname, d.Loc, s.Grade
FROM Emp e, Salgrade s
INNER JOIN Dept d ON d.Deptno=e.Deptno
WHERE e.Ename = 'KING' AND e.Sal BETWEEN s.Losal AND s.Hisal

【问题讨论】:

    标签: sql database oracle join select


    【解决方案1】:

    通过Salgrade 上的不等式条件连接,您走在了正确的轨道上。但是你应该永远混合隐式和显式连接。它们的评估顺序不同,因此会导致难以调试的故障。您的查询产生错误:

    ORA-00904: "E"."DEPTNO": invalid identifier

    事实上,总是使用标准的显式连接(使用 on 关键字)。

    应该这样做:

    SELECT e.Empno, e.Ename, e.Job, e.Mgr, e.Hiredate, e.Sal, e.Comm, e.Deptno, d.Dname, d.Loc, s.Grade
    FROM Emp e
    INNER JOIN Dept d ON d.Deptno=e.Deptno
    INNER JOIN Salgrade s ON e.Sal BETWEEN s.Losal AND s.Hisal
    WHERE e.Ename = 'KING'
    

    Demo on DB Fiddle

    EMPNO |姓名 |工作 |经理 |雇用日期 |萨尔 |通讯 |部门 |名称 |地点 |年级 ----: | :---- | :-------- | ---: | :-------- | ---: | ---: | -----: | :--------- | :------- | ----: 7839 |国王 |总统 | | 81 年 3 月 17 日 | 5000 | | 10 |会计 |纽约 | 5

    【讨论】:

      猜你喜欢
      • 2013-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-25
      • 1970-01-01
      • 1970-01-01
      • 2012-02-20
      相关资源
      最近更新 更多