SQL - 布尔(位)运算符


布尔值是存储真值或假值的通用数据类型。当我们在表的列中定义变量时使用它。

例如,客户想要所有红色汽车的列表。因此,我们可以使用布尔运算符找到它,如下表所示 -

布尔运算符

这里,IS_RED是 BOOLEAN 列,它根据汽车的颜色返回 TRUE 或 FALSE 值。

SQL 中的布尔值

SQL没有布尔数据类型(作为关键字)。相反,它提供 BIT 数据类型。位数据类型是接受值 0、1 和 NULL 的整数值。

  • 值 0 代表 FALSE,1 代表 TRUE。

  • 我们还可以使用位数据类型存储 NULL 值。

  • 位数据类型的范围是 1 到 64。这意味着SQL BOOLEAN仅需要单个位来存储值。

PostgreSQL、PL/SQL等数据库提供了布尔数据类型,缩写为BOOL。而 MySQL 和 Oracle SQL 等数据库没有布尔数据类型。为了表示布尔值,它们分别提供 TIN​​YINT 和 BIT 数据类型。

句法

以下是 SQL BIT 数据类型的基本语法 -

CREATE TABLE table_name (
   column name BIT, column2 datatype, column 3 datatype …
);

例子

在下面的查询中,我们创建一个名为“CUSTOMERS”的表,其中包含三列,即“ID”、“NAME”和“AVAILABLEITY”。

“可用性”列表示客户是否有空。如果客户不在,则存储位值 0 (FALSE);如果客户有空,则存储位值 1 (TRUE)。

CREATE TABLE CUSTOMERS(
   ID INT NOT NULL,
   NAME VARCHAR(150),
   AVAILABILITY BIT
); 

输出

以下是执行上述查询得到的结果 -

Commands completed successfully.

确认

我们可以通过使用 SELECT 语句检索表的内容来验证更改是否反映在表中。以下是显示客户表中记录的查询 -

select * from customers;

该表显示如下 -

+-----+------+--------------+
| ID  | NAME | AVAILABILITY |
+-----+------+--------------+

使用 SQL BIT 数据类型插入数据

创建数据类型为 Boolean 的表列后,您需要将 0、1 或 NULL 作为值传递给它。如果数据类型BIT的列的值不是这 3 个值,则会生成错误。

例子

在以下查询中,我们尝试在上面创建的CUSTOMERS表中插入数据 -

INSERT INTO CUSTOMERS(ID, NAME, AVAILABILITY) VALUES (1, 'Ramesh', 0);
INSERT INTO CUSTOMERS(ID, NAME, AVAILABILITY) VALUES (2, 'Khilan', 1);
INSERT INTO CUSTOMERS(ID, NAME, AVAILABILITY) VALUES (4, 'Kaushik', NULL);

输出

以下是获得的结果 -

(1 row affected)
(1 row affected)
(1 row affected)

确认

SELECT 语句用于打印指定表的内容。要验证更改是否反映在 CUSTOMERS 表中,我们可以使用此语句,如下所示 -

SELECT ID, NAME, AVAILABILITY
FROM CUSTOMERS;

该表显示如下 -

+-----+----------+--------------------+
| ID  | NAME     | AVAILABILITY       |
+-----+----------+--------------------+
|   1 | Ramesh   | 0                  |
|   2 | Khilan   | 1                  |
|   4 | kaushik  | NULL               |
+-----+----------+--------------------+

将 BIT 0,1 替换为 TRUE 和 FALSE

正如我们在上面看到的,BIT 数据类型显示 0 和 1 值,而不是 TRUE 和 FALSE。在 SQL 中,我们可以使用 CASE 语句将 BIT 数据类型转换为 TRUE 和 FALSE。

SQL CASE语句是一种条件语句,可以帮助我们根据某些条件做出决策。它评估一组条件并在满足相应条件时返回结果。

句法

以下是 CASE 语句的基本语法 -

CASE
   WHEN condition1 THEN value1
   WHEN condition2 THEN value2
   ...
   ELSE default_value
END

例子

为了更好地理解它,让我们考虑一下 CARS 表,其中包含汽车的详细信息,包括制造商、类型、变速器和颜色,如下所示 -

CREATE TABLE CARS (
   MANUFACTURER VARCHAR(20) NOT NULL,
   TYPE VARCHAR(20) NOT NULL,
   TRANSMISSION VARCHAR(20) NOT NULL,
   COLOR VARCHAR(20),
   IS_RED BIT
);

现在,使用 INSERT 语句将值插入到该表中,如下所示 -

