CodeGym /コース /SQL SELF /論理データ型: BOOLEAN

論理データ型: BOOLEAN

SQL SELF
レベル 15, レッスン 3
使用可能

もう数字やテキストを保存するデータ型には慣れてきたよね。じゃあ次は論理データ型、つまりBOOLEANについて話そう。これはたぶん一番「正直」なデータ型で、答えは2つだけ。「はい」か「いいえ」。たまに「たぶん」(つまりNULL)もあるけどね。

論理データ型BOOLEANは、次の値しか持てないよ:

  • TRUE(真);
  • FALSE(偽);
  • NULL(値なし)。

スイッチを想像してみて。オンならTRUE、オフならFALSE、もし電球が消えたらNULLみたいな感じ。

論理データ型は、SQLで意思決定や条件分岐の基本だよ。これがなかったら、クエリでちゃんとしたフィルターも作れないし、何かのステータスも表せない。

使い方の例

論理データ型はデータベースでめっちゃ使われてる。例えばこんなケース:

フラグやステータス。

例えば、is_activeフィールドはユーザーがアクティブか(TRUE)、そうじゃないか(FALSE)を示せる。

SELECT username, is_active
FROM users 
WHERE is_active = TRUE;

進捗管理。

例えば、is_completeフィールドはタスクが終わったかどうかを保存できる。

SELECT task_name
FROM tasks 
WHERE is_complete = FALSE;

在庫チェック。

is_availableフィールドは商品が在庫にあるかどうかを表せる。

PostgreSQLでBOOLEANをどう使う?

PostgreSQLの論理データ型はシンプルにBOOLEANって名前。じゃあテーブルを作って、いくつかカラムを追加してみよう:

  • タスクのユニークID
  • タスク名
  • タスク完了の論理ステータス

次に、テーブルにいくつかレコードを追加してみるよ:

task_id task_name - VARCHAR(255) is_complete - BOOLEAN
1 レポートを書く false
2 買い物に行く true
3 本を読む null

データの取得

じゃあ、論理値を使ってデータを取り出す方法を見てみよう。例えば、未完了のタスクだけ取得したいなら:

SELECT task_name
FROM tasks 
WHERE is_complete = FALSE;

このクエリはis_completeがFALSEのタスクだけ返すよ。

結果:

task_name
レポートを書く

BOOLEANの使い方のコツ

値のフィルタリング

論理型を使うときは、こんな書き方ができるよ:

  • = TRUE — 値が真のときに明示的に指定したい場合。
  • = FALSE — 偽の値を選びたい場合。
  • IS NULL — 値がないレコードを選びたい場合。

例:

SELECT task_name
FROM tasks 
WHERE is_complete IS NULL;

条件の簡略化

PostgreSQLはけっこう「賢い」から、= TRUEって書かなくてもOKなことが多い。例えば:

SELECT task_name
FROM tasks 
WHERE is_complete;

このクエリはWHERE is_complete = TRUEと同じ意味だよ。

BOOLEANでよくあるミス

新しいデータ型を使い始めると、ミスはつきもの。よくあるトラブルをいくつか紹介するね:

NULLとの比較。 初心者はよくis_active = NULLって書いちゃう。でもNULLは=で比較できない。値がNULLかどうかはIS NULLやIS NOT NULLを使おう。

= TRUEの明示。 たまにプログラマーがWHERE is_active = TRUEみたいに余計な構文を追加しがち。間違いじゃないけど、WHERE is_activeだけで十分。

文字列の誤用。 論理型は型が厳しい。is_active = 'TRUE'やis_active = 'FALSE'みたいに書いちゃダメ。値はTRUE、FALSE、NULLをそのまま使おう。

なんで必要なの?

「なんでわざわざBOOLEANなんて使うの?数字で1が真、0が偽でいいじゃん」って思うかもしれない。

答えはシンプル。BOOLEANを使うとコードやデータがめっちゃ分かりやすくなる。誰かがis_activeフィールドを見たとき、「あ、これは論理値(はい/いいえ)を保存してるんだな」ってすぐ分かる。データベースのスキーマも読みやすくなるし、他の開発者にもモデルが伝わりやすいよ。

2
タスク
SQL SELF, レベル 15, レッスン 3
ロック未解除
論理値のテキスト表現
論理値のテキスト表現
2
タスク
SQL SELF, レベル 15, レッスン 3
ロック未解除
ブール値によるフィルタリング
ブール値によるフィルタリング
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION