SELECT 语句中的子查询
子查询可以在 SELECT、INSERT、UPDATE 和 DELETE 语句中,同 =、<、>、>=、<=、IN、BETWEEN 等运算符一起使用。
使用子查询必须遵循以下几个规则:
子查询必须括在圆括号中,除子查询在 INSERT 语句中。
返回多行数据的子查询只能同多值操作符一起使用,比如 IN,ALL,ANY 操作符。
SELECT 列表中不能包含任何对 BLOB、ARRAY、CLOB 或者 NCLOB 类型值的引用。
子查询不能直接用在聚合函数中。
BETWEEN 操作符不能同子查询一起使用,但是 BETWEEN 操作符可以用在子查询中。
演示数据库
在本教程中,我们将使用 LintCode 样本数据库。
下面是选自 "teachers" 教师表的数据:

下面是 "courses" 课程表的数据:

1 实例
查询 'Western Venom' 老师所教的所有课程信息。
SELECT * FROM courses WHERE teacher_id = (
SELECT id FROM teachers WHERE name = 'Western Venom'
);
执行输出结果
mysql> SELECT * FROM courses WHERE teacher_id = (
-> SELECT id FROM teachers WHERE name = 'Western Venom'
-> );
+----+-------------------------+----------------+-------------+------------+
| id | name | student_count | created_at | teacher_id |
+----+-------------------------+----------------+-------------+------------+
| 2 | System Design | 135 | 2020-07-18 | 3 |
| 3 | Django | 78 | 2020-02-29 | 3 |
| 6 | Artificial Intelligence | 166 | 2018-05-13 | 3 |
| 7 | Java P6+ | 78 | 2019-01-19 | 3 |
+----+-------------------------+----------------+-------------+------------+
4 rows in set (0.01 sec)
2 总结
通常情况下子查询都与 SELECT 语句一起使用,其基本语法如下所示:
SELECT column_name(s)
FROM table_name
WHERE column_name OPERATOR
( SELECT column_name(s)
FROM table_name )
其中
OPERATOR
表示 =、<、>、>=、<=、IN、BETWEEN 等运算符
练习题:SELECT 子查询
查询 'Big Data' 课程对应的老师姓名。
代码输入框:
SELECT name FROM teachers WHERE id = (
SELECT teacher_id FROM courses WHERE name = 'Big Data'
)
执行输出结果
+-----------------+
| name |
+-----------------+
| Eastern Heretic |
+-----------------+
Last updated
Was this helpful?