MySQL(22)如何使用WHERE子句进行条件查询?

51 阅读3分钟

使用 WHERE 子句可以对数据库查询结果进行过滤,只返回满足特定条件的记录。WHERE 子句可以与各种运算符和逻辑条件一起使用,包括比较运算符(如 =><)、逻辑运算符(如 ANDORNOT)、集合运算符(如 INBETWEEN)以及模式匹配运算符(如 LIKE)。

基本语法

SELECT column1, column2, ...
FROM table_name
WHERE condition;

示例数据库和表结构

假设我们有一个公司数据库,其中有两个表:employeesdepartments

-- 创建数据库
CREATE DATABASE company;

-- 选择数据库
USE company;

-- 创建表 departments
CREATE TABLE departments (
    dept_id INT AUTO_INCREMENT PRIMARY KEY,
    dept_name VARCHAR(100) NOT NULL
);

-- 创建表 employees
CREATE TABLE employees (
    emp_id INT AUTO_INCREMENT PRIMARY KEY,
    emp_name VARCHAR(100) NOT NULL,
    emp_position VARCHAR(100),
    emp_salary DECIMAL(10, 2),
    hire_date DATE,
    dept_id INT,
    FOREIGN KEY (dept_id) REFERENCES departments(dept_id)
);

-- 插入示例数据到 departments 表
INSERT INTO departments (dept_name)
VALUES 
('HR'),
('Engineering');

-- 插入示例数据到 employees 表
INSERT INTO employees (emp_name, emp_position, emp_salary, hire_date, dept_id)
VALUES 
('John Doe', 'Manager', 75000.00, '2023-10-01', 1),
('Jane Smith', 'Developer', 60000.00, '2023-09-01', 2),
('Alice Johnson', 'Analyst', 50000.00, '2023-08-01', 1),
('Bob Brown', 'Developer', 70000.00, '2023-07-01', 2);

使用 WHERE 子句的示例

1. 简单条件查询

查询 employees 表中薪水大于 60000 的员工:

SELECT * FROM employees
WHERE emp_salary > 60000;

结果:

emp_id | emp_name   | emp_position | emp_salary | hire_date  | dept_id
-------|------------|--------------|------------|------------|--------
1      | John Doe   | Manager      | 75000.00   | 2023-10-01 | 1
4      | Bob Brown  | Developer    | 70000.00   | 2023-07-01 | 2

2. 使用 AND 运算符

查询 employees 表中薪水大于 60000 且部门 ID 为 2 的员工:

SELECT * FROM employees
WHERE emp_salary > 60000 AND dept_id = 2;

结果:

emp_id | emp_name   | emp_position | emp_salary | hire_date  | dept_id
-------|------------|--------------|------------|------------|--------
4      | Bob Brown  | Developer    | 70000.00   | 2023-07-01 | 2

3. 使用 OR 运算符

查询 employees 表中薪水大于 60000 或职位为 "Analyst" 的员工:

SELECT * FROM employees
WHERE emp_salary > 60000 OR emp_position = 'Analyst';

结果:

emp_id | emp_name      | emp_position | emp_salary | hire_date  | dept_id
-------|---------------|--------------|------------|------------|--------
1      | John Doe      | Manager      | 75000.00   | 2023-10-01 | 1
3      | Alice Johnson | Analyst      | 50000.00   | 2023-08-01 | 1
4      | Bob Brown     | Developer    | 70000.00   | 2023-07-01 | 2

4. 使用 IN 运算符

查询 employees 表中部门 ID 为 1 或 2 的员工:

SELECT * FROM employees
WHERE dept_id IN (1, 2);

结果:

emp_id | emp_name      | emp_position | emp_salary | hire_date  | dept_id
-------|---------------|--------------|------------|------------|--------
1      | John Doe      | Manager      | 75000.00   | 2023-10-01 | 1
2      | Jane Smith    | Developer    | 60000.00   | 2023-09-01 | 2
3      | Alice Johnson | Analyst      | 50000.00   | 2023-08-01 | 1
4      | Bob Brown     | Developer    | 70000.00   | 2023-07-01 | 2

5. 使用 BETWEEN 运算符

查询 employees 表中薪水在 50000 到 70000 之间的员工:

SELECT * FROM employees
WHERE emp_salary BETWEEN 50000 AND 70000;

结果:

emp_id | emp_name      | emp_position | emp_salary | hire_date  | dept_id
-------|---------------|--------------|------------|------------|--------
2      | Jane Smith    | Developer    | 60000.00   | 2023-09-01 | 2
3      | Alice Johnson | Analyst      | 50000.00   | 2023-08-01 | 1
4      | Bob Brown     | Developer    | 70000.00   | 2023-07-01 | 2

6. 使用 LIKE 运算符

查询 employees 表中名字以 'J' 开头的员工:

SELECT * FROM employees
WHERE emp_name LIKE 'J%';

结果:

emp_id | emp_name   | emp_position | emp_salary | hire_date  | dept_id
-------|------------|--------------|------------|------------|--------
1      | John Doe   | Manager      | 75000.00   | 2023-10-01 | 1
2      | Jane Smith | Developer    | 60000.00   | 2023-09-01 | 2

7. 使用 IS NULL 条件

查询 employees 表中 dept_id 为 NULL 的员工:

SELECT * FROM employees
WHERE dept_id IS NULL;

假设插入了一个没填 dept_id 的数据:

INSERT INTO employees (emp_name, emp_position, emp_salary, hire_date)
VALUES ('Charlie Brown', 'Tester', 55000.00, '2023-11-01');

结果:

emp_id | emp_name      | emp_position | emp_salary | hire_date  | dept_id
-------|---------------|--------------|------------|------------|--------
5      | Charlie Brown | Tester       | 55000.00   | 2023-11-01 | NULL

小结

通过使用 WHERE 子句,您可以在 SQL 查询中应用各种条件,以便只返回满足特定条件的记录。上述示例展示了如何使用比较运算符、逻辑运算符、集合运算符和模式匹配运算符来进行条件查询。这些操作是复杂查询和数据分析的重要工具,可以帮助您从数据库中提取所需的信息。