﻿---
title: Nest ES|QL queries using subqueries
description: A subquery is a complete ES|QL query wrapped in parentheses, nested inside another query. Each subquery runs independently and cannot reference columns...
url: https://www.elastic.co/elastic/docs-builder/docs/3856/reference/query-languages/esql/esql-subquery
products:
  - Elasticsearch
applies_to:
  - Elastic Cloud Serverless: Generally available
  - Elastic Stack: Generally available since 9.5, Preview in 9.4
---

# Nest ES|QL queries using subqueries
A subquery is a complete ES|QL query wrapped in parentheses, nested inside another query. Each subquery runs independently and cannot reference columns from the outer query.
You can use subqueries in two places:
- **In a [`FROM` command](https://www.elastic.co/elastic/docs-builder/docs/3856/reference/query-languages/esql/esql-from-subquery)**: each subquery runs its own pipeline and its rows are combined into the outer result set.
- **In a [`WHERE` command with `IN` or `NOT IN`](https://www.elastic.co/elastic/docs-builder/docs/3856/reference/query-languages/esql/esql-in-subquery)**: the subquery returns exactly one column, and the outer query filters rows against those values.


## Supported source commands

A subquery starts with one of the following source commands:
- [`FROM`](https://www.elastic.co/elastic/docs-builder/docs/3856/reference/query-languages/esql/commands/from): read from an index pattern.
- [`TS`](https://www.elastic.co/elastic/docs-builder/docs/3856/reference/query-languages/esql/commands/ts): read from a time series index pattern.
- [`ROW`](https://www.elastic.co/elastic/docs-builder/docs/3856/reference/query-languages/esql/commands/row): synthesize rows from literal values.


## Supported processing commands

The source command can be followed by zero or more piped processing commands:
- [`CHANGE_POINT`](https://www.elastic.co/elastic/docs-builder/docs/3856/reference/query-languages/esql/commands/change-point)
- [`COMPLETION`](https://www.elastic.co/elastic/docs-builder/docs/3856/reference/query-languages/esql/commands/completion)
- [`DISSECT`](https://www.elastic.co/elastic/docs-builder/docs/3856/reference/query-languages/esql/commands/dissect)
- [`DROP`](https://www.elastic.co/elastic/docs-builder/docs/3856/reference/query-languages/esql/commands/drop)
- [`ENRICH`](https://www.elastic.co/elastic/docs-builder/docs/3856/reference/query-languages/esql/commands/enrich)
- [`EVAL`](https://www.elastic.co/elastic/docs-builder/docs/3856/reference/query-languages/esql/commands/eval)
- [`GROK`](https://www.elastic.co/elastic/docs-builder/docs/3856/reference/query-languages/esql/commands/grok)
- [`INLINE STATS`](https://www.elastic.co/elastic/docs-builder/docs/3856/reference/query-languages/esql/commands/inlinestats-by)
- [`KEEP`](https://www.elastic.co/elastic/docs-builder/docs/3856/reference/query-languages/esql/commands/keep)
- [`LIMIT`](https://www.elastic.co/elastic/docs-builder/docs/3856/reference/query-languages/esql/commands/limit)
- [`LOOKUP JOIN`](https://www.elastic.co/elastic/docs-builder/docs/3856/reference/query-languages/esql/commands/lookup-join)
- [`MV_EXPAND`](https://www.elastic.co/elastic/docs-builder/docs/3856/reference/query-languages/esql/commands/mv_expand)
- [`RENAME`](https://www.elastic.co/elastic/docs-builder/docs/3856/reference/query-languages/esql/commands/rename)
- [`RERANK`](https://www.elastic.co/elastic/docs-builder/docs/3856/reference/query-languages/esql/commands/rerank)
- [`SAMPLE`](https://www.elastic.co/elastic/docs-builder/docs/3856/reference/query-languages/esql/commands/sample)
- [`SORT`](https://www.elastic.co/elastic/docs-builder/docs/3856/reference/query-languages/esql/commands/sort)
- [`STATS`](https://www.elastic.co/elastic/docs-builder/docs/3856/reference/query-languages/esql/commands/stats-by)
- [`WHERE`](https://www.elastic.co/elastic/docs-builder/docs/3856/reference/query-languages/esql/commands/where)


## Learn more

- [Use subqueries in a `FROM` command](https://www.elastic.co/elastic/docs-builder/docs/3856/reference/query-languages/esql/esql-from-subquery): combine result sets from independently processed sources.
- [Use subqueries in a `WHERE` command](https://www.elastic.co/elastic/docs-builder/docs/3856/reference/query-languages/esql/esql-in-subquery): filter rows with `IN` or `NOT IN`.