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 |