T-SQL Tutorial

T-SQL Subquery

What is a Subquery

A SQL Subquery(also called an inner query or inner select) is a sql query that is nested inside a statement(SELECT, INSERT, UPDATE, or DELETE), or inside another subquery.

Subquery basics

The statements that include a SQL Subquery usually use logical operators(in, exists, all, any or some):

WHERE expression [NOT] IN (subquery)
WHERE expression comparison_operator [ANY | ALL | SOME] (subquery)
WHERE [NOT] EXISTS (subquery)

Rules for adding a subquery

A subquery in SQL Server database comes with the following restrictions that must be followed for a successful addition to the outer query.
Only one expression or column name can be added to the list of a subquery introduced with a comparison operator.
When the WHERE clause of a larger query consists of a column name, it shall be join-compatible with the subquery select list column.
The select list 0 of subqueries does not accommodate the kinds of text, image, and text data.
The subquery that an untainted comparison operator adds cannot have clauses of GROUP BY or HAVING. The reason is that they must give back a single value.
To those subqueries that include GROUP BY, the DISTINCT keyword cannot be added.
The clauses COMPUTE and INTO clauses cannot be defined.
Only when the top is defined ORDER BY can be defined.
When a view is created by using subquery, it cannot be updated.

Subquery examples


The IN operator verify that the value in a specified column matches any value in a subquery or list.

select * from EMPLOYEES E
where E.ID IN (select s.SalesPersonID from Sales s);


The ANY operator compares a scalar value with a single-column set of values.

select * from Customers c
where c.ID = ANY (select s.CustomerID from Sales s);


The SOME operator is equivalent with ANY operator.

select * from Students s
where s.id =SOME (select l.Student_id from Library l);


The Transact-SQL EXISTS operator specifies a subquery to check for the existence of rows.

select * from Students s
where EXISTS (select * from Students_Math m where m.id=s.id);


The Transact-SQL NOT EXISTS operator specifies a subquery to check for the not existence of rows.

select * from Students s
where NOT EXISTS (select * from Students_Math m where m.id=s.id);

Correlated Subquery

In SQL Server, a correlated subquery is a type of subquery that refers to a column from the outer query, and as a result, the subquery's results are dependent on the values in the outer query. This type of subquery is also known as a dependent subquery.

A correlated subquery is typically used to retrieve data from one or more related tables based on the data in the current row being processed in the outer query. It allows for more complex queries to be performed, and can be particularly useful when dealing with large datasets.