SQLのboolean型についてまとめています。
以下のサンプルSQLは、MySQL8.0.18を前提としています。
データ型booleanを使ったサンプルSQL

Oracle、MySQL、PostgreSQLではTrue/Falseを扱うデータ型Booleanが使用可能です。SQL Serverでは、同等のbit型を使うことができます。bit型は1と0を取り扱い可能です。
まずは、テスト用のテーブルboolean_testを作成しましょう。
mysql> create table boolean_test ( id varchar(4), value boolean );
Query OK, 0 rows affected (0.06 sec)
mysql> desc boolean_test;
+-------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| id | varchar(4) | YES | | NULL | |
| value | tinyint(1) | YES | | NULL | |
+-------+------------+------+-----+---------+-------+
mysql> show create table boolean_test;
+--------------+--------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+--------------+--------------------------------------------------------------------------------------------------------------------------------------+
| boolean_test | CREATE TABLE `boolean_test` (
`id` varchar(4) DEFAULT NULL,
`value` tinyint(1) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=sjis |
+--------------+--------------------------------------------------------------------------------------------------------------------------------------+mysql> insert boolean_test (id, value) values ('0001',(true));
テーブルboolean_testは、varchar(4)のidと、boolean型のvalueの2カラムで構成しています。MySQLでは、booleanはtinyint型に置き換えられます。tinyintは0と1以外の値を格納することが可能なので、厳密なboolean型を扱うには挿入・更新時に値チェックが必要になります。Oracle、PostgreSQLではboolean型が提供されています。
テーブルboolean_testに以下のデータを挿入します。
- 0001 , 1
- 0002, 0
- 0003, NULL
mysql> insert boolean_test (id, value) values ('0001',1);
Query OK, 1 row affected (0.00 sec)
mysql> insert boolean_test (id, value) values ('0002',0);
Query OK, 1 row affected (0.00 sec)
mysql> insert boolean_test (id, value) values ('0003',null);
Query OK, 1 row affected (0.01 sec)
MySQLでは、(true)は1、(false)は0として扱われます。テーブルに格納される値は以下のようになります。
mysql> select * from boolean_test; +------+-------+ | id | value | +------+-------+ | 0001 | 1 | | 0002 | 0 | | 0003 | NULL | +------+-------+
where条件で、is true、is false、is null、is not trueを指定したときの結果は以下のようになります。
mysql> select * from boolean_test where value is true; +------+-------+ | id | value | +------+-------+ | 0001 | 1 | +------+-------+ mysql> select * from boolean_test where value is false; +------+-------+ | id | value | +------+-------+ | 0002 | 0 | +------+-------+ mysql> select * from boolean_test where value is null; +------+-------+ | id | value | +------+-------+ | 0003 | NULL | +------+-------+ mysql> select * from boolean_test where value is not true; +------+-------+ | id | value | +------+-------+ | 0002 | 0 | | 0003 | NULL | +------+-------+
insert時の値には(true)と(false)が使えます。以下のSQLは、次の2つのデータを挿入したときの例です。
- 0004 , (true)
- 0005, (false)
mysql> insert boolean_test (id, value) values ('0004',(true));
Query OK, 1 row affected (0.01 sec)
mysql> insert boolean_test (id, value) values ('0005',(false));
Query OK, 1 row affected (0.03 sec)
mysql> select * from boolean_test;
+------+-------+
| id | value |
+------+-------+
| 0001 | 1 |
| 0002 | 0 |
| 0003 | NULL |
| 0004 | 1 |
| 0005 | 0 |
+------+-------+
データベースによっては、on、off、t、fなどが使えます。
まとめ


- boolean型は真(1)、偽(0)、NULLの3値を取ることができる
- データーベースによってboolean型の実装には違いがある。MySQLでは実体はtinyintとなる。
- where条件で真以外を指定するには、is not trueなどを指定し、偽とNULLを含める必要あり
- データベースによって、真偽値はtrue、falseなどが使える