- 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 - INSERT 查询
- SQL - SELECT 查询
- SQL - SELECT INTO
- SQL - INSERT INTO SELECT
- SQL - UPDATE 查询
- SQL - DELETE 查询
- SQL - 排序结果
- SQL 视图
- SQL - 创建视图
- SQL - 更新视图
- SQL - 删除视图
- SQL - 重命名视图
- SQL 运算符和子句
- SQL - WHERE 子句
- SQL - TOP 子句
- SQL - DISTINCT 子句
- SQL - ORDER BY 子句
- SQL - GROUP BY 子句
- SQL - HAVING 子句
- SQL - AND & OR
- SQL - 布尔 (BIT) 运算符
- SQL - LIKE 运算符
- SQL - IN 运算符
- SQL - ANY, ALL 运算符
- SQL - EXISTS 运算符
- SQL - CASE
- SQL - NOT 运算符
- SQL - 不等于
- SQL - IS NULL
- SQL - IS NOT NULL
- SQL - NOT NULL
- SQL - BETWEEN 运算符
- SQL - UNION 运算符
- SQL - UNION vs UNION ALL
- SQL - INTERSECT 运算符
- SQL - EXCEPT 运算符
- SQL - 别名
- SQL 连接
- SQL - 使用连接
- SQL - INNER JOIN
- SQL - LEFT JOIN
- SQL - RIGHT JOIN
- SQL - CROSS JOIN
- SQL - FULL JOIN
- SQL - 自连接
- SQL - DELETE JOIN
- SQL - UPDATE JOIN
- SQL - LEFT JOIN vs RIGHT JOIN
- SQL - UNION vs JOIN
- SQL 键
- SQL - UNIQUE KEY
- SQL - PRIMARY KEY
- SQL - FOREIGN KEY
- SQL - 组合键
- SQL - 候选键
- SQL 索引
- SQL - 索引
- SQL - 创建索引
- SQL - 删除索引
- SQL - 显示索引
- SQL - UNIQUE 索引
- SQL - 聚簇索引
- SQL - 非聚簇索引
- 高级 SQL
- SQL - 通配符
- SQL - 注释
- SQL - 注入
- SQL - 托管
- SQL - MIN & MAX
- SQL - NULL 函数
- SQL - CHECK 约束
- SQL - DEFAULT 约束
- SQL - 存储过程
- SQL - NULL 值
- SQL - 事务
- SQL - 子查询
- SQL - 处理重复项
- SQL - 使用序列
- SQL - 自动递增
- SQL - 日期和时间
- SQL - 游标
- SQL - 公共表表达式
- SQL - GROUP BY vs ORDER BY
- SQL - IN vs EXISTS
- SQL - 数据库调优
- SQL 函数参考
- SQL - 日期函数
- SQL - 字符串函数
- SQL - 聚合函数
- SQL - 数值函数
- SQL - 文本和图像函数
- SQL - 统计函数
- SQL - 逻辑函数
- SQL - 游标函数
- SQL - JSON 函数
- SQL - 转换函数
- SQL - 数据类型函数
- SQL 有用资源
- SQL - 问答
- SQL - 快速指南
- SQL - 有用函数
- SQL - 有用资源
- SQL - 讨论
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 |