如何使用 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
有不同类型的子查询。
标量子查询:完全独立于主查询的查询。
select empno,
(select 来自 emp 的计数(*))total_emp
来自 emp
这里子查询完全独立于主查询。
相关子查询:子查询引用主查询。
select empno,
(select 部门名称
来自d部门
其中 e.deptno = d.deptno) 部门名称
来自 emp e
内联视图:用作 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
注意:现在您可以在问题的内联视图中找到子查询和内联视图。
任何人都可以帮助我理解这个 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
有不同类型的子查询。
标量子查询:完全独立于主查询的查询。
select empno, (select 来自 emp 的计数(*))total_emp 来自 emp
这里子查询完全独立于主查询。
相关子查询:子查询引用主查询。
select empno, (select 部门名称 来自d部门 其中 e.deptno = d.deptno) 部门名称 来自 emp e
内联视图:用作 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
注意:现在您可以在问题的内联视图中找到子查询和内联视图。