SQL - 逻辑运算符



在 SQL 中,逻辑运算符用于创建条件表达式,该表达式计算结果为真或假。它们用于 SELECT、UPDATE、DELETE 和其他 SQL 语句的 WHERE 子句中,根据指定的条件筛选数据。SQL 中可用的逻辑运算符如下所示

运算符 描述 示例
ALL 如果一组比较全部为 TRUE,则为 TRUE。
AND 如果由 AND 分隔的所有条件均为 TRUE,则为 TRUE。
ANY 如果一组比较中任何一个为 TRUE,则为 TRUE。
BETWEEN 如果操作数位于比较范围之内,则为 TRUE。
EXISTS 如果子查询返回一个或多个记录,则为 TRUE
IN 如果操作数等于表达式列表中的一个,则为 TRUE。
LIKE 如果操作数与模式匹配(尤其使用通配符),则为 TRUE。
NOT 反转任何其他布尔运算符的值。
OR 如果由 OR 分隔的任何条件为 TRUE,则为 TRUE
IS NULL 如果表达式的值为 NULL,则为 TRUE。
SOME 如果一组比较中有些为 TRUE,则为 TRUE。
UNIQUE UNIQUE 运算符搜索指定表的每一行以查找唯一性(无重复项)。

在本章中,我们将逐一学习每个运算符,并通过示例展示其用法。在继续之前,让我们使用以下查询创建一个名为 **CUSTOMERS** 的表:

CREATE TABLE CUSTOMERS(
   ID INT NOT NULL,
   NAME VARCHAR(15) NOT NULL,
   AGE INT NOT NULL,
   ADDRESS CHAR(25),
   SALARY DECIMAL(18, 2),
   PRIMARY KEY(ID)
);

创建表后,我们可以使用以下查询将一些值插入表中:

INSERT INTO CUSTOMERS(ID, NAME, AGE, ADDRESS, SALARY) VALUES(1, 'Ramesh', 32, 'Ahmedabad', 2000.00);
INSERT INTO CUSTOMERS(ID, NAME, AGE, ADDRESS, SALARY) VALUES(2, 'khilan', 25, 'Delhi', 1500.00);
INSERT INTO CUSTOMERS(ID, NAME, AGE, ADDRESS, SALARY) VALUES(3, 'Kaushik', 23, 'Kota', 2000.00);
INSERT INTO CUSTOMERS(ID, NAME, AGE, ADDRESS, SALARY) VALUES(4, 'chaitali', 25, 'Mumbai', 6500.00);
INSERT INTO CUSTOMERS(ID, NAME, AGE, ADDRESS, SALARY) VALUES(5, 'Hardhik', 27, 'Bhopal', 8500.00);
INSERT INTO CUSTOMERS(ID, NAME, AGE, ADDRESS, SALARY) VALUES(6, 'komal', 22, 'MP', 4500.00);
INSERT INTO CUSTOMERS(ID, NAME, AGE, ADDRESS, SALARY) VALUES(7, 'Muffy', 24, 'Indore', 10000.00 );

让我们使用以下查询验证表是否已创建:

SELECT * FROM CUSTOMERS;

如下所示的输出结果表明,该表已在数据库中创建。

ID 姓名 年龄 地址 薪水
1 Ramesh 32 Ahmedabad 2000.00
2 Khilan 25 Delhi 1500.00
3 kaushik 23 Kota 2000.00
4 Chaitali 25 Mumbai 6500.00
5 Hardik 27 Bhopal 8500.00
6 Komal 22 MP 4500.00
7 Muffy 24 Indore 10000.00

现在,让我们使用上述表执行所有 SQL 逻辑运算。

SQL ALL 运算符

SQL ALL 运算符用于将值与子查询返回的值集进行比较。它检查指定条件是否对子查询结果集中的所有值都成立。ALL 运算符通常与比较运算符一起使用,例如 =、>、<、>=、<=、<> 等。

示例

以下查询返回所有薪水不等于年龄为 25 的任何客户薪水的客户的详细信息。

select * from CUSTOMERS where SALARY <> ALL (select SALARY from CUSTOMERS where AGE = 25);

输出

执行上述查询时,将获得以下输出:

ID 姓名 年龄 地址 薪水
1 Ramesh 32 Ahmedabad 2000.00
3 kaushik 23 Kota 2000.00
5 Hardik 27 Bhopal 8500.00
6 Komal 22 MP 4500.00
7 Muffy 24 Indore 10000.00

