---
metadata:
  - name: generator
    content: Diplodoc Platform v5.50.6
alternate:
  - https://ydb.tech/docs/en/reference/ydb-cli/sql.md?version=main
  - https://ydb.tech/docs/ru/reference/ydb-cli/sql.md?version=main
sourcePath: ru/core/reference/ydb-cli/sql.md
---
> **Documentation Index:** Fetch the complete configuration index at https://ydb.tech/docs/ru/llms.txt

# Выполнение запросов

С помощью подкоманды `ydb sql` вы можете выполнить SQL-запрос. Запрос может быть любого типа (DDL, DML и т.д.), а так же состоять из нескольких подзапросов. Подкоманда `ydb sql` устанавливает стрим и получает данные через него. Выполнение запроса в стриме позволяет снять ограничение на размер читаемых данных. Эта команда также позволяет записывать данные в YDB, что более эффективно при выполнении повторяющихся запросов с передачей данных через параметры.

Общий вид команды:

```bash
ydb [global options...] sql [options...]
```

* `global options` — [глобальные параметры](https://ydb.tech/docs/ru/reference/ydb-cli/commands/global-options.md?version=main).
* `options` — [параметры подкоманды](#options).

Посмотрите описание команды выполнения запроса:

```bash
ydb sql --help
```

## Параметры подкоманды {#options}

#|
|| Имя | Описание ||
|| `-h`, `--help` | Выводит общую справку по использованию команды. ||
|| `-hh` | Выводит полную справку по использованию команды. Вывод содержит некоторые специфичный команды, которых нет в выводе `--help`. ||
|| `-s`, `--script` | Текст скрипта(запроса) для выполнения. ||
|| `-f`, `--file` | Путь к файлу, содержащему текст запроса для выполнения. Путь `-` означает, что текст запроса будет прочитан из `stdin`, при этом передача параметров через `stdin` будет невозможна. ||
|| `--stats` | Режим сбора статистики.<br/>Возможные значения:<br/><ul><li>`none` (по умолчанию) — не собирать;</li><li>`basic`: Собирать обобщенную статистику по обновлениям(update) и удалениям(delete) в таблицах.</li><li>`full`: К тому, что содержит режим `basic` добавляется статистика и план выполнения запроса.</li><li>`profile`: Собирать детальную статистику выполнения, содержащую статистику по каждому отдельному таску и каналу выолнения запроса.</li></ul> ||
|| `--explain` | Выполнить explain-запрос, будет выведен логический план запроса. Сам запрос не будет выполнен, поэтому не затронет данные в базе. ||
|| `--explain-ast` | То же, что и `--explain`, но вдобавок к логическому плану выводит [AST (abstract syntax tree)](https://ru.wikipedia.org/wiki/Абстрактное_синтаксическое_дерево). Раздел с AST  содержит представление на внутреннем языке [miniKQL](https://ydb.tech/docs/ru/concepts/glossary.md?version=main#minikql). ||
|| `--explain-analyze` | Выполнить запрос в режиме `EXPLAIN ANALYZE`. Показывает план выполнения запроса. Возвращаемые в рамках запроса данные игнорируются.<br/>**Важное замечание: Запрос фактически выполняется, поэтому может внести изменения в базу**. ||
|| `--format` | Формат вывода.<br/>Возможные значения:

<!-- source: ru/reference/ydb-cli/_includes/result_format_common.md -->
* `pretty` (по умолчанию) — человекочитаемый формат;
* `json-unicode` — вывод в формате [JSON](https://ru.wikipedia.org/wiki/JSON), бинарные строки закодированы в [юникод](https://ru.wikipedia.org/wiki/Юникод), каждая строка JSON выводится в отдельной строке;
* `json-unicode-array` — вывод в формате JSON, бинарные строки закодированы в Юникод, результат выводится в виде массива строк JSON, каждая строка JSON выводится в отдельной строке;
* `json-base64` — вывод в формате JSON, бинарные строки закодированы в [Base64](https://ru.wikipedia.org/wiki/Base64), каждая строка JSON выводится в отдельной строке;
* `json-base64-array` — вывод в формате JSON, бинарные строки закодированы в Base64, результат выводится в виде массива строк JSON, каждая строка JSON выводится в отдельной строке;
* `parquet`: вывод в формате [Apache Parquet](https://parquet.apache.org/docs/).
<!-- endsource: ru/reference/ydb-cli/_includes/result_format_common.md -->

<!-- source: ru/reference/ydb-cli/_includes/result_format_csv_tsv.md -->
* `csv` — вывод в формате [CSV](https://ru.wikipedia.org/wiki/CSV);
* `tsv` — вывод в формате [TSV](https://ru.wikipedia.org/wiki/TSV).
<!-- endsource: ru/reference/ydb-cli/_includes/result_format_csv_tsv.md -->

||
|#

### Работа с параметризованными запросами {#parameterized-query}

Подробное описание работы с параметрами с примерами смотрите в статье [Выполнение параметризованных запросов](https://ydb.tech/docs/ru/reference/ydb-cli/parameterized-query-execution.md?version=main).

## Примеры {#examples}

<!-- source: ru/_includes/ydb-cli-profile.md -->
{% note info %}

В примерах используется профиль `quickstart`, подробнее смотрите в [Создание профиля для соединения с тестовой БД](https://ydb.tech/docs/ru/reference/ydb-cli/profile/create.md?version=main#quickstart).

{% endnote %}
<!-- endsource: ru/_includes/ydb-cli-profile.md -->

Совместное выполнение DDL + DML в одном запросе не поддерживается.

```bash
# Создание таблицы
ydb -p quickstart sql -s '
  CREATE TABLE series (
    series_id Uint64,
    title Utf8,
    series_info Utf8,
    release_date Date,
    PRIMARY KEY (series_id)
  );
'

# Заполнение данными и получение выборки
ydb -p quickstart sql -s '
    UPSERT INTO series (series_id, title, series_info, release_date) 
    VALUES (1, "Title1", "Info1", Cast("2023-04-20" as Date));
    SELECT * FROM series;
'

# Добавление индекса
ydb -p quickstart sql -s '
    ALTER TABLE series 
    ADD INDEX title_idx GLOBAL ON (title);
'
```

Вывод команды:

```text
┌──────────────┬───────────┬─────────────┬──────────┐
| release_date | series_id | series_info | title    |
├──────────────┼───────────┼─────────────┼──────────┤
| "2023-04-20" | 1         | "Info1"     | "Title1" |
└──────────────┴───────────┴─────────────┴──────────┘
```

Для выполнения запроса из файла (например, script1.yql) с выводом в формате JSON

```bash
ydb -p quickstart sql -f script1.yql --format json-unicode
```

Вывод команды:

```text
{"release_date":"2023-04-20","series_id":1,"series_info":"Info1","title":"Title1"}
```

Примеры передачи параметров в скрипты приведены в [статье о передаче параметров в команды исполнения запросов](https://ydb.tech/docs/ru/reference/ydb-cli/parameterized-query-execution.md?version=main).