- SQL教程
- SQL - 主页
- SQL - 概述
- SQL - RDBMS 概念
- SQL - 数据库
- SQL - 语法
- SQL - 数据类型
- SQL - 运算符
- SQL - 表达式
- SQL数据库
- SQL-创建数据库
- SQL - 删除数据库
- SQL - 选择数据库
- SQL - 重命名数据库
- SQL - 显示数据库
- SQL-备份数据库
- SQL表
- SQL - 创建表
- SQL - 显示表
- SQL - 重命名表
- SQL - 截断表
- SQL - 克隆表
- SQL - 临时表
- SQL - 更改表
- SQL - 删除表
- SQL - 删除表
- SQL - 约束
- SQL查询
- SQL - 插入查询
- SQL - 选择查询
- SQL - 选择进入
- SQL - 插入选择
- SQL - 更新查询
- SQL - 删除查询
- SQL - 对结果进行排序
- SQL 视图
- SQL - 创建视图
- SQL - 更新视图
- SQL - 删除视图
- SQL - 重命名视图
- SQL 运算符和子句
- SQL-Where 子句
- SQL - 顶部子句
- SQL - 不同子句
- SQL - Order By 子句
- SQL - Group By 子句
- SQL-Having 子句
- SQL - 与与或
- SQL - 布尔(位)运算符
- SQL - LIKE 运算符
- SQL - IN 运算符
- SQL - ANY、ALL 运算符
- SQL - EXISTS 运算符
- SQL-案例
- SQL - NOT 运算符
- SQL - 不等于
- SQL - 为空
- SQL - 不为空
- SQL - 非空
- SQL - BETWEEN 运算符
- SQL - UNION 运算符
- SQL - UNION 与 UNION ALL
- SQL - 相交运算符
- SQL - EXCEPT 运算符
- SQL - 别名
- SQL 连接
- SQL - 使用联接
- SQL-内连接
- SQL-左连接
- SQL-右连接
- SQL-交叉连接
- SQL-全连接
- SQL-自连接
- SQL - 删除连接
- SQL - 更新连接
- SQL - 左连接与右连接
- SQL - 联合与连接
- SQL 键
- SQL - 唯一键
- SQL - 主键
- SQL-外键
- SQL - 复合键
- SQL - 备用键
- SQL索引
- SQL - 索引
- SQL - 创建索引
- SQL - 删除索引
- SQL - 显示索引
- SQL-唯一索引
- SQL - 聚集索引
- SQL - 非聚集索引
- 高级SQL
- SQL - 通配符
- SQL - 注释
- SQL-注入
- SQL-托管
- SQL - 最小值和最大值
- SQL - 空函数
- SQL - 检查约束
- SQL - 默认约束
- SQL-存储过程
- SQL - NULL 值
- SQL - 事务
- SQL - 子查询
- SQL - 处理重复项
- SQL - 使用序列
- SQL-自动递增
- SQL - 日期和时间
- SQL-游标
- SQL - 公用表表达式
- SQL - 分组依据与排序依据
- SQL - IN 与 EXISTS
- SQL——数据库调优
- SQL 函数参考
- SQL - 日期函数
- SQL - 字符串函数
- SQL - 聚合函数
- SQL - 数字函数
- SQL - 文本和图像函数
- SQL - 统计函数
- SQL - 逻辑函数
- SQL - 游标函数
- SQL-JSON 函数
- SQL - 转换函数
- SQL - 数据类型函数
- SQL 有用资源
- SQL - 问题与解答
- SQL - 快速指南
- SQL - 有用的函数
- SQL - 有用的资源
- SQL - 讨论
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 等数据库没有布尔数据类型。为了表示布尔值,它们分别提供 TINYINT 和 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 | +--------------+-----------+--------------+-------+--------+