SQLite3構文 expression(in 句)
いずれかと一致するか否か。
成果物
情報源
一覧
スカラー値
整数
select 3 in (1,3,5);
1
select 4 in (1,3,5);
0
16進数表記もOK。
select 0xA in (0xA, 0xB);
1
select 0xA in (0xC, 0xB);
0
浮動少数
select 3.14 in (3.14, 3.15, 3.16);
1
select 3.14 in (3.13, 3.15);
0
後続が0
なら同値とみなす。
select 3.14 in (3.140);
1
後続が0
以外なら異なる値とみなす。
select 3.14 in (3.1401);
0
文字列
select 'A' in ('A','B');
1
select 'A' in ('C','B');
0
スペースが入っているなど1字でも違えば偽。
select 'A' in ('A ',' A');
0
大文字と小文字を区別する。
select 'A' in ('a');
0
collate
句で区別しないようにもできる。
select 'A' collate nocase in ('a');
1
バイナリ
select x'FF' in (x'00', x'FF');
1
select x'FF' in (x'00', x'11');
0
NULL
select NULL in (0, 'NULL', x'00');
あれ、空白? NULLが出力された?
公式によると以下。
左=NULL |
右にNULL 有 |
右は空セット | 右に左が有る | IN の結果 |
---|---|---|---|---|
N | N | N | N | False |
- | N | Y | N | False |
N | - | N | Y | True |
N | Y | N | N | NULL |
Y | - | N | - | NULL |
あれ、以下NYNN
パターンだけどNULL
にならず0
だよ? 公式さんの説明表まちがってない? 挙動としてはこうなって欲しいのでいいのだけど。
select 0 in (1, 'NULL', x'00');
0
select 0 in (0, 'NULL', x'00');
1
空
右が空のときは偽。
select 1 in ();
0
行値
in
の右オペランドがサブクエリのとき。
select (1,'A',x'FF') in (select 1,'A',x'FF' union select 2,'B',x'00');
1
select (1,'A',x'FF') in (select 0,'A',x'FF' union select 2,'B',x'00');
0
列数が一致しないとエラー。
select (1,'A',x'FF') in (select 1,'A',x'FF',1.2 union select 2,'B',x'00');
Error: SELECTs to the left and right of UNION do not have the same number of result columns
対象環境
- Raspbierry pi 3 Model B+
- Raspbian stretch 9.0 2018-11-13
- bash 4.4.12(1)-release
- SQLite 3.29.0
- MeCab 0.996ユーザ辞書
$ uname -a Linux raspberrypi 4.19.42-v7+ #1218 SMP Tue May 14 00:48:17 BST 2019 armv7l GNU/Linux
前回まで
- SQLite3学習 俯瞰まとめ
- SQLite3学習 環境構築まとめ
- SQLite3学習 インタフェースまとめ(C言語、CLI、対話モード、Tcl...)
- SQLite3学習 ドットコマンドまとめ
- SQLite3学習 JSON拡張まとめ
- SQLite3学習 FTSまとめ(ICU, MeCab)
- SQLite3学習 再帰クエリ(WITH RECURSIVE)
- SQLite3学習 R-Treeモジュール
- SQLite3学習 Geopoly(2次元ベクタ画像の生成)
- SQLite3学習 拡張関数(generate_series)
- SQLite3学習 拡張ライブラリ数学関数(extension-functions.c)
- SQLite3学習 謎と名前
- SQL文の分類(DDL,DML,TCL,DCL)
- SQL構文 alter(rename)
- SQL構文 alter(add column)概要
- SQL構文 alter(add column)制約
- SQL構文 alter(add column)sqlite_master変更しても反映されない
- SQL構文 alter(add column)スキーマ再定義(テーブル再作成による定義変更)
- SQL構文 analyze
- SQL構文 attach/detach
- SQLite3構文 begin,end,commit,rollback,savepoint(deferred,immediate,exclusive)
- SQLite3構文 コメント
- SQLite3構文 create/drop
- SQLite3構文 index(create/drop)
- SQLite3構文 table(create/drop)
- SQLite3構文 列制約(default)
- SQLite3構文 列制約(collate)
- SQLite3構文 列制約(primary key)
- SQLite3構文 列制約(primary key)ベストプラクティス
- SQLite3構文 列制約(unique)
- SQLite3構文 列制約(not null)
- SQLite3構文 列制約(check)
- SQLite3構文 列制約(foreign key references)
- SQLite3構文 表制約(primary key, unique, check, foreign key)
- SQLite3でメタデータを取得する方法(DB名(スキーマ名)、テーブル名、列名、制約)
- SQLite3でTEMPの保存先を指定する
- SQLite3構文 delete
- SQLite3ビルド失敗(SQLITE_ENABLE_UPDATE_DELETE_LIMIT)
- SQLite3をソースからビルドする(SQLITE_ENABLE_UPDATE_DELETE_LIMIT)
- SQLite3構文 delete(limit offset, order by)
- SQLite3クエリプランニング(インデックスの働き)
- SQLite3構文 explain
- SQLite構文 expression
- SQLite構文 expression(リテラル)
- SQLite構文 expression(演算子)