SQL AND 运算符

SQL AND 运算符用于在 WHERE 子句或 HAVING 子句中组合多个条件。它允许您检索满足所有指定条件的行。如果 AND 连接的所有条件对于某一行都为真,则该行将包含在结果集中。

示例

在这里,我们获取薪水大于 2000 且年龄小于 25 岁的客户的 ID、姓名和薪水。

SELECT ID, NAME, SALARY FROM CUSTOMERS WHERE SALARY > 2000 AND age < 25;

输出

执行上述查询时,将获得以下输出:

ID 姓名 薪水
6 Komal 4500.00
7 Muffy 10000.00

SQL ANY 运算符

SQL ANY 运算符用于将单个值与子查询返回的值集进行比较。它检查指定条件是否对子查询结果集中的至少一个值成立。ANY 运算符通常与比较运算符一起使用,例如“=”、“>”、“<”、“>=”、“<=”、“<>”等。

示例

现在,让我们尝试列出所有薪水高于年龄为 32 的任何客户薪水的客户的详细信息,在本例中,这些客户是 Chaitali、Hardik、Komal 和 Muffy。

select * from customers WHERE SALARY > ANY (select SALARY from CUSTOMERS where AGE = 32);

输出

执行上述查询后,将显示以下输出:

ID 姓名 年龄 地址 薪水
4 Chaitali 25 Mumbai 6500.00
5 Hardik 27 Bhopal 8500.00
6 Komal 22 MP 4500.00
7 Muffy 24 Indore 10000.00

SQL BETWEEN 运算符

SQL BETWEEN 运算符用于过滤指定值范围内的数据。它检查值是否在指定的上下限(包括)内。BETWEEN 运算符用于 SQL 查询的 WHERE 子句中,以检索属于特定范围的行。

示例

在这里,我们尝试检索年龄在 18 到 22 之间的客户。

SELECT * FROM EMPLOYEE WHERE AGE BETWEEN 18 AND 22;

输出

上述查询生成的表如下所示:

ID 姓名 年龄 地址 薪水 加入日期
1 Khilan 22 Nijamabad 57500.84 2022-01-14
2 Ramesh 21 Hyderabad 25550.12 2023-01-02
4 kaushik 18 Bangolore 47275.43 2023-03-15
6 Hardik 19 Noida 44200.09 2023-06-04

SQL EXISTS 运算符

SQL EXISTS 运算符用于验证特定记录是否存在于 SQL 表中。使用此运算符时,我们需要使用子查询指定要检查其存在的记录。它用于 WHERE 子句中,根据子查询中行的存在与否过滤结果。如果子查询返回至少一行,则 EXISTS 运算符返回 true;否则,返回 false。

为了更好地理解,让我们创建另一个名为 **CARS** 的表,其中包含客户 ID、汽车名称和价格等详细信息,使用以下查询:

create table CARS(
ID INT NOT NULL,
NAME VARCHAR(20) NOT NULL,
PRICE INT NOT NULL,
PRIMARY KEY(ID)
);

使用 INSERT 语句,让我们将值插入此表:

insert INTO CARS VALUES(2, 'Maruti Swift', 450000);
insert INTO CARS VALUES(4, 'VOLVO', 2250000);
insert INTO CARS VALUES(7, 'Toyota', 2400000);

如果尝试使用 SELECT 查询检索表的内容,则表将显示如下:

ID 姓名 价格
2 Maruti Swift 450000
4 VOLVO 2250000
7 Toyota 2400000

示例

现在,让我们尝试返回汽车价格大于 2,000,000 的客户列表。

SELECT * FROM CUSTOMERS WHERE EXISTS (SELECT PRICE FROM CARS WHERE CARS.ID = CUSTOMERS.ID AND PRICE > 2000000);

输出

以下是上述查询的输出:

ID 姓名 年龄 地址 薪水
4 Chaitali 25 Mumbai 6500.00
7 Muffy 24 Indore 10000.00

SQL IN 运算符

SQL IN 运算符用于指定要与特定列或表达式匹配的值列表。它允许我们检索其列值与指定列表中的任何值匹配的行。IN 运算符用于 SQL 查询的 WHERE 子句中,以根据多个可能的值过滤数据。

示例

在以下查询中,我们尝试显示 NAME 等于 'Khilan'、'Hardik' 和 'Muffy'(字符串值)的记录。

select * from CUSTOMERS WHERE NAME IN ('Khilan', 'Hardhik', 'Muffy');

