CodeGym /課程 /SQL SELF /邏輯資料型別:BOOLEAN

邏輯資料型別:BOOLEAN

SQL SELF
等級 15 , 課堂 3
開放

你之前已經學過可以存數字跟文字的資料型別了。現在輪到聊聊邏輯資料型別 — BOOLEAN。這大概是最「誠實」的資料型別啦,因為它只回答兩個問題:「是」還是「不是」。有時候也會是「可能吧」(就是 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。來,我們先建一個表格,然後加幾個欄位:

  • 任務的唯一識別碼
  • 任務名稱
  • 任務完成的邏輯狀態

然後我們再加幾筆資料進去:

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_completeFALSE 的任務。

結果:

task_name
寫報告

BOOLEAN 的小細節

值的篩選

你可以用這些語法來處理邏輯型別:

  • = TRUE — 如果你想明確指定值是 true。
  • = FALSE — 如果你想選出 false 的值。
  • IS NULL — 如果你想選出沒值的紀錄。

範例:

SELECT task_name
FROM tasks 
WHERE is_complete IS NULL;

條件簡化

PostgreSQL 超聰明,很多時候你根本不用寫 = TRUE。像這樣:

SELECT task_name
FROM tasks 
WHERE is_complete;

這個查詢就等於 WHERE is_complete = TRUE

BOOLEAN 常見錯誤

剛開始用新資料型別,難免會出錯。這裡有幾個常見問題:

NULL 比較。 新手常常寫 is_active = NULL。但 NULL 不能用 = 來比。要檢查是不是 NULL,請用 IS NULLIS NOT NULL

明寫 = TRUE 有時候工程師會多寫一個 WHERE is_active = TRUE。這不是錯,但其實可以簡化成 WHERE is_active

用字串寫錯。 邏輯型別很嚴格。你不能寫 is_active = 'TRUE'is_active = 'FALSE'。要直接用 TRUEFALSENULL

為什麼要這樣?

你可能會想:幹嘛這麼麻煩,還要用 BOOLEAN?為什麼不用數字,像 1 代表 true,0 代表 false?

答案很簡單:BOOLEAN 讓你的程式碼跟資料更有表達力。當別人看到有 is_active 這個欄位時,一看就知道這是存邏輯值(是/不是)。這樣資料庫 schema 更好懂,其他工程師也更容易理解你的資料模型。

留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION