将SQL查询从使用连接转换为相关嵌套查询?

时间:2018-03-03 19:33:26

标签: sql join oracle-sqldeveloper correlated-subquery

我是SQL的新手,并且正在使用Oracle SQL Developer进行分配。该任务要求使用相关的嵌套查询来解决问题,但我在这方面遇到了很多麻烦。我已经能够使用join语句解决问题。我理解一个相关的嵌套查询是子查询引用外部查询中使用的相同关系的位置。这是正确的思路吗?这与使用连接操作有何不同?另外,在我使用SQL时,我注意到SELECT属性,它必须是外部查询的一列(与内部查询相对)。这是否意味着如果使用相关的嵌套查询,所有聚合函数必须在外部查询中?任何建议将不胜感激。

例如,一个问题是要求创建一个包含员工姓名,薪水,部门名称,部门经理姓名,部门经理薪水和平均部门薪水的视图。我使用连接的解决方案:

CREATE VIEW DEPT_EMP_MGR_SALARIES
AS
    SELECT
        E.Fname AS EMP_FNAME,
        E.Minit AS EMP_MINIT,
        E.Lname AS EMP_LNAME,
        E.Salary AS EMP_SALARY,
        Dname,
        DMgr_Fname,
        DMgr_Minit,
        DMgr_Lname,
        DMgr_Salary,
        DEPT_AVG_SALARY
    FROM
        EMPLOYEE E
    JOIN (
        SELECT
            D.Dname,
            D.Dnumber,
            M.Fname AS DMgr_Fname,
            M.Minit AS DMgr_Minit,
            M.Lname AS DMgr_Lname,
            M.Salary AS DMgr_Salary
        FROM
            EMPLOYEE M,
            DEPARTMENT D
        WHERE
            D.Mgr_SSN = M.SSN
    ) ON E.Dno = Dnumber
    NATURAL JOIN (
        SELECT
            D1.Dname,
            AVG(E1.SALARY) AS DEPT_AVG_SALARY
        FROM
            EMPLOYEE E1,
            DEPARTMENT D1
        WHERE
            E1.Dno = D1.Dnumber
        GROUP BY
            D1.Dname
    );

0 个答案:

没有答案