diff --git a/docs/sql/queries.md b/docs/sql/queries.md index 7e6ba2a476013930722be4df2f9dded4191b3a84..03a67d0992362fe6d593b9be96e6929ed70febe7 100644 --- a/docs/sql/queries.md +++ b/docs/sql/queries.md @@ -9,8 +9,7 @@ Picodata при работе Ñ Ñ€Ð°Ñпределенной СУБД. [ÑозданиÑ](#create_table) и [удалениÑ](#drop_table) [таблиц](../glossary.md#table); - Data Modification Language (`DML`): команды [`INSERT`](#insert) Ð´Ð»Ñ - добавлениÑ, [`DELETE`](#delete) Ð´Ð»Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð¸ [`UPDATE`](#update) Ð´Ð»Ñ - Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ…; + Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… в таблицы и [`DELETE`](#delete) Ð´Ð»Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ…; - Data Query Language (`DQL`): команда [`SELECT`](#select) Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… из таблиц; - команда [`EXPLAIN`](#explain) Ð´Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð»Ð°Ð½Ð¾Ð² запроÑов `DML` и @@ -34,16 +33,61 @@ Picodata при работе Ñ Ñ€Ð°Ñпределенной СУБД. команд Ñ Ð¿Ñ€Ð¸Ð¼ÐµÑ€Ð°Ð¼Ð¸ их выполнениÑ. ## Ðачало работы {: #getting-started } -Ð”Ð»Ñ Ð²Ð²Ð¾Ð´Ð° команд SQL требуетÑÑ Ð¸Ð½Ñ‚ÐµÑ€Ð°ÐºÑ‚Ð¸Ð²Ð½Ð°Ñ ÐºÐ¾Ð½Ñоль -Picodata. Она доÑтупна поÑле [запуÑка](../cli.md#run-command) инÑтанÑа Ñ -ключом `-i` или Ñвного [подключениÑ](../cli.md#connect-command) к нему. -СинтакÑÐ¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´ учитывает оÑобенноÑти Lua-интерпретатора конÑоли и -предполагает, что любой SQL-Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ ÑодержатьÑÑ Ð² обертке -Ñледующего вида: +Ð”Ð»Ñ Ð²Ð²Ð¾Ð´Ð° команд SQL требуетÑÑ Ð¸Ð½Ñ‚ÐµÑ€Ð°ÐºÑ‚Ð¸Ð²Ð½Ð°Ñ ÐºÐ¾Ð½Ñоль Picodata. Она +доÑтупна поÑле [запуÑка](../cli.md#run-command) инÑтанÑа Ñ ÐºÐ»ÑŽÑ‡Ð¾Ð¼ `-i` +или Ñвного [подключениÑ](../cli.md#connect-command) к нему из отдельного +терминала. +### ДоÑтупные Ñзыки конÑоли {: #available_langs } +Ð”Ð»Ñ Ð²Ð²Ð¾Ð´Ð° команд можно иÑпользовать доÑтупные Ñзыки конÑоли: + +- Ñзык `sql` позволÑет пиÑать запроÑÑ‹ непоÑредÑтвенно на Ñзыке SQL; +- Ñзык `lua` предполагает, что SQL-Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð±ÑƒÐ´ÐµÑ‚ находитьÑÑ Ð²Ð½ÑƒÑ‚Ñ€Ð¸ дополнительных Ñлементов Lua-обертки. + +Дополнительно Ñтоит отметить, что Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ [параметризированных запроÑов](#parametric-queries) подойдет только Ñзык Lua. + +### Переключение Ñзыков конÑоли {: #switching_langs } +Ð”Ð»Ñ ÑƒÑтановки Ñзыка SQL: +```lua +\set language sql ``` -pico.sql([[запроÑ]], {Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¿ÐµÑ€ÐµÐ´Ð°Ð²Ð°ÐµÐ¼Ñ‹Ñ… параметров}) +Ð”Ð»Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾Ñти вводить многоÑтрочные (и легче читаемые) запроÑÑ‹, Ñледует задать разделитель команд: +```lua +\set delimeter ; ``` +Указанный в Ñтом примере разделитель (`;`) иÑпользуетÑÑ Ð´Ð°Ð»ÐµÐµ в Ñтом Ñправочнике в примерах команд. + +Ð”Ð»Ñ ÑƒÑтановки Ñзыка Lua: +```lua +\set language lua +``` + +Ð’ Ñтом Ñлучае SQL-Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ передаватьÑÑ Ð² качеÑтве Ñодержимого +функции `pico.sql()`. Тело запроÑа Ñледует указать внутри Ñкобок. Ð”Ð»Ñ +Ñзыка Lua обÑзательно иÑпользование блока фигурных Ñкобок поÑле запроÑа. +Внутри фигурных Ñкобок опционально указываютÑÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ñ‹ значений: + +``` +"запроÑ", {Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¿ÐµÑ€ÐµÐ´Ð°Ð²Ð°ÐµÐ¼Ñ‹Ñ… параметров} +``` + +Дополнительно, как показано в примерах данного раздела, можно заключить +Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð² парные квадратные Ñкобки Ñ Ñ‚ÐµÐ¼, чтобы не иÑпользовать +Ñкранирование кавычек: + +``` +[[запроÑ]], {Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¿ÐµÑ€ÐµÐ´Ð°Ð²Ð°ÐµÐ¼Ñ‹Ñ… параметров} +``` + +ЕÑли передаваемых параметров нет, Ñодержимое фигурных Ñкобок оÑтаетÑÑ +пуÑтым. Пример команды: + +```lua +pico.sql([[select * from "characters"]], {}) +``` +Далее приведены команды Ñ Ð¾Ð±ÑŠÑÑнением их дейÑтвиÑ. Ð”Ð»Ñ Ð±Ð¾Ð»ÑŒÑˆÐ¸Ð½Ñтва +примеров иÑпользуетÑÑ Ñзык конÑоли SQL кроме тех Ñлучаев, когда +иÑпользование ввода на Lua предпочтительнее. ## Создание таблицы {: #create_table } @@ -73,16 +117,15 @@ pico.sql([[запроÑ]], {Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¿ÐµÑ€ÐµÐ´Ð°Ð²Ð°ÐµÐ¼Ñ‹Ñ… парам Создадим первую таблицу Ñледующей командой: -``` -pico.sql([[ - create table "characters" ( - "id" integer, - "name" text not null, - "year" integer, - primary key ("id") - ) using memtx distributed by ("id") - option (timeout = 3.0) -]]) +```sql +create table "characters" ( + "id" integer, + "name" text not null, + "year" integer, + primary key ("id") +) +using memtx distributed by ("id") +option (timeout = 3.0) ; ``` Ð”Ð»Ñ Ð²Ñ‚Ð¾Ñ€Ð¾Ð¹ таблицы команда будет отличатьÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ именем третьей колонки. @@ -102,10 +145,8 @@ Cхема запроÑа Ð´Ð»Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹ показана Пример ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹: -``` -pico.sql([[ - drop table "characters" -]]) +```sql +drop table "characters" ; ``` ## Ð—Ð°Ð¿Ñ€Ð¾Ñ SELECT {: #select } @@ -129,8 +170,8 @@ Cхема возможных раÑпределенных запроÑов `SELE Пример Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… вÑей таблицы: -``` -pico.sql([[select * from "characters"]], {}) +```sql +select * from "characters" ; ``` Вывод в конÑоль: @@ -158,15 +199,18 @@ pico.sql([[select * from "characters"]], {}) _Примечание_: Ñтроки в выводе идут в том порÑдке, в каком их отдают узлы Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Picodata. +### Параметризированные запроÑÑ‹ {: #parametric-queries } + Ð’ читающих запроÑах Ñ ÑƒÑловиÑми можно иÑпользовать как обычный вид, так -и параметризированный. Ðапример, Ñледующие две команды дадут одинаковый -результат (вывод Ñтроки по извеÑтному `id`): +и параметризированный. Ð’ поÑледнем Ñлучае потребуетÑÑ Ñначала +[переключить](#switching_langs) Ñзык конÑоли на Lua. Так, Ñледующие две +команды дадут одинаковый результат (вывод Ñтроки по извеÑтному `id`). : -``` -pico.sql([[select "name" from "characters" where "id" = 1]], {}) +```sql +select "name" from "characters" where "id" = 1 ; ``` -``` +```lua pico.sql([[select "name" from "characters" where "id" = ?]], {1}) ``` @@ -191,11 +235,11 @@ from "characters" where "id" = ?`), и еÑли подобных запроÑо Пример вывода Ñтрок по неÑкольким уÑловиÑм Ð´Ð»Ñ Ñ€Ð°Ð·Ð½Ñ‹Ñ… Ñтолбцов (также два варианта): -``` -pico.sql([[select "name","year" from "characters" where "id" > 3 and "year" > 2000 ]], {}) +```sql +select "name","year" from "characters" where "id" > 3 and "year" > 2000 ; ``` -``` +```lua pico.sql([[select "name","year" from "characters" where "id" > ? and "year" > ? ]], {3, 2000}) ``` @@ -223,7 +267,7 @@ pico.sql([[select "name","year" from "characters" where "id" > ? and "year" > ? ÑущноÑÑ‚ÑŒ и может включать как проÑтое указание на таблицу, так и конÑтрукцию из разных уÑловий. -### Параметризированные запроÑÑ‹ {: #parametric-queries } + ### **values**  @@ -260,8 +304,8 @@ pico.sql([[select "name","year" from "characters" where "id" > ? and "year" > ? Пример подÑчета общего чиÑла товаров на Ñкладе: -``` -pico.sql([[select sum("stock") from "assets"]], {}) +```sql +select sum("stock") from "assets" ; ``` Вывод в конÑоль: @@ -277,8 +321,8 @@ pico.sql([[select sum("stock") from "assets"]], {}) Пример Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñ‚ÐµÐºÑта к значениÑм в колонке: -``` -pico.sql([[select group_concat("name",' character, ') from "characters"]], {}) +```sql +select group_concat("name",' character, ') from "characters" ; ``` Вывод в конÑоль: @@ -303,8 +347,8 @@ pico.sql([[select group_concat("name",' character, ') from "characters"]], {}) более Ñтолбцов. Ðапример, Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ команды ниже можно выÑÑнить название игрушки, Ð·Ð½Ð°Ñ ÐµÐµ количеÑтво на Ñкладе: -``` -pico.sql([[select "name" from "assets" where ("stock") in (values (2561))]], {}) +```sql +select "name" from "assets" where ("stock") in (values (2561)) ; ``` Вывод в конÑоль: @@ -328,15 +372,13 @@ pico.sql([[select "name" from "assets" where ("stock") in (values (2561))]], {}) перÑонажами 1995 года, а также вÑе игрушки, оÑтатки которых на Ñкладе превышают 1000 штук: -``` -pico.sql([[ - select "name" - from "characters" - where "year" = 1995 - union all - select "name" from "assets" - where "stock" > 1000 -]], {}) +```sql +select "name" +from "characters" +where "year" = 1995 +union all +select "name" from "assets" +where "stock" > 1000 ; ``` Вывод в конÑоль: @@ -369,8 +411,13 @@ pico.sql([[ Ðа Ñтот раз нужно получить ÑпиÑок игрушек Ñ Ð¿ÐµÑ€Ñонажами 1995 года, но только еÑли их запаÑÑ‹ меньше 1000 штук: -``` -pico.sql([[select "name" from "characters" where "year" = 1995 except select "name" from "assets" where "stock" > 1000]], {}) +```sql +select "name" +from "characters" +where "year" = 1995 +except select "name" +from "assets" +where "stock" > 1000 ; ``` Вывод в конÑоль: @@ -395,8 +442,8 @@ pico.sql([[select "name" from "characters" where "year" = 1995 except select "n Пример Ð´Ð»Ñ Ð²Ñ‹Ð²Ð¾Ð´Ð° Ñтолбцы таблицы: -``` -pico.sql([[select "score" as "Total_score" from "scoring"]], {}) +```sql +select "score" as "Total_score" from "scoring" ; --- - metadata: - {'name': 'Total_score', 'type': 'decimal'} @@ -409,8 +456,8 @@ pico.sql([[select "score" as "Total_score" from "scoring"]], {}) Пример Ð´Ð»Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸ `CAST()`: -``` -pico.sql([[select sum(cast("score" as int)) as "_Total_score_1" from "scoring"]], {}) +```sql +select sum(cast("score" as int)) as "_Total_score_1" from "scoring" ; --- - metadata: - {'name': '_Total_score_1', 'type': 'decimal'} @@ -436,16 +483,13 @@ pico.sql([[select sum(cast("score" as int)) as "_Total_score_1" from "scoring"]] Команда: -``` -pico.sql([[ - select - "id","name","stock","year" - from "characters" - join ( - select "id" as "number","stock" from "assets" - ) as stock - on "characters"."id" = stock."number" -]], {}) +```sql +select "id","name","stock","year" +from "characters" +join ( +select "id" as "number","stock" from "assets" +) as stock +on "characters"."id" = stock."number" ; ``` Вывод в конÑоль: @@ -477,19 +521,17 @@ pico.sql([[ автоматичеÑкие имена колонок в результирующей таблице на ÑобÑтвенные. Пример: -``` -pico.sql([[ - select - "id" as "id1", - "name" as "name1", - "stock" as "stock1", - "year" as "year1" - from "characters" - join ( - select "id" as "number", "stock" from "assets" - ) as stock - on "characters"."id" = stock."number" -]], {}) +```sql +select + "id" as "id1", + "name" as "name1", + "stock" as "stock1", + "year" as "year1" +from "characters" +join ( + select "id" as "number", "stock" from "assets" +) as stock +on "characters"."id" = stock."number" ; ``` Вывод в конÑоль: @@ -556,8 +598,8 @@ SELECT-запроÑах. С ее помощью можно преобразов Ð’ обычном виде Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ñтолбца `score` имеют дробную чаÑÑ‚ÑŒ и определены в Ñхеме данных типом `decimal`: -``` -pico.sql([[select "score" from "scoring"]], {}) +```sql +select "score" from "scoring" ; --- 'metadata': [ {'name': 'score', 'type': 'decimal'}], @@ -570,8 +612,8 @@ pico.sql([[select "score" from "scoring"]], {}) ``` Преобразуем Ñти чиÑла в `int`: -``` -pico.sql([[select cast("score" as int) from "scoring"]], {}) +```sql +select cast("score" as int) from "scoring" ; --- 'metadata': [ {'name': 'COL_1', 'type': 'integer'}], @@ -611,8 +653,8 @@ pico.sql([[select cast("score" as int) from "scoring"]], {}) ### Пример иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ {: #tuple-limit-example } -``` -pico.sql([[select * from "characters" option(sql_vdbe_max_steps = 55, vtable_max_rows = 10)]], {}) +```sql +select * from "characters" option(sql_vdbe_max_steps = 55, vtable_max_rows = 10) ; --- - metadata: - {'name': 'id', 'type': 'integer'} @@ -665,20 +707,27 @@ pico.sql([[select * from "characters" option(sql_vdbe_max_steps = 55, vtable_max ### Примеры запроÑов {: #insert-examples } ЗапиÑÑŒ Ñтроки данных в таблицу командой `INSERT` возможна как в обычном -виде, так и в параметризированном. Пример параметризированной вÑтавки -Ñтроки значений в таблицу: +виде, так и в параметризированном (потребуетÑÑ +[переключить](#switching_langs) Ñзык конÑоли на Lua). Пример +параметризированной вÑтавки Ñтроки значений в таблицу: -``` +```lua pico.sql([[insert into "assets" ("id", "name", "stock") values (?, ?, ?)]], {1, "Woody", 2561}) ``` ЕÑли вÑтавлÑÐµÐ¼Ð°Ñ Ñтрока точно Ñодержит Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð²Ñех Ñтолбцов, то их -можно Ñвно не указывать: +можно Ñвно не указывать. -``` +Пример Ð´Ð»Ñ Lua: +```lua pico.sql([[insert into "assets" values (1, 'Woody', 2561)]], {}) ``` +Пример Ð´Ð»Ñ SQL: +```sql +insert into "assets" values (1, 'Woody', 2561) ; +``` + ÐŸÐ°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ð¹ при `INSERT` влиÑет на тип данных при выполнении запроÑа. Так, в обычном виде дробные чиÑла конвертируютÑÑ Ð² чиÑла Ñ Ñ„Ð¸ÐºÑированной запÑтой (например, `values(2.5)` в `decimal 2.5`). Ð’ @@ -690,7 +739,7 @@ pico.sql([[insert into "assets" values (1, 'Woody', 2561)]], {}) кеширование подзапроÑа, поÑтому его тоже имеет ÑмыÑл параметризировать, чтобы выиграть в ÑкороÑти при выполнении поÑледующих подобных запроÑов: -``` +```lua pico.sql([[insert into "assets" select * from "assets2" where "id2" = ?]], {11} ``` @@ -707,8 +756,8 @@ pico.sql([[insert into "assets" select * from "assets2" where "id2" = ?]], {11} Ð’ некоторых ÑлучаÑÑ… вÑтавка Ñтроки может вернуть ошибку, например, при попытке вÑтавить Ñтроку Ñ ÑƒÐ¶Ðµ ÑущеÑтвующим индекÑом: -``` -pico.sql([[insert into "characters" ("id", "name", "year") values (10, 'Duke Caboom', 2019)]], {}) +```sql +insert into "characters" ("id", "name", "year") values (10, 'Duke Caboom', 2019) ; --- - null - 'sbroad: Lua error (IR dispatch): LuaError(ExecutionError("sbroad: failed to create @@ -749,12 +798,10 @@ pico.sql([[insert into "characters" ("id", "name", "year") values (10, 'Duke Cab ЕÑли параметр `on conflict` не указан, то по умолчанию иÑпользуетÑÑ Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ðµ `do fail`. -``` -pico.sql([[ - insert into "characters" ("id", "name", "year") - values (10, 'Duke Caboom', 2019) - on conflict do nothing -]], {}) +```sql +insert into "characters" ("id", "name", "year") +values (10, 'Duke Caboom', 2019) +on conflict do nothing ; --- - row_count: 0 ... @@ -762,12 +809,10 @@ pico.sql([[ Ð”Ð»Ñ ÑƒÑпешной вÑтавки (замены Ñтроки) Ñледует иÑпользовать вариант `do replace`: -``` -pico.sql([[ - insert into "characters" ("id", "name", "year") - values (10, 'Duke Caboom', 2019) - on conflict do replace -]], {}) +```sql +insert into "characters" ("id", "name", "year") +values (10, 'Duke Caboom', 2019) +on conflict do replace ; --- - row_count: 1 ... @@ -844,13 +889,13 @@ pico.sql([[update "characters" set "name" = "item" from (select "id" as i, "name ПроÑтой Ð·Ð°Ð¿Ñ€Ð¾Ñ ÑƒÐ´Ð°Ð»Ñет вÑе данные из указанной таблицы: ```sql -picodata> pico.sql([[delete from "characters"]], {}) +delete from "characters" ; ``` Ð—Ð°Ð¿Ñ€Ð¾Ñ Ñ ÑƒÑловием позволÑет удалить только нужные Ñтроки: ```sql -picodata> pico.sql([[delete from "characters" where "id" = 1]], {}) +delete from "characters" where "id" = 1 ; ``` Ð’ обоих ÑлучаÑÑ… в выводе в конÑоль будет указано количеÑтво удаленных @@ -885,8 +930,8 @@ nothing`. ### ПроÑтые запроÑÑ‹ {: #basic-explain } Ð”Ð»Ñ Ð½Ð°Ñ‡Ð°Ð»Ð° раÑÑмотрим план проÑтого запроÑа на получение данных одного Ñтолбца таблицы: -``` -pico.sql([[explain select "score" from "scoring"]], {}) +```sql +explain select "score" from "scoring" ; ``` Вывод в конÑоль: @@ -906,8 +951,8 @@ pico.sql([[explain select "score" from "scoring"]], {}) ЕÑли в запроÑе еÑÑ‚ÑŒ уÑловие (`where`), то в план добавлÑетÑÑ ÑƒÐ·ÐµÐ» `selection`: -``` -pico.sql([[explain select "score" from "scoring" where "score" > 70]], {}) +```sql +explain select "score" from "scoring" where "score" > 70 ; ``` Вывод в конÑоль: @@ -929,15 +974,13 @@ pico.sql([[explain select "score" from "scoring" where "score" > 70]], {}) ### Ð—Ð°Ð¿Ñ€Ð¾Ñ Ñ Ð½ÐµÑколькими проекциÑми {: #multi-projection-explain } Пример поÑÑ‚Ñ€Ð¾ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾ÐµÐºÑ†Ð¸Ð¸ из более Ñложного запроÑа: -``` -pico.sql([[ - explain select - "id","name" - from "characters" - except select - "id","name" from "assets" - where "stock" > 1000 -]], {}) +```sql +explain select + "id","name" +from "characters" +except select + "id","name" from "assets" +where "stock" > 1000 ; ``` Вывод в конÑоль: @@ -1008,8 +1051,8 @@ pico.sql([[ **Ð›Ð¾ÐºÐ°Ð»ÑŒÐ½Ð°Ñ Ð²Ñтавка** характерна Ð´Ð»Ñ `INSERT` Ñ Ð¿ÐµÑ€ÐµÐ´Ð°Ñ‡ÐµÐ¹ Ñтроки значений: -``` -pico.sql([[explain insert into "assets" values (1, 'Woody', 2561)]], {}) +```sql +explain insert into "assets" values (1, 'Woody', 2561) ; ``` Вывод в конÑоль: @@ -1029,8 +1072,8 @@ pico.sql([[explain insert into "assets" values (1, 'Woody', 2561)]], {}) требуетÑÑ (Ñм. [подробнее](broadcasted_sql.md#data-distribution)). Примером может Ñлужить удаление данных из таблицы: -``` -picodata> pico.sql([[explain delete from "characters" where "id" = 1]], {}) +```sql +explain delete from "characters" where "id" = 1 ; ``` Вывод в конÑоль: @@ -1075,8 +1118,8 @@ picodata> pico.sql([[explain update "characters" set "year" = 2010]], {}) Пример `INSERT` Ñо вÑтавкой из читающего запроÑа другой таблицы, у которой отличаетÑÑ ÐºÐ»ÑŽÑ‡ шардированиÑ: -``` -pico.sql([[explain insert into "assets" select * from "assets3" where "id3" = 1]], {}) +```sql +explain insert into "assets" select * from "assets3" where "id3" = 1 ; ``` Вывод в конÑоль: @@ -1093,16 +1136,14 @@ pico.sql([[explain insert into "assets" select * from "assets3" where "id3" = 1] Пример `JOIN` двух таблиц Ñ Ñ€Ð°Ð·Ð½Ñ‹Ð¼Ð¸ ключами шардированиÑ: -``` -pico.sql([[ - explain select - "id","name" - from "assets" - join ( - select "id3","name3" from "assets3" - ) as "new_assets" - on "assets"."id" = "new_assets"."id3" -]], {}) +```sql +explain select + "id","name" +from "assets" +join ( + select "id3","name3" from "assets3" + ) as "new_assets" +on "assets"."id" = "new_assets"."id3" ; ``` Вывод в конÑоль: @@ -1153,16 +1194,14 @@ picodata> pico.sql([[explain update "characters" set "name" = 'Etch', "year" = 2 Пример `JOIN` Ñ ÑоединениÑм не по колонкам ÑˆÐ°Ñ€Ð´Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð»Ñ Ð¾Ð±ÐµÐ¸Ñ… таблиц: -``` -pico.sql([[ - explain select - "id","name","stock","year" - from "characters" - join ( - select "id" as "number","stock" from "assets" - ) as stock - on "characters"."id" = stock."number" -]], {}) +```sql +explain select + "id","name","stock","year" +from "characters" +join ( + select "id" as "number","stock" from "assets" +) as stock +on "characters"."id" = stock."number" ; ``` Вывод в конÑоль: @@ -1192,8 +1231,8 @@ pico.sql([[ Пример Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð°Ð³Ñ€ÐµÐ³Ð°Ñ‚Ð½Ð¾Ð¹ функции. -``` -pico.sql([[explain select count("id") from "characters"]], {}) +```sql +explain select count("id") from "characters" ; ``` Вывод в конÑоль: