SQL Subquery

Subquery is a query with in a query.

Syntax:-

select * from table_name where column_name in (select column from table_name)
Highlighted part is called Subquery.

Examples:- 
Consider below table structures.

DEPT table
Deptno Deptname Location
1 HR London
2 Marketing Newyork
5 Management Bejing

EMP table
EmpnoEmpnameSalaryDeptno
10Bill120005
11Solomon100005
12Susan100005
13Wendy90001
14Benjamin75001
15Tom76001
16Henry85002
17Robert95002
18Paul77002




1. Find the details of all 'HR' employees.

Select * from EMP where deptno in (select deptno from DEPT  where deptname = 'HR');

Always Subquery will be executed first. If Subquery returns no data, main query also will not return any data.

2. Find the details of all 'Logistic' department employees if any.

Select * from EMP where deptno in (select deptno from DEPT  where deptname = 'Logistic');

The above query will not return any records because Subquery has no matching records 

3. Find the details of all employees earning lowest salary.

Select * from EMP where salary = (select min(salary) from EMP) ;  

4.  Find all employee details if there any Marketing dept

 Select * from EMP e where exists (select * from DEPT d where deptname = 'Marketing');   

Subquery returns more than one row error
Example 3 will return details of all employees earning lowest salary. While writing the subquery user forgot to mention min clause and submitted below query.

SQL> Select * from EMP where salary = (select salary from EMP) ;  
                                  *
ERROR at line 1:
ORA-01427: single-row subquery returns more than one row

This error happened because main query expecting a single value from the Subquery but returning more than one row. When writing a single-row Subquery make sure it is returning single row.

1 comment: