Nested Queries (Sub-Queries)
Objectives Learn how to run a query as a nested sub-query Condition on nested query Application of nested query Restriction of nested query Pair wise and not pair wise comparison Nested query at multiple level Use correlated sub-query
Definitions Sub-query is a query inside another query Outer query vs. Inner query Inner query executed first Enclose queries are parenthesis Do not add ORDER BY to sub-query (why)? Result of sub-query will be used by outer query
Example 1 Employee (Name, SSN, Salary, B_date, Starting_Date, Dept) List Employees name who have salary higher than Mr. Smith: SELECT Name FROM Employee WHERE Salary> (SELECT Salary FROM Employee WHERE Name=‘Smith’);
Example 1 List Employees name who have salary higher than Mr. Smith: SELECT A.Name FROM Employee A, Employee B WHERE B.Name=‘Smith’ AND A.salary>B.salary;
Example 2 SELECT Name FROM Employee WHERE Salary = (SELECT MAX(Salary) FROM Employee);
Use of IN in Sub-Query SELECT Name FROM Employee WHERE Id IN (SELECT Id FROM Employee WHERE Salary BETWEEN AND 50000);
Use of IN in Sub-Query SELECT Name FROM Employee WHERE Id IN (SELECT Id FROM Employee WHERE NOT Salary BETWEEN AND 50000);
Use Sub-Query to join tables Department (Name, Phone, Address, No_Employee) SELECT Name FROM Employee WHERE Dept IN (SELECT Name FROM Department WHERE No_Emplyee>20);
Example SELECT Employee.Name FROM Employee, Department WHERE Department.Name= Employee.Dept AND No_Employee>20;
Multiple Levels Nested Queries SELECT Name FROM Employee WHERE Salary> (SELECT AVG(Salary) FROM Employee WHERE Dept IN (SELECT Name FROM Department WHERE No_Emplyee>20);
Pair Wise Comparison in Sub- Query SELECT Name, Id, GPA FROM Student WHERE (Major, Minor) IN (SELECT (Minor, Major) FROM Student WHERE Name=‘Smith’);