在本文中,我将讨论如何在MySQL中使用WHERE子句。请阅读我们之前的文章,其中讨论了MySQL中的SELECT语句。在本文结束时,您将详细了解以下要点:
MySQL中的子句是什么?
在理解WHERE子句之前,让我们首先讨论一下MySQL中的子句是什么。子句是SQL中可用的内置函数,用于轻松处理存储在表中的数据。它帮助我们快速过滤和分析数据。当我们在数据库中存储大量数据时,子句用于获取用户所需的数据。这意味着如果您想提供一些附加功能,例如过滤记录、排序记录、获取记录和分组记录,那么您需要在查询中使用子句。
为什么我们需要MySQL中的子句?
MySQL子句用于通过应用描述条件的过滤器来访问数据库和提取数据。如果条件满足,我们将获得特定的结果行,不满足条件的信息将不被使用。因此,SQL子句帮助我们访问适当的信息,并且易于处理数据库中的不同表。
MySQL中的WHERE子句
WHERE子句是SQL语句中的一个可选子句。WHERE子句充当由FROM子句生成的结果集的行的过滤器。它仅提取满足指定条件的记录。WHERE子句主要依赖于一个条件,该条件可以评估为真、假或未知。因此,如果您想限制DML语句(SELECT、INSERT、UPDATE或DELETE)影响的行数,则需要在MySQL中使用WHERE子句。
示例:理解MySQL中的WHERE子句
我们将使用以下员工表来理解MySQL中WHERE子句的需求和使用示例。
复制
CREATE DATABASE company;
USE company;
CREATE TABLE employees (
Id INT PRIMARY KEY,
Name VARCHAR(45) NOT NULL,
Department VARCHAR(45) NOT NULL,
Salary FLOAT NOT NULL,
Gender VARCHAR(45) NOT NULL,
Age INT NOT NULL,
City VARCHAR(45) NOT NULL
);
INSERT INTO employees (Id, Name, Department, Salary, Gender, Age, City) VALUES (1001, '张三', 'IT', 35000, '男', 25, '北京');
INSERT INTO employees (Id, Name, Department, Salary, Gender, Age, City) VALUES (1002, '李四', 'HR', 45000, '女', 27, '上海');
INSERT INTO employees (Id, Name, Department, Salary, Gender, Age, City) VALUES (1003, '王五', 'Finance', 50000, '男', 28, '广州');
INSERT INTO employees (Id, Name, Department, Salary, Gender, Age, City) VALUES (1004, '赵六', 'Finance', 50000, '男', 28, '深圳');
INSERT INTO employees (Id, Name, Department, Salary, Gender, Age, City) VALUES (1005, '孙七', 'HR', 75000, '女', 26, '北京');
复制
如何在MySQL中使用WHERE子句?复制
以下是使用MySQL数据库中的WHERE子句的语法。
WHERE 条件;
复制
条件: 必须满足的条件,以便选择行。
带有单个条件的WHERE子句
让我们从一个非常基本的示例开始,即在WHERE子句中仅使用一个条件。在下面的示例中,我们使用WHERE子句从员工表中过滤结果。下面的SELECT语句将返回员工表中所有部门为HR的记录。由于我们在FROM子句之前使用了*,SELECT语句将返回员工表中的所有列。
SELECT * FROM employees WHERE Department = 'HR';
复制
复制
执行上述SELECT语句时,它将返回HR部门的所有员工,如下图所示。
使用AND条件的WHERE子句
现在我们将看到如何在MySQL中使用带有AND条件的WHERE子句。我们的要求是从员工表中获取性别为男且工资大于35000的所有员工。这意味着我们需要编写一个SQL语句,该语句应返回以下记录作为输出。
SELECT * FROM employees WHERE Gender = '男' AND Salary > 35000;
复制
复制
执行上述SELECT语句时,它将返回以下结果集,其中包括所有性别为男且工资大于35000的员工。
使用OR条件的WHERE子句
现在我们将看到如何在MySQL中使用带有OR条件的WHERE子句。我们的要求是从员工表中获取性别为女或部门为IT的所有员工。这意味着我们需要编写一个SQL语句,该语句应返回以下记录作为输出。
复制
SELECT * FROM employees WHERE Gender = '女' OR Department = 'IT';
复制
执行上述SELECT语句时,它将返回以下结果集,其中包括所有性别为女的员工以及所有属于IT部门的员工。复制
在MySQL中同时使用AND和OR条件的WHERE子句
在一个SQL语句中同时使用“AND”和“OR”条件也是可能的。以下示例使用WHERE子句定义多个条件,使用AND和OR条件。以下SQL查询将返回所有部门为IT或性别为女且工资大于35000的员工。
复制
SELECT * FROM employees WHERE (Gender = '女' OR Department = 'IT') AND Salary > 35000;
复制
执行上述SQL语句时,它将返回以下结果集。复制
带有UPDATE语句的WHERE子句
在MySQL数据库中,也可以在UPDATE语句中使用WHERE子句,即根据某些条件更新数据。让我们通过一个示例来理解这一点。我们的要求是将所有IT部门员工的工资增加2000。在更新IT部门员工的工资之前,让我们先通过执行以下SQL语句查看这些员工的当前工资。
复制
SELECT * FROM employees WHERE Department = 'IT';
复制
它将给出以下结果。复制
现在,执行以下带有WHERE子句的UPDATE SQL语句并查看结果。
复制
UPDATE employees SET Salary = Salary + 2000 WHERE Department = 'IT';
复制
可能在执行上述UPDATE语句时,您会收到以下错误。复制
如上图所示,它抱怨您正在使用安全更新模式,并且您尝试在没有使用KEY列的WHERE子句的情况下更新表。这意味着您在没有使用主键列的情况下更新表中的数据。为了避免上述错误,我们需要设置SQL_SAFE_UPDATES=0
。因此,执行如下所示的UPDATE语句。
复制
SET SQL_SAFE_UPDATES=0;
UPDATE employees SET Salary = Salary + 2000 WHERE Department = 'IT';
复制
现在,您将不会收到任何错误,并且它将按预期更新员工表中的数据。为了验证这一点,再次执行以下SELECT语句。复制
复制
SELECT * FROM employees WHERE Department = 'IT';
复制
复制
如上图所示,IT部门员工的工资增加了2000,如预期的那样。
带有DELETE语句的WHERE子句
在MySQL数据库中,也可以在DELETE语句中使用WHERE子句,即根据某些条件删除数据。让我们通过一个示例来理解这一点。我们的要求是删除所有HR部门的员工。以下DELETE SQL语句将执行相同操作。
DELETE FROM employees WHERE Department = 'HR';
复制
复制
执行上述语句后,它将从员工表中删除所有HR部门的员工。为了验证这一点,执行以下SQL语句。
SELECT * FROM employees;
复制
复制
执行上述SQL SELECT语句后,您将获得以下结果,您可以看到所有HR部门的员工都从表中删除了。