- 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 - Select Into
- SQL - Insert Into Select
- SQL - 更新查询
- SQL - 删除查询
- 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 - BOOLEAN (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 与 UNION ALL
- SQL - INTERSECT 运算符
- SQL - EXCEPT 运算符
- SQL - 别名
- SQL 连接
- SQL - 使用连接
- SQL - 内连接
- SQL - 左连接
- SQL - 右连接
- SQL - 交叉连接
- SQL - 全连接
- SQL - 自连接
- SQL - 删除连接
- SQL - 更新连接
- SQL - 左连接与右连接
- SQL - UNION 与 JOIN
- SQL 密钥
- SQL - 唯一键
- SQL - 主键
- SQL - 外键
- SQL - 组合键
- SQL - 备用键
- SQL 索引
- SQL - 索引
- SQL - 创建索引
- SQL - 删除索引
- SQL - 显示索引
- SQL - 唯一索引
- SQL - 集群索引
- SQL - 非集群索引
- 高级 SQL
- SQL - 通配符
- SQL - 注释
- SQL - 注入
- SQL - 托管
- SQL - Min & Max
- SQL - 空函数
- SQL - 检查约束
- SQL - 默认约束
- SQL - 存储过程
- SQL - NULL 值
- SQL - 事务
- SQL - 子查询
- SQL - 处理重复项
- SQL - 使用序列
- SQL - 自动递增
- SQL - 日期和时间
- SQL - 游标
- SQL - 公共表表达式
- SQL - GROUP BY 与 ORDER BY
- SQL - IN 与 EXISTS
- SQL - 数据库调优
- SQL 函数参考
- SQL - 日期函数
- SQL - 字符串函数
- SQL - 聚合函数
- SQL - 数值函数
- SQL - 文本和图像函数
- SQL - 统计函数
- SQL - 逻辑函数
- SQL - 游标函数
- SQL - JSON 函数
- SQL - 转换函数
- SQL - 数据类型函数
- SQL 有用资源
- SQL - 问答
- SQL - 快速指南
- SQL - 有用函数
- SQL - 有用资源
- SQL - 讨论
SQL - WHERE 子句
SQL WHERE 子句
SQL 的WHERE 子句用于过滤由 DML 语句(如 SELECT、UPDATE 和 DELETE 等)获得的结果。我们可以使用 WHERE 子句从单个表或多个表(联接操作后)中检索数据。
例如,您可以使用 WHERE 子句检索组织中某个部门的员工详细信息,或收入高于/低于某个金额的员工,或有资格获得奖学金的学生的详细信息等。此子句基本上提供了要检索哪些记录以及哪些记录要忽略的规范。
语法
SQL WHERE 子句的基本语法如下所示:
DML_Statement column1, column2,... columnN FROM table_name WHERE [condition];
这里,DML_Statement 可以是任何语句,例如 SELECT、UPDATE、DELETE 等。
您可以使用比较或逻辑运算符(例如,>、<、=、LIKE、NOT 等)指定条件。
WHERE 子句与 SELECT 语句
通常,SELECT 语句用于从表中检索数据。如果我们将 WHERE 子句与 SELECT 语句一起使用,我们可以根据特定条件(或表达式)过滤要检索的行。以下是它的语法:
SELECT column1, column2, ... FROM table_name WHERE condition;
示例
假设我们在 MySQL 数据库中使用 CREATE TABLE 语句创建了一个名为 CUSTOMERS 的表,如下所示:
CREATE TABLE CUSTOMERS ( ID INT NOT NULL, NAME VARCHAR (20) NOT NULL, AGE INT NOT NULL, ADDRESS CHAR (25), SALARY DECIMAL (18, 2), PRIMARY KEY (ID) );
以下 INSERT 查询将 7 条记录插入此表:
INSERT INTO CUSTOMERS VALUES (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, 'Hyderabad', 4500.00), (7, 'Muffy', 24, 'Indore', 10000.00);
创建的表如下所示:
ID | 姓名 | 年龄 | 地址 | 薪水 |
---|---|---|---|---|
1 | Ramesh | 32 | 艾哈迈达巴德 | 2000.00 |
2 | Khilan | 25 | 德里 | 1500.00 |
3 | Kaushik | 23 | 科塔 | 2000.00 |
4 | Chaitali | 25 | 孟买 | 6500.00 |
5 | Hardik | 27 | 博帕尔 | 8500.00 |
6 | Komal | 22 | 海得拉巴 | 4500.00 |
7 | Muffy | 24 | 因多尔 | 10000.00 |
在以下查询中,我们从 CUSTOMERS 表中获取 ID、NAME 和 SALARY 字段,用于薪水大于 2000 的记录:
SELECT ID, NAME, SALARY FROM CUSTOMERS WHERE SALARY > 2000;
输出
这将产生以下结果:
ID | 姓名 | 薪水 |
---|---|---|
4 | Chaitali | 6500.00 |
5 | Hardik | 8500.00 |
6 | Komal | 4500.00 |
7 | Muffy | 10000.00 |
WHERE 子句与 UPDATE 语句
UPDATE 语句用于修改表中现有的记录。使用 SQL WHERE 子句与 UPDATE 语句一起,我们可以更新特定记录。如果不使用 WHERE 子句,则 UPDATE 语句将影响表的所有记录。以下是语法:
UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;
示例
在以下查询中,我们使用 WHERE 子句以及 UPDATE 语句将名为 Ramesh 的客户的薪水增加 10000:
UPDATE CUSTOMERS set SALARY = SALARY+10000 where NAME = 'Ramesh';
输出
我们得到以下结果。我们可以观察到 2 个客户的年龄已被修改:
Query OK, 2 rows affected (0.02 sec) Rows matched: 2 Changed: 2 Warnings: 0
验证
要验证更改是否反映在表中,我们可以使用 SELECT 语句,如以下查询所示:
SELECT * FROM CUSTOMERS WHERE NAME = 'Ramesh';
表显示如下:
ID | 姓名 | 年龄 | 地址 | 薪水 |
---|---|---|---|---|
1 | Ramesh | 32 | 艾哈迈达巴德 | 12000.00 |
WHERE 子句与 IN 运算符
使用 IN 运算符,您可以在 where 子句中指定值列表或子查询。如果您将 WHERE 和 IN 与 SELECT 语句一起使用,它允许我们检索表中与指定列表中的任何值匹配的行。以下是它的语法:
WHERE column_name IN (value1, value2, ...);
其中,column_name 是表的列,而 value1、value2 等是我们想要与 column_name 比较的值列表。
示例
假设您想显示 CUSTOMERS 表中具有 NAME 值 Khilan、Hardik 和 Muffy 的记录,您可以使用以下查询:
SELECT * from CUSTOMERS WHERE NAME IN ('Khilan', 'Hardik', 'Muffy');
输出
获得的结果如下:
ID | 姓名 | 年龄 | 地址 | 薪水 |
---|---|---|---|---|
2 | Khilan | 25 | 德里 | 1500.00 |
5 | Hardik | 27 | 博帕尔 | 8500.00 |
7 | Muffy | 24 | 因多尔 | 10000.00 |
WHERE 子句与 NOT IN 运算符
使用 NOT IN 运算符的 WHERE 子句是使用 IN 运算符的 WHERE 子句的否定。
- 如果您使用 WHERE 和 IN 运算符,则 DML 语句将作用于指定的(列的)值列表
- 相反,如果您使用 WHERE 和 NOT IN 运算符,则 DML 操作将对不在指定列表中的(列的)值执行。
WHERE column_name NOT IN (value1, value2, ...);
示例
在此示例中,我们显示来自 CUSTOMERS 表的记录,其中 AGE 不等于 25、23 和 22。
SELECT * from CUSTOMERS WHERE AGE NOT IN (25, 23, 22);
输出
我们获得如下所示的结果:
ID | 姓名 | 年龄 | 地址 | 薪水 |
---|---|---|---|---|
1 | Ramesh | 32 | 艾哈迈达巴德 | 12000.00 |
5 | Hardik | 27 | 博帕尔 | 8500.00 |
7 | Muffy | 24 | 因多尔 | 10000.00 |
WHERE 子句与 LIKE 运算符
使用 LIKE 运算符的 WHERE 子句允许我们过滤与特定模式匹配的行。此特定模式由通配符(如 %、_、[] 等)表示。以下是语法:
WHERE column_name LIKE pattern;
其中,column_name 是我们要对比模式的列,而 pattern 是可以包含通配符(如 %、_、[] 等)的字符串。
示例
以下查询将显示所有名称以 K 开头且长度至少为 4 个字符的记录:
SELECT * FROM CUSTOMERS WHERE NAME LIKE 'K___%';
输出
获得的结果如下:
ID | 姓名 | 年龄 | 地址 | 薪水 |
---|---|---|---|---|
2 | Khilan | 25 | 德里 | 1500.00 |
3 | Kaushik | 23 | 科塔 | 2000.00 |
6 | Komal | 22 | 海得拉巴 | 4500.00 |
WHERE 子句与 AND, OR 运算符
我们可以在 SQL 中一起使用 AND 和 OR 运算符,以在 WHERE 子句中组合多个条件,以过滤满足指定条件的行。AND 运算符将确保仅过滤满足所有条件的行,而 OR 运算符将过滤满足任何一个指定条件的记录。但是,这仅在指定一个条件不足以过滤所有所需行时使用。
以下是如何在 WHERE 子句中使用 AND 和 OR 运算符的语法:
WHERE (condition1 OR condition2) AND condition3;
示例
在以下查询中,我们根据某些条件从 CUSTOMERS 表中检索所有行。括号控制求值顺序,以便首先应用 OR 运算符,然后应用 AND 运算符:
SELECT * FROM CUSTOMERS WHERE (AGE = 25 OR salary < 4500) AND (name = 'Komal' OR name = 'Kaushik');
输出
这将产生以下结果:
ID | 姓名 | 年龄 | 地址 | 薪水 |
---|---|---|---|---|
3 | Kaushik | 23 | 科塔 | 2000.00 |