你之前已經學過可以存數字跟文字的資料型別了。現在輪到聊聊邏輯資料型別 — 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_complete 是 FALSE 的任務。
結果:
| 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 NULL 或 IS NOT NULL。
明寫 = TRUE。 有時候工程師會多寫一個 WHERE is_active = TRUE。這不是錯,但其實可以簡化成 WHERE is_active。
用字串寫錯。 邏輯型別很嚴格。你不能寫 is_active = 'TRUE' 或 is_active = 'FALSE'。要直接用 TRUE、FALSE 或 NULL。
為什麼要這樣?
你可能會想:幹嘛這麼麻煩,還要用 BOOLEAN?為什麼不用數字,像 1 代表 true,0 代表 false?
答案很簡單:BOOLEAN 讓你的程式碼跟資料更有表達力。當別人看到有 is_active 這個欄位時,一看就知道這是存邏輯值(是/不是)。這樣資料庫 schema 更好懂,其他工程師也更容易理解你的資料模型。
GO TO FULL VERSION