Nested select sql multiple subqueries

Today, We want to share with you nested select sql.In this post we will show you sql nested queries practice, hear for sql nested select join we will give you demo and example for implement.In this post, we will learn about nested select sql with an example.

Nested select statement in SQL Server

There are mainly two types of nested queries:

  • Independent Nested Queries
  • Co-related Nested Queries

What Is a Nested Query in SQL?

A nested SELECT is a query within a query for example when you have a simple SELECT statement within the main base SELECT statement.

To create the full concept clearer, let’s go through basic and Advance level an example together.

In this article, we’re going to work with data from a fictional high big compines. The database includes three tables: employees, owners, and Companies. You can see the Database tables below:

Employees

id name class_id RPT
1 Jagruti Bridhari 3 3.45
2 Daniel White 1 3.15
3 Kartik Dameliya 1 3.85
4 Hiren Mugra 2 3.10
5 Sanjay dabhi 2 2.40

Owners

id name Departments class_id monthly_salary
1 Mehuk Sarivya Devloper 3 2,500
2 Ravi Patodiya SEO [NULL] 2,000
3 Sejal Ramani Tester 1 2,350
4 Geet Pipariya Managements 2 3,000

Companies

id grade owner_id number_of_employees
1 10 3 21
2 11 4 25
3 12 1 28

Let’s say you want to find all employees that have above-average RPTs. However, you don’t know the average RPT score. Certainly, you can use a query to find out:

SELECT AVG(RPT)
FROM employees;

You’ll get a number (3.19) that you can use to solve the initial task – showing all information for employees with a RPT above this average:

SELECT *
FROM employees
WHERE RPT > 3.19;

But can you solve this task in one step? You can with a nested query. Here is how it looks:

SELECT *
FROM employees
WHERE RPT > (
    SELECT AVG(RPT)
    FROM employees);

Our subquery here returns a single value (i.e. a table with a single column and a single row). This is important for the comparison operator to work. With the average RPT score returned by the inner query, the outer query can select the employees who satisfy our filter condition (i.e. a RPT score above average).

And here is the result:

id name class_id RPT
1 Jagruti Bridhari 3 3.45
3 Kartik Dameliya 1 3.85

SQL – Sub Queries

Subqueries can be used with the SELECT, INSERT, UPDATE, and DELETE All the Basic statements along with the operators like =, <, >, >=, <=, IN, BETWEEN, etc. Subqueries with the DELETE Statement

SQL> DELETE FROM EMPLOYEES
   WHERE AGE IN (SELECT AGE FROM EMPLOYEES_BKP
      WHERE AGE >= 27 );

Subqueries with the UPDATE Statement

SQL> UPDATE EMPLOYEES
   SET SALARY = SALARY * 0.25
   WHERE AGE IN (SELECT AGE FROM EMPLOYEES_BKP
      WHERE AGE >= 27 );

Subqueries with the INSERT Statement

SQL> INSERT INTO EMPLOYEES_BKP
   SELECT * FROM EMPLOYEES 
   WHERE ID IN (SELECT ID 
   FROM EMPLOYEES) ;

Subqueries with the SELECT Statement

SQL> SELECT * 
   FROM EMPLOYEES 
   WHERE ID IN (SELECT ID 
         FROM EMPLOYEES 
         WHERE SALARY > 4500) ;

Nested select statement in SQL Server

alias the subquery.

SELECT name FROM (SELECT name FROM EMPLOYEES) a  

more explicit

SELECT a.name FROM (SELECT name FROM EMPLOYEES) a  

SQL Nested subqueries

Example -1 : Nested subqueries

SELECT dept_id,AVG(salary) 
FROM employees   
GROUP BY dept_id   
HAVING AVG(salary)<           
(SELECT MAX(AVG(min_salary))            
FROM depts             
WHERE dept_id IN                 
(SELECT dept_id FROM dept_history                  
WHERE department_id                   
BETWEEN 50 AND 100)             
GROUP BY dept_id);

Oracle 11g Express Edition.

SELECT dept_id,AVG(salary) 
SELECT dept_id,AVG(salary) 
FROM employees   
GROUP BY dept_id   
HAVING AVG(salary)<
(SELECT MAX(myavg) from (select dept_id,AVG(min_salary) as myavg
FROM depts             
WHERE dept_id IN                 
(SELECT dept_id FROM dept_history                  
WHERE department_id                   
BETWEEN 50 AND 100)            
GROUP BY dept_id) ss);

How to create a nested SELECT in SQL

CREATE TABLE Member (
    MemberID int,
    LastName varchar(255),
    FirstName varchar(255),
    City varchar(255) 
);