输出

生成的输出如下所示:

ID 姓名 年龄 地址 薪水
2 Khilan 25 Delhi 1500.00
5 Hardhik 27 Bhopal 8500.00
7 Muffy 24 Indore 10000.00

SQL LIKE 运算符

SQL LIKE 运算符用于对字符数据执行模式匹配。它用于 SQL 查询的 WHERE 子句中,根据列中的特定模式过滤行。当您要执行通配符搜索时,LIKE 运算符特别有用,即 **'%'**、**'_'**、**'[]'**、**'[^]'**。

示例

让我们尝试显示 CUSTOMERS 表中的所有记录,其中 SALARY 以 200 开头。

SELECT * FROM CUSTOMERS WHERE SALARY LIKE '200%';

输出

上述代码的输出如下所示:

ID 姓名 年龄 地址 薪水
1 Ramesh 32 Ahmedabad 2000.00
3 Kaushik 23 Kota 2000.00

SQL NOT 运算符

SQL NOT 运算符用于否定条件。如果指定条件为假,则返回 true;如果条件为真,则返回 false。NOT 运算符通常用于在 SQL 查询中执行负面或反向过滤。

示例

在以下查询中,我们检索薪水不大于 2000 的客户。

SELECT * FROM CUSTOMERS WHERE NOT (SALARY > 2000.00);

输出

上述代码的输出如下所示:

ID 姓名 年龄 地址 薪水
1 Ramesh 32 Ahmedabad 2000.00
2 Khilan 25 Delhi 1500.00
3 Kaushik 23 Kota 2000.00

SQL OR 运算符

SQL OR 运算符用于在 WHERE 子句或 HAVING 子句中组合多个条件。它允许我们检索满足至少一个指定条件的行。如果 OR 运算符连接的任何条件对于某一行都为真,则该行将包含在结果集中。

示例

以下查询获取薪水大于 2000 或年龄小于 25 岁的客户的 ID、姓名和薪水。

SELECT ID, NAME, SALARY FROM CUSTOMERS WHERE SALARY > 2000 OR age < 25;

输出

以下是上述查询的输出:

ID 姓名 薪水
3 Kaushik 2000.00
4 Chaitali 6500.00
5 Hardik 8500.00
6 Komal 4500.00
7 Muffy 10000.00

SQL IS NULL 运算符

SQL IS NULL 运算符用于检查列是否具有 NULL 值(没有值)。如果列值为 NULL,则返回 true;否则返回 false。

示例

让我们考虑一个名为“Fruit”的表,我们将在数据库中创建该表,该表在字段中包含一些 NULL 值。执行以下查询以创建表。

CREATE TABLE Fruit
(
   ID   INT              NOT NULL,
   NAME VARCHAR (20)     NOT NULL,
   ADDRESS  CHAR (25),
   PRICE   DECIMAL (18, 2),
   PRIMARY KEY (ID)
);

现在,我们将使用下面的查询来填充上面创建的表。

INSERT INTO Fruit (ID,NAME,ADDRESS,PRICE)
VALUES (1, 'Apple', 'Shimla', 2000.00 );

INSERT INTO Fruit (ID,NAME,ADDRESS,PRICE)
VALUES (2, 'Mango',NULL, 3000.00 );

INSERT INTO Fruit (ID,NAME,ADDRESS,PRICE)
VALUES (3, 'Orange',NULL, 4000.00 );

INSERT INTO Fruit (ID,NAME,ADDRESS,PRICE)
VALUES (4, 'Banana', 'AP',NULL);

INSERT INTO Fruit (ID,NAME,ADDRESS,PRICE)
VALUES (5, 'JackFruit', 'Ooty',NULL);

验证

要检查表是否已创建,让我们执行下面的查询。

SELECT * FROM Fruit;

执行后,它将显示如下所示的表:

ID 姓名 地址 价格
1 苹果 西姆拉(Shimla,印度地名) 2000.00
2 芒果 3000.00
3 橙子 4000.00
4 香蕉 阿普(AP,可能指安得拉邦 Andhra Pradesh)
5 菠萝蜜 乌蒂(Ooty,印度地名)

现在,我们尝试检索地址未提供的水果列表。

SELECT * FROM Fruit WHERE ADDRESS IS NULL;

输出

上面查询的输出如下所示:

ID 姓名 地址 价格
2 芒果 3000.00
3 橙子 4000.00
sql-operators.htm
广告