values()構文をみつけたが、資料が見つからない。なにこれ?
成果物
values()
sqlite3 :memory: "values(1,'A')"
1|A
たまたま発見したvalues()
。これ、一体何者?
関数一覧に出てこない
sqlite3 :memory: "pragma function_list;" | grep values
使ってみる
ターミナルで以下コマンド実行。
sqlite3
対話モードにて色々やってみる。
.headers on .mode column
表を返すものである
values(1);
column1 ---------- 1
values(1,'A');
column1 column2 ---------- ---------- 1 A
values(1,'A') union values(2,'B');
column1 column2 ---------- ---------- 1 A 2 B
列名を変更する
select column1 as id, column2 as name from (values(1,'A') union values(2,'B'));
id name ---------- ---------- 1 A 2 B
型をもっている
select typeof((values(1)));
typeof((values(1))) ------------------- integer
select typeof((values(1.2)));
typeof((values(1.2))) --------------------- real
select typeof((values('A')));
typeof((values('A'))) --------------------- text
select typeof((values(x'FF')));
typeof((values(x'FF'))) ----------------------- blob
関数ではない
select
句などを用いず、単独でvalues(1);
とすれば表を返す。このことからSQL関数ではないと思われる。
たとえば、部分文字列を取得するSQL関数substr
を使うときは、select
句内で実行せねばsyntax error
を返す。
substr('ABC',1,1);
Error: near "substr": syntax error
select substr('ABC',1,1);
substr('ABC',1,2) ----------------- AB
逆に、values()
はselect
句内で実行するとsyntax error
を返す。
select values(1);
Error: near "values": syntax error
values(1);
column1 ---------- 1
ただし、from
句では()
で囲むと成功した。副問合せと同じ扱いか。
select * from (values(1));
column1 ---------- 1
select * from (select 1 as column1);
column1 ---------- 1
select * from (select 1 as column1, 'A' as column2);
column1 column2 ---------- ---------- 1 A
select * from (select (1,'A'));
やはりこれは表を返すtable-valued function(表値関数、テーブル値関数)というヤツなのだろうか?
所感
values()
、一体何者? 説明が見つけられない。
対象環境
- Raspbierry pi 3 Model B+
- Raspbian stretch 9.0 2018-11-13
- bash 4.4.12(1)-release
- SQLite 3.29.0
$ uname -a Linux raspberrypi 4.19.42-v7+ #1218 SMP Tue May 14 00:48:17 BST 2019 armv7l GNU/Linux
前回まで
- SQLite3学習をはじめよう
- SQLite3学習 SQLiteについて
- SQLite3学習 SQLiteの適切な用途
- SQLite3学習 SQLiteの特徴
- SQLite3学習 SQLiteのクセ
- SQLite3学習 データ型とアフィニティ
- SQLite3学習 演算子の一覧
- SQLite3学習 よくある質問
- SQLite3学習 SQLiteダウンロード&コンパイル
- SQLite3学習 Tclで操作する
- SQLite3学習 ビルドオプション動作確認(SQLITE_ALLOW_URI_AUTHORITY)
- SQLite3学習 面白そうなコンパイルオプション
- SQLite3学習 SQLiteの拡張について
- SQLite3学習 JSON拡張
- SQLite3学習 JSON拡張(json_extract)
- SQLite3学習 JSON拡張(json_each)
- SQLite3学習 JSON拡張(json_tree オブジェクト→行)
- SQLite3学習 JSON拡張(json_tree オブジェクトツリー→行)
- SQLite3学習 JSON拡張(json_tree オブジェクト配列→行)
- SQLite3学習 JSON拡張(json_group_array 行→配列)
- SQLite3学習 JSON拡張(json_group_object 行→オブジェクト)
- SQLite3学習 JSON拡張(json_array_length)
- SQLite3学習 JSON拡張(json_type)
- SQLite3学習 JSON拡張(json_valid)
- SQLite3学習 JSON拡張(json_quote)
- SQLite3学習 JSON拡張(json_array)
- SQLite3学習 JSON拡張(json_object)
- SQLite3学習 JSON拡張(json_patch)
- SQLite3学習 JSON拡張(json_insert)
- SQLite3学習 JSON拡張(json_replace)
- SQLite3学習 JSON拡張(json_set)
- SQLite3学習 JSON拡張(json_remove)
- SQLite3学習 全文検索(FTS5)
- SQLite3学習 全文検索FTSを日本語で使う方法を調べてみた
- 形態素解析MeCabをインストールする
- SQLite3学習 全文検索FTS5のMeCab用トークナイザを実装する
- SQLite3学習 FTS5+MeCabでクエリ構文
- SQLite3学習 FTS5のテーブル作成と初期化
- SQLite3学習 FTS5の補助関数
- SQLite3学習 FTS5のfts5vocab仮想テーブル
- SQLite3学習 再帰クエリ(WITH RECURSIVE)
- SQLite3学習 R-Treeモジュール
- SQLite3学習 ファイル入出力(SQL集計)
- SQLite3学習 拡張関数(generate_series)
- SQLite3謎 主キーの型をintにするとinsertで値を省略したらNULLになってしまう
- SQLite3学習 入出力関数(fsdir, readfile, writefile, edit)
- SQLite3ビルド コンパイルオプションを付与する方法(CFLAGS等))
- SQLite3 コンパイルオプション確認方法(pragma compile_options)
- SQLite3ビルド ICUを有効にする(SQLITE_ENABLE_ICU)
- SQLite3拡張 ICUを動的ロードする
- SQLite3拡張 ICUでcollateする
- SQLite3拡張 ICUで全文検索する(FTS4)
- SQLite3拡張 SQL関数一覧(pragma function_list)
- SQLite3拡張 仮想テーブルモジュール一覧(pragma module_list)
- SQLite3拡張 プラグマ一覧(pragma pragma_list)