INSERT INTO Member (MemberID, LastName, FirstName, City)
VALUES (1 , 'Rakesh', 'Savaliya', 'Rajkot'), 
(2 , 'Dipak', 'Dhameliya', 'Kalavad'),
(3 , 'Vijay', 'Chovatiya', 'Surat');

-- Nested SELECT ------

SELECT A.MemberID FROM (
    SELECT MemberID, LastName, FirstName FROM Member
  ) AS A;

In nested queries, a query is written inside a query. The result of inner query is used in execution of outer query. We will use EMPLOYEE, COMPANY, EMPLOYEE_COMPANY tables for understanding nested queries.
EMPLOYEE

EMP_ID EMP_NAME EMP_ADDRESS EMP_PHONE EMP_AGE
EMP1 KISHAN AHEMDABAD 963815547* 18
EMP2 DIVYESH GANDHINAGAR 989856854* 18
EMP3 YASH KALAVAD 985858758* 20
EMP4 MANOJ RAJKOT 989822507* 18

COMPANY

COMP_ID COMP_NAME
COMP1 ANG
C2 Programming
COMP3 Angular

EMPLOYEE_COMPANY

EMP_ID COMP_ID
EMP1 COMP1
EMP1 COMP3
EMP2 COMP1
EMP3 C2
EMP4 C2
EMP4 COMP3

Independent Nested Queries

IN: If we want to find out EMP_ID who are enrolled in COMP_NAME ‘ANG’ or ‘Angular’, we can write it with the help of independent nested query and IN operator. From COMPANY table, we can find out COMP_ID for COMP_NAME ‘ANG’ or Angular’ and we can use these COMP_IDs for finding EMP_IDs from EMPLOYEE_COMPANY TABLE.

STEP 1: Finding COMP_ID for COMP_NAME =’ANG’ or ‘Angular’

Select COMP_ID from COMPANY where COMP_NAME = ‘ANG’ or COMP_NAME = ‘Angular’

STEP 2: Using COMP_ID of step 1 for finding EMP_ID

Select EMP_ID from EMPLOYEE_COMPANY where COMP_ID IN

(SELECT COMP_ID from COMPANY where COMP_NAME = ‘ANG’ or COMP_NAME=’Angular’);

The inner query will return a set with members COMP1 and COMP3 and outer query will return those EMP_IDs for which COMP_ID is equal to any member of set (COMP1 and COMP3 in this case). So, it will return EMP1, EMP2 and EMP4.

Note: If we want to find out names of EMPLOYEEs who have either enrolled in ‘ANG’ or ‘Angular’, it can be done as:

Select EMP_NAME from EMPLOYEE where EMP_ID IN

(Select EMP_ID from EMPLOYEE_COMPANY where COMP_ID IN

(SELECT COMP_ID from COMPANY where COMP_NAME=’ANG’ or COMP_NAME=’Angular’));

NOT IN: If we want to find out EMP_IDs of EMPLOYEEs who have neither enrolled in ‘ANG’ nor in ‘Angular’, it can be done as:

Select EMP_ID from EMPLOYEE where EMP_ID NOT IN

(Select EMP_ID from EMPLOYEE_COMPANY where COMP_ID IN

(SELECT COMP_ID from COMPANY where COMP_NAME=’ANG’ or COMP_NAME=’Angular’))

The innermost query will return a set with members COMP1 and COMP3. Second inner query will return those EMP_IDs for which COMP_ID is equal to any member of set (COMP1 and COMP3 in this case) which are EMP1, EMP2 and EMP4. The outermost query will return those EMP_IDs where EMP_ID is not a member of set (EMP1, EMP2 and EMP4). So it will return EMP3.

Co-related Nested Queries

In co-related nested queries, the output of inner query depends on the row which is being currently executed in outer query. e.g.; If we want to find out EMP_NAME of EMPLOYEEs who are enrolled in COMP_ID ‘COMP1’, it can be done with the help of co-related nested query as:

Select EMP_NAME from EMPLOYEE S where EXISTS

( select * from EMPLOYEE_COMPANY ECMY where S.EMP_ID=ECMY.EMP_ID and ECMY.COMP_ID=’COMP1’);

For each row of EMPLOYEE S, it will find the rows from EMPLOYEE_COMPANY where S.EMP_ID = ECMY.EMP_ID and ECMY.COMP_ID=’COMP1’. If for a EMP_ID from EMPLOYEE S, atleast a row exists in EMPLOYEE_COMPANY ECMY with COMP_ID=’COMP1’, then inner query will return true and corresponding EMP_ID will be returned as output.

I hope you get an idea about nested select sql.
I would like to have feedback on my infinityknow.com blog.
Your valuable feedback, question, or comments about this article are always welcome.
If you enjoyed and liked this post, don’t forget to share.

Leave a Comment