SQL | From 子句中的子查询
From 子句可用于指定 SQL 中的子查询表达式。子查询产生的关系然后用作应用外部查询的新关系。
- 大多数 SQL 实现都支持 from 子句中的子查询。
- from 子句中关系的相关变量不能用于 from 子句中的子查询。
语法:
SELECT column1, column2 FROM
(SELECT column_x as C1, column_y FROM table WHERE PREDICATE_X)
as table2, table1
WHERE PREDICATE;
注意: from 子句中的子查询首先被评估,然后评估结果存储在一个新的临时关系中。
接下来,评估外部查询,仅从临时关系中选择满足外部查询 where 子句中谓词的元组。
询问
例 1 :找出所有薪水大于所有系平均预算的教授。
导师关系:InstructorID Name Department Salary 44547 Smith Computer Science 95000 44541 Bill Electrical 55000 47778 Sam Humanities 44000 48147 Erik Mechanical 80000 411547 Melisa Information Technology 65000 48898 Jena Civil 50000
部门关系:Department Name Budget Computer Science 100000 Electrical 80000 Humanities 50000 Mechanical 40000 Information Technology 90000 Civil 60000
查询:
select I.ID, I.NAME, I.DEPARTMENT, I.SALARY from
(select avg(BUDGET) as averageBudget from DEPARTMENT) as BUDGET, Instructor as I
where I.SALARY > BUDGET.averageBudget;
输出InstructorID Name Department Salary 44547 Smith Computer Science 95000 48147 Erik Mechanical 80000
解释:部门关系中所有部门的平均预算为 70000。Erik 和 Smith 是讲师关系中仅有的薪水超过 70000 的讲师,因此存在于输出关系中。