mysql where 多条件 in 子查询返回多个列表项

在MySQL中,WHERE子句用于从表中选择满足特定条件的行。当我们需要在查询中使用多个条件时,可以使用IN子句来指定多个条件。而当我们需要从另一个查询的结果集中选择多个值时,可以使用子查询。
本文将重点介绍如何在MySQL中使用WHERE子句和IN子查询返回多个列表项的方法。
1. 基本语法
先来看一下在MySQL中使用WHERE和IN子查询的基本语法:
SELECT column_name(s)
FROM table_name
WHERE column_name IN (SELECT column_name FROM another_table);
在这个语法中,SELECT column_name FROM another_table 是一个子查询,它会返回一个结果集,然后主查询选择这个结果集中包含的值。
2. 简单示例
接下来,我们通过一个简单的示例来说明如何在MySQL中使用WHERE和IN子查询返回多个列表项。
假设我们有两个表students和classes,分别包含学生和课程信息。我们要找出学生表中学习”Math”和”Science”这两门课程的学生。
首先,创建表并插入一些示例数据:
CREATE TABLE students (
id INT PRIMARY KEY,
name VARCHAR(50),
class_id INT
);
CREATE TABLE classes (
id INT PRIMARY KEY,
name VARCHAR(50)
);
INSERT INTO students VALUES (1, 'Alice', 1);
INSERT INTO students VALUES (2, 'Bob', 2);
INSERT INTO students VALUES (3, 'Charlie', 1);
INSERT INTO students VALUES (4, 'David', 3);
INSERT INTO classes VALUES (1, 'Math');
INSERT INTO classes VALUES (2, 'Science');
INSERT INTO classes VALUES (3, 'History');
然后,我们可以使用WHERE和IN子查询来获取想要的结果:
SELECT name
FROM students
WHERE class_id IN (
SELECT id
FROM classes
WHERE name IN ('Math', 'Science')
);
上述查询会返回学习”Math”或”Science”课程的学生的姓名,即Alice和Bob。
3. 多条件示例
除了上面的示例,我们还可以使用多个条件来筛选数据。下面是一个示例,找出同时学习”Math”和”History”课程的学生:
SELECT name
FROM students
WHERE class_id IN (
SELECT id
FROM classes
WHERE name = 'Math'
) AND class_id IN (
SELECT id
FROM classes
WHERE name = 'History'
);
这个查询会返回学习”Math”和”History”两门课程的学生的姓名,即David。
4. 结论
在MySQL中,我们可以通过在WHERE子句中使用IN子查询来返回多个列表项。
极客笔记