MySQL DISTINCT 子句
在 MySQL 中,DISTINCT 子句用于返回唯一不同的值。如果在 SELECT 语句中,不同的列具有相同的值,则只返回一个该值。
举个例子,我们有如下一张表:
CREATE TABLE employees (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
department VARCHAR(50),
salary DECIMAL(10,2)
);
INSERT INTO employees (name, department, salary) VALUES
('John Doe', 'Marketing', 5000.00),
('Jane Smith', 'Finance', 6000.00),
('John Doe', 'IT', 5500.00),
('Jane Smith', 'Marketing', 4500.00);
现在如果我们需要查询所有员工所在的部门名称,我们可以使用如下的 SELECT 语句:
SELECT department FROM employees;
这个查询会返回所有员工所在的部门名称,可能会有重复:
+------------+
| department |
+------------+
| Marketing |
| Finance |
| IT |
| Marketing |
+------------+
如果我们想要去掉重复的部门名称,只返回不同的部门,我们可以使用 DISTINCT 子句:
SELECT DISTINCT department FROM employees;
这个查询会返回所有员工所在的部门名称,去掉了重复的名称:
+------------+
| department |
+------------+
| Marketing |
| Finance |
| IT |
+------------+
MySQL WHERE 子句
WHERE 子句用于从表中选择满足条件的数据。下面是一个简单的示例:
SELECT * FROM employees WHERE department='Marketing';
这个查询只返回部门为 “Marketing” 的员工:
+----+----------+------------+---------+
| id | name | department | salary |
+----+----------+------------+---------+
| 1 | John Doe | Marketing | 5000.00 |
| 4 | Jane Smith | Marketing | 4500.00 |
+----+----------+------------+---------+
使用多个 WHERE 条件
可以使用 AND 和 OR 运算符,将多个 WHERE 条件结合在一起。下面是一个使用 AND 运算符的示例:
SELECT * FROM employees WHERE department='Marketing' AND salary > 4000;
这个查询会返回部门为 “Marketing” 且薪水大于 4000 的员工:
+----+----------+------------+---------+
| id | name | department | salary |
+----+----------+------------+---------+
| 1 | John Doe | Marketing | 5000.00 |
| 4 | Jane Smith | Marketing | 4500.00 |
+----+----------+------------+---------+
使用 IN 运算符
IN 运算符可以用于指定条件的多个值。下面是一个使用 IN 运算符的示例:
SELECT * FROM employees WHERE department IN ('Marketing', 'IT');
这个查询会返回部门为 “Marketing” 或 “IT” 的员工:
+----+----------+------------+---------+
| id | name | department | salary |
+----+----------+------------+---------+
| 1 | John Doe | Marketing | 5000.00 |
| 3 | John Doe | IT | 5500.00 |
| 4 | Jane Smith | Marketing | 4500.00 |
+----+----------+------------+---------+
MySQL LIMIT 子句
LIMIT 子句用于限制从表中返回的行数。下面是一个简单的示例:
SELECT * FROM employees LIMIT 2;
这个查询只返回前 2 行数据:
+----+--------------+------------+---------+
| id | name | department | salary |
+----+--------------+------------+---------+
| 1 | John Doe | Marketing | 5000.00 |
| 2 | Jane Smith | Finance | 6000.00 |
+----+--------------+------------+---------+
如果我们希望跳过前 2 行,返回接下来的 2 行数据,可以使用 OFFSET 子句:
SELECT * FROM employees LIMIT 2 OFFSET 2;
这个查询会跳过前 2 行,返回接下来的 2 行数据:
+----+----------+------------+---------+
| id | name | department | salary |
+----+----------+------------+---------+
| 3 | John Doe | IT | 5500.00 |
| 4 | Jane Smith | Marketing | 4500.00 |
+----+----------+------------+---------+
将 MySQL DISTINCT 子句与 WHERE 和 LIMIT 子句一起使用
我们也可以将 DISTINCT 子句与 WHERE 和 LIMIT 子句一起使用,来实现更加灵活的查询。下面是一个使用 WHERE、DISTINCT 和 LIMIT 子句的示例:
SELECT DISTINCT department FROM employees WHERE salary > 5000 LIMIT 2;
这个查询会返回薪水大于 5000 的部门名称,最多返回前 2 个不同的名称:
+------------+
| department |
+------------+
| IT |
| Finance |
+------------+
总结
MySQL 中的 DISTINCT 子句用于返回唯一不同的值,WHERE 子句用于从表中选择满足条件的数据,LIMIT 子句用于限制从表中返回的行数。我们也可以将这些子句结合在一起使用,实现更加灵活的查询。