SQL 逻辑运算符

SQL 逻辑运算符

在SQL中,逻辑运算符用于创建条件表达式,该表达式的结果可以是true或false。它们用于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 NAME AGE ADDRESS SALARY
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 NAME AGE ADDRESS SALARY
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 NAME SALARY
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 NAME AGE ADDRESS SALARY
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 NAME AGE ADDRESS SALARY JOIN_DATE
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 NAME PRICE
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 NAME AGE ADDRESS SALARY
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 NAME AGE ADDRESS SALARY
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 NAME AGE ADDRESS SALARY
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 NAME AGE ADDRESS SALARY
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 NAME SALARY
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”的表,我们将在数据库中创建该表,并且其中一些字段包含空值。执行以下查询以创建表。

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 NAME ADDRESS PRICE
1 Apple Shimla 2000.00
2 Mango NULL 3000.00
3 Orange NULL 4000.00
4 Banana AP NULL
5 JackFruit Ooty NULL

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

SELECT * FROM Fruit WHERE ADDRESS IS NULL;

输出

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

ID NAME ADDRESS PRICE
2 Mango NULL 3000.00
3 Orange NULL 4000.00

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程