やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

SQLite3構文 expression(is 句)

 =とほぼ同じだが左右にNULLがあるときでもNULLでなく真偽値を返す。

成果物

構文

``sql x is y

# 例

select NULL=1; select 1=NULL; select NULL=NULL;

 上記はすべて`NULL`が返されてしまう。以下は真偽値が返る。

select NULL is 1; select 1 is NULL; select NULL is NULL;




0 0 1

 `not`で反転できる。`!=`とは否定句の位置が違うのがウザい。

select NULL is not 1; select 1 is not NULL; select NULL is not NULL;




1 1 0

# 所感

 やはり`NULL`は複雑化するだけでデメリットのほうが大きい。`NULL`のためだけに`=`から`is`に切り替えなければならないとか……ないわ。100億ドルの損失だわ。って言いたかっただけ。

# 対象環境

* <time datetime="2019-09-05T12:38:39+0900" title="実施日">2019-09-05</time>
* [Raspbierry pi](https://ja.wikipedia.org/wiki/Raspberry_Pi) 3 Model B+
* [Raspbian stretch](https://ja.wikipedia.org/wiki/Raspbian) 9.0 2018-11-13
* [bash](https://ja.wikipedia.org/wiki/Bash) 4.4.12(1)-release
* [SQLite 3.29.0](http://ytyaru.hatenablog.com/entry/2021/06/28/000000)
* [MeCab](http://ytyaru.hatenablog.com/entry/2021/02/21/000000) 0.996[ユーザ辞書](http://ytyaru.hatenablog.com/entry/2021/03/19/000000)

$ uname -a Linux raspberrypi 4.19.42-v7+ #1218 SMP Tue May 14 00:48:17 BST 2019 armv7l GNU/Linux

# 前回まで

* [SQLite3学習 俯瞰まとめ](http://ytyaru.hatenablog.com/entry/2021/05/26/000000)
* [SQLite3学習 環境構築まとめ](http://ytyaru.hatenablog.com/entry/2021/05/25/000000)
* [SQLite3学習 インタフェースまとめ(C言語、CLI、対話モード、Tcl...)](http://ytyaru.hatenablog.com/entry/2021/05/24/000000)
* [SQLite3学習 ドットコマンドまとめ](http://ytyaru.hatenablog.com/entry/2021/05/21/000000)
* [SQLite3学習 JSON拡張まとめ](http://ytyaru.hatenablog.com/entry/2021/05/22/000000)
* [SQLite3学習 FTSまとめ(ICU, MeCab)](http://ytyaru.hatenablog.com/entry/2021/05/23/000000)
* [SQLite3学習 再帰クエリ(WITH RECURSIVE)](http://ytyaru.hatenablog.com/entry/2021/02/27/000000)
* [SQLite3学習 R-Treeモジュール](http://ytyaru.hatenablog.com/entry/2021/02/28/000000)
* [SQLite3学習 Geopoly(2次元ベクタ画像の生成)](http://ytyaru.hatenablog.com/entry/2021/05/28/000000)
* [SQLite3学習 拡張関数(generate_series)](http://ytyaru.hatenablog.com/entry/2021/03/02/000000)
* [SQLite3学習 拡張ライブラリ数学関数(extension-functions.c)](http://ytyaru.hatenablog.com/entry/2021/05/27/000000)
* [SQLite3学習 謎と名前](http://ytyaru.hatenablog.com/entry/2021/05/29/000000)
* [SQL文の分類(DDL,DML,TCL,DCL)](http://ytyaru.hatenablog.com/entry/2021/06/11/000000)
* [SQL構文 alter(rename)](http://ytyaru.hatenablog.com/entry/2021/05/31/000000)
* [SQL構文 alter(add column)概要](http://ytyaru.hatenablog.com/entry/2021/06/01/000000)
* [SQL構文 alter(add column)制約](http://ytyaru.hatenablog.com/entry/2021/06/02/000000)
* [SQL構文 alter(add column)sqlite_master変更しても反映されない](http://ytyaru.hatenablog.com/entry/2021/06/03/000000)
* [SQL構文 alter(add column)スキーマ再定義(テーブル再作成による定義変更)](http://ytyaru.hatenablog.com/entry/2021/06/04/000000)
* [SQL構文 analyze](http://ytyaru.hatenablog.com/entry/2021/06/07/000000)
* [SQL構文 attach/detach](http://ytyaru.hatenablog.com/entry/2021/06/08/000000)
* [SQLite3構文 begin,end,commit,rollback,savepoint(deferred,immediate,exclusive)](http://ytyaru.hatenablog.com/entry/2021/06/09/000000)
* [SQLite3構文 コメント](http://ytyaru.hatenablog.com/entry/2021/06/10/000000)
* [SQLite3構文 create/drop](http://ytyaru.hatenablog.com/entry/2021/06/12/000000)
* [SQLite3構文 index(create/drop)](http://ytyaru.hatenablog.com/entry/2021/06/13/000000)
* [SQLite3構文 table(create/drop)](http://ytyaru.hatenablog.com/entry/2021/06/14/000000)
* [SQLite3構文 列制約(default)](http://ytyaru.hatenablog.com/entry/2021/06/15/000000)
* [SQLite3構文 列制約(collate)](http://ytyaru.hatenablog.com/entry/2021/06/16/000000)
* [SQLite3構文 列制約(primary key)](http://ytyaru.hatenablog.com/entry/2021/06/17/000000)
* [SQLite3構文 列制約(primary key)ベストプラクティス](http://ytyaru.hatenablog.com/entry/2021/06/18/000000)
* [SQLite3構文 列制約(unique)](http://ytyaru.hatenablog.com/entry/2021/06/19/000000)
* [SQLite3構文 列制約(not null)](http://ytyaru.hatenablog.com/entry/2021/06/20/000000)
* [SQLite3構文 列制約(check)](http://ytyaru.hatenablog.com/entry/2021/06/21/000000)
* [SQLite3構文 列制約(foreign key references)](http://ytyaru.hatenablog.com/entry/2021/06/22/000000)
* [SQLite3構文 表制約(primary key, unique, check, foreign key)](http://ytyaru.hatenablog.com/entry/2021/06/23/000000)
* [SQLite3でメタデータを取得する方法(DB名(スキーマ名)、テーブル名、列名、制約)](http://ytyaru.hatenablog.com/entry/2021/06/24/000000)
* [SQLite3でTEMPの保存先を指定する](http://ytyaru.hatenablog.com/entry/2021/06/25/000000)
* [SQLite3構文 delete](http://ytyaru.hatenablog.com/entry/2021/06/26/000000)
* [SQLite3ビルド失敗(SQLITE_ENABLE_UPDATE_DELETE_LIMIT)](http://ytyaru.hatenablog.com/entry/2021/06/27/000000)
* [SQLite3をソースからビルドする(SQLITE_ENABLE_UPDATE_DELETE_LIMIT)](http://ytyaru.hatenablog.com/entry/2021/06/28/000000)
* [SQLite3構文 delete(limit offset, order by)](http://ytyaru.hatenablog.com/entry/2021/06/29/000000)
* [SQLite3クエリプランニング(インデックスの働き)](http://ytyaru.hatenablog.com/entry/2021/06/30/000000)
* [SQLite3構文 explain](http://ytyaru.hatenablog.com/entry/2021/07/01/000000)
* [SQLite構文 expression](http://ytyaru.hatenablog.com/entry/2021/07/02/000000)
* [SQLite構文 expression(リテラル)](http://ytyaru.hatenablog.com/entry/2021/07/03/000000)
* [SQLite構文 expression(パラメータ)](http://ytyaru.hatenablog.com/entry/2021/07/06/000000)
* [SQLite構文 expression(演算子)](http://ytyaru.hatenablog.com/entry/2021/07/04/000000)
* [SQLite構文 expression(in 句)](http://ytyaru.hatenablog.com/entry/2021/07/05/000000)
* [SQLite構文 expression(like 句)](http://ytyaru.hatenablog.com/entry/2021/07/07/000000)
* [SQLite構文 expression(glob 句)](http://ytyaru.hatenablog.com/entry/2021/07/08/000000)
* [SQLite構文 expression(regexp 句)](http://ytyaru.hatenablog.com/entry/2021/07/10/000000)
* [SQLite構文 expression(match 句)](http://ytyaru.hatenablog.com/entry/2021/07/11/000000)