SQL | Sub queries in From Clause
From clause can be used to specify a sub-query expression in SQL. The relation produced by the sub-query is then used as a new relation on which the outer query is applied.
- Sub queries in the from clause are supported by most of the SQL implementations.
- The correlation variables from the relations in from clause cannot be used in the sub-queries in the from clause.
Syntax:
SELECT column1, column2 FROM (SELECT column_x as C1, column_y FROM table WHERE PREDICATE_X) as table2, table1 WHERE PREDICATE;
Note: The sub-query in the from clause is evaluated first and then the results of evaluation are stored in a new temporary relation.
Next, the outer query is evaluated, selecting only those tuples from the temporary relation that satisfies the predicate in the where clause of the outer query.
Query
Example 1: Find all professors whose salary is greater than the average budget of all the departments.
Instructor relation:
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 relation:
Department Name | Budget |
---|---|
Computer Science | 100000 |
Electrical | 80000 |
Humanities | 50000 |
Mechanical | 40000 |
Information Technology | 90000 |
Civil | 60000 |
Query:
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;
Output
InstructorID | Name | Department | Salary |
---|---|---|---|
44547 | Smith | Computer Science | 95000 |
48147 | Erik | Mechanical | 80000 |
Explanation: The average budget of all departments from the department relation is 70000. Erik and Smith are the only instructors in the instructor relation whose salary is more than 70000 and therefore are present in the output relation.
Please Login to comment...