Subqueries, or nested queries, are a second SELECT
query contained within a first SELECT
query. The subquery can be used within a WHERE
, HAVING
or FROM
clause of another SELECT
query. Very powerful queries can be designed using this technique.
There are two types of subqueries:
Single row subquery
The general syntax of a single row subquery is:
SELECT ColumnList
FROM TableName
WHERE Condition
(SELECT ColumnList
FROM TableName
WHERE Condition)
There are certain rules we need to follow when we create a subquery:
ORDER BY
clause cannot be used in a subqueryWhen a statement is written with a subquery, the inner query is executed first. The inner query returns a value or a set of values to the outer query. The outer query is then executed with the result from the inner query.
Multiple row subquery
A multiple-row subquery returns more than one row of data. The operators used in a single-row subqueries relational operators (=, <>, >, >=, <, <=) cannot be used in multiple-row subqueries. Instead, other operators must be used.
Where a subquery can return zero, one or many values, there are a number of operators that can be used. These include:
Operator | Usage | Meaning |
---|---|---|
IN |
value IN table |
true if the value is in the table |
EXISTS |
EXISTS (table) |
true if the table is not empty |
And the following which are used in conjunction with one of the traditional operators: =, <>, >, >=, <, <=
|
compares the given value to each value returned by the subquery | |
value = ANY ( table ) |
True if the value equals a value in the table | |
ALL |
compares the given value to every value returned by the subquery | |
value <> ALL ( table ) |
True if the value does not equal any value in the table. |
Some further examples are:
value < ANY |
value is less than at least one value returned by the subquery, that is value is less than the maximum value returned by the subquery |
value = ANY |
equivalent to IN |
value > ANY |
value is more that at least one value returned by the subquery, that is value is greater than the minimum value returned by the subquery |
value >= ALL |
value is bigger than or equal to all values returned by the subquery, that is value is equal to or bigger than the maximum value returned by the subquery |
value < ALL |
value is less than all values returned by the subquery, that is value is less than the minimum value returned by the subquery |