You are on page 1of 13

Introduction to Database

Sub- queries in SQL

(CSE 3151)
Sub-query?
Some times you may need two queries to solve a
single problem.
Ex: Who has a salary greater than Abel’s?
Subquery: What is Abel’s Salary?
Mainquery: Which employees' salaries are greater than Abel’s
salary.
Syntax:
SELECT <columns>
Mainquery/ FROM <table>
Outerquery WHERE <expression>
(SELECT <columns>
Subquery/ FROM <table>
Innerquery WHERE <expression>);
S ry
Q
L

S
u
b
-
q
u
e
A sub-query is a SQL statement that has another
SQL query embedded in the WHERE or the HAVING
clause.
– Most of the time, a sub-query is used when you know how to
search for a value using a SELECT statement, but do not
know the exact value in the database.
Syntax
SELECT column-names
FROM table-name1
WHERE expression operator (SELECT column-name
FROM table-name2 WHERE condition)
Example
Ex: Find the employee names getting more salary
than Abel’s.
SELECT name FROM
employee WHERE
salary >
(SELECT salary
FROM employees
WHERE name = “Abel”);
Sub-query Types
Single-row sub-queries: Queries that return only one
row from the inner SELECT statement
Use single-row comparison operators
=, >, >=, <, <=, <>(not)
Multiple-row sub-queries: Queries that return more than
one row from the inner SELECT statement
Use multiple-row comparison operators
IN, ANY, ALL
Single-row sub-queries - I
Display the employees name and job ID whose
job ID is the same as that of employee 141.
SELECT name, job_id
FROM employees
WHERE job_id =
(SELECT job_id
FROM employees
WHERE employee_id = 141);
Single-row sub-queries - II
Display the employees name and job_id whose job ID is the
same as that of employee 141 and salary same as that of
employee 143.
SELECT name, job_id
FROM employees
WHERE job_id =
(SELECT job_id
FROM employees
WHERE employee_id = 141) AND
salary >
(SELECT salary
FROM employees
WHERE employee_id = 143);
Single-row sub-queries - III
Display the employees name, job_id, salary, who are getting
minimum salary.
SELECT name, job_id, salary
FROM employees
WHERE salary = (SELECT
MIN(salary)
FROM employees);
List the departments getting min salary greater than the dept 50
SELECT dept_id, MIN(salary)
FROM employees
GROUP BY dept_id
HAVING MIN(salary) >
(SELECT MIN(salary)
FROM employees
WHERE dept_id = 50);
Multiple-row sub-queries - I
List the employees of different departments getting minimum
salary.
SELECT name, salary, dept_id
FROM employees
WHERE salary IN (SELECT
MIN(salary)
FROM employees
GROUP BY dept_id);
Multiple-row sub-queries - II
Find employees info of employees getting salary less than
any IT programmers
SELECT emp_id, name, job_id, salary
FROM employees
WHERE salary < ANY
(SELECT salary
FROM employees
WHERE job_id = ’IT_PROG’)
AND job_id <> ’IT_PROG’;
Multiple-row sub-queries - III
Find employees info of employees salary less than all IT
programmers
SELECT employee_id, last_name, job_id, salary
FROM employees
WHERE salary < ALL
(SELECT salary
FROM employees
WHERE job_id = ’IT_PROG’)
AND job_id <> ’IT_PROG’;
Problem with Sub-query

A common problem with sub-query is, if no


rows being returned by the inner query!

End of Lab Lect 6

Thank You

You might also like