Вы уже познакомились с типами данных, которые хранят числа и текст. Теперь пришло время поговорить о логическом типе данных — 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 может отражать, доступен ли товар на складе.
Как использовать BOOLEAN в PostgreSQL?
Логический тип данных в 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— если хотите явно указать, что значение истинно.= 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 — истина, а 0 — ложь?
Ответ прост: BOOLEAN делает ваш код и данные более выразительными. Когда кто-то смотрит на таблицу с полем is_active, сразу понятно, что это поле хранит логическую сущность (да/нет). Это улучшает читаемость схемы базы данных и делает вашу модель данных более понятной для других разработчиков.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