如何使用 Table 联接和内联视图

How to work with Table joins and Inline View

任何人都可以帮助我理解这个 SQL 查询;我不明白它背后的概念:

SELECT
    t2.*,
    (
        SELECT SUM (salary)
        FROM (
            SELECT
            tb1.*, 
            ROWNUM AS rnk
            FROM ( 
                SELECT *
                FROM employees e
                ORDER BY E.DEPARTMENT_ID, E.EMPLOYEE_ID
            ) tb1
        ) tb2
        WHERE   tb2.DEPARTMENT_ID = t2.DEPARTMENT_ID AND tb2.rnk <= t2.rnk
    ) dept_salary
FROM (
    SELECT   
        t1.*, 
        ROWNUM AS rnk
    FROM (  
        SELECT   
            e.employee_id,
            e.first_name,
            e.department_id,
            e.salary
        FROM employees e
        ORDER BY   E.DEPARTMENT_ID, E.EMPLOYEE_ID
    ) t1
) t2

有不同类型的子查询。

  1. 标量子查询:完全独立于主查询的查询。

    select empno, (select 来自 emp 的计数(*))total_emp 来自 emp

这里子查询完全独立于主查询。

  1. 相关子查询:子查询引用主查询。

    select empno, (select 部门名称 来自d部门 其中 e.deptno = d.deptno) 部门名称 来自 emp e

  2. 内联视图:用作 table 或 SQL

    中的视图的子查询

    select * 来自 (select empno, deptname 来自 emp e, dept d 其中 e.deptno = d.deptno) 其中 sal > 100

根据您的查询:

SELECT
    t2.*,
    (
        SELECT SUM (salary)  -- start Corelated Sub Query
        FROM (
            SELECT
            tb1.*, 
            ROWNUM AS rnk
            FROM ( 
                SELECT *  -- start Scalar Sub Query
                FROM employees e
                ORDER BY E.DEPARTMENT_ID, E.EMPLOYEE_ID -- end Scalar Sub Query
            ) tb1 
        ) tb2
        WHERE   tb2.DEPARTMENT_ID = t2.DEPARTMENT_ID AND tb2.rnk <= t2.rnk -- end Corelated Sub Query
    ) dept_salary
FROM (
    SELECT   -- start inline view
        t1.*, 
        ROWNUM AS rnk
    FROM (  
        SELECT   
            e.employee_id,
            e.first_name,
            e.department_id,
            e.salary
        FROM employees e
        ORDER BY   E.DEPARTMENT_ID, E.EMPLOYEE_ID
    ) t1
) t2  -- end inline view

注意:现在您可以在问题的内联视图中找到子查询和内联视图。