INSERT INTO CARS VALUES ('Toyota', 'SUV', 'Automatic', 'Red', 1);
INSERT INTO CARS VALUES ('Honda', 'Hatchback', 'Manual', 'Grey', 0);
INSERT INTO CARS VALUES ('Mercedes', 'Sedan', 'Automatic', 'Red', 1);
INSERT INTO CARS VALUES ('Tata', 'Truck', 'Manual', 'Blue', 0);
INSERT INTO CARS VALUES ('Ford', 'Minivan', 'Manual', 'Red', 1);

该表将创建为 -

+--------------+-----------+--------------+-------+--------+
| MANUFACTURER | TYPE      | TRANSMISSION | COLOR | IS_RED |
+--------------+-----------+--------------+-------+--------+
| Toyota       | SUV       | Automatic    | Red   | 1      |
| Honda        | Hatchback | Manual       | Grey  | 0      |
| Mercedes     | Sedan     | Automatic    | Red   | 1      |
| Tata         | Truck     | Manual       | Blue  | 0      |
| Ford         | Minivan   | Manual       | Red   | 1      |
+--------------+-----------+--------------+-------+--------+

现在,让我们尝试显示 CARS 表中所有颜色为 TRUE 代表的红色的汽车;否则为 FALSE(布尔值)−

SELECT *,
   CASE IS_RED
      WHEN 1 THEN 'TRUE'
      WHEN 0 THEN 'FALSE'
   END AS IS_RED_BOOLEAN
FROM CARS;

输出

以下是产生的结果 -

+--------------+-----------+--------------+-------+--------+----------------+
| MANUFACTURER | TYPE      | TRANSMISSION | COLOR | IS_RED | IS_RED_BOOLEAN |
+--------------+-----------+--------------+-------+--------+----------------+
| Toyota       | SUV       | Automatic    | Red   | 1      | TRUE           |
| Honda        | Hatchback | Manual       | Grey  | 0      | FALSE          |
| Mercedes     | Sedan     | Automatic    | Red   | 1      | TRUE           |
| Tata         | Truck     | Manual       | Blue  | 0      | FALSE          |
| Ford         | Minivan   | Manual       | Red   | 1      | TRUE           |
+--------------+-----------+--------------+-------+--------+----------------+ 

带有存储过程的 BIT

我们还可以在 SQL Server 的存储过程中使用 BIT 数据类型。存储过程是一组可以多次执行的 SQL 语句。

存储过程使用 BIT 参数来确定是否执行特定操作。在过程中使用位类型值(或任何其他数据类型)之前,我们需要先声明该类型的变量,然后将其用作参数。

句法

以下是采用 BIT 参数的存储过程的基本语法 -

CREATE PROCEDURE my_Procedure
   @myBit BIT
AS
BEGIN
   IF @myBit = 1
   BEGIN
      -- do something if @myBit is true
   END
   ELSE
   BEGIN
      -- do something if @myBit is false
   END
END

这里,存储过程采用一个名为@myBit的 BIT 类型参数。然后,它使用 IF 语句验证@myBit的值,并根据它的真假执行不同的操作。

例子

在下面的查询中,我们尝试创建一个名为REDFlag的存储过程,它根据@REDFlag变量的值获取 CARS 表的详细信息。

create procedure REDFlag
(
   @REDFlag bit
)
as
select * from CARS
where IS_RED = @REDFlag

输出

执行上述查询时我们得到以下输出 -

Commands completed successfully.

确认

存储过程创建成功后,我们需要使用 Exec 子句来执行它。由于它需要 BIT 类型的输入值,因此我们传递 1(对于颜色 = 红色为 TRUE)。

exec REDFlag 1

输出

执行上述查询后,我们得到以下输出。它显示了红色汽车的列表 -

+--------------+-----------+--------------+-------+--------+
| MANUFACTURER | TYPE      | TRANSMISSION | COLOR | IS_RED |
+--------------+-----------+--------------+-------+--------+
| Toyota       | SUV       | Automatic    | Red   | 1      |
| Mercedes     | Sedan     | Automatic    | Red   | 1      |
| Ford         | Minivan   | Manual       | Red   | 1      |
+--------------+-----------+--------------+-------+--------+

确认

如果我们需要获取红色以外颜色的汽车列表,我们只需要通过传递 0 来调用上面创建的过程 -

exec REDFlag 0

输出

产生以下结果 -

+--------------+-----------+--------------+-------+--------+
| MANUFACTURER | TYPE      | TRANSMISSION | COLOR | IS_RED |
+--------------+-----------+--------------+-------+--------+
| Honda        | Hatchback | Manual       | Grey  | 0      |
| Tata         | Truck     | Manual       | Blue  | 0      |
+--------------+-----------+--------------+-------+--------+