子查询是一个强大的概念,允许您在WHERE
子句中使用另一个查询的结果。这允许您将动态值传递给WHERE
子句,因为该值将取决于查询的结果。
以下是子查询的示例:
SELECT * FROM actor
WHERE actor_id IN
(SELECT actor_id FROM film_actor
where film_id = 2);
结果:

在上面的示例中,子查询括在括号中。
我们检索谁在影片中出现了所有演员的细节film_id
的2
。我们可以这样做,因为film_actor
表包含actor_id
和film_id
列。
子查询也可以称为“内部查询”或“内部选择”。包含子查询的语句也可以称为“外部查询”或“外部选择”。
嵌套子查询
如果需要,可以将子查询嵌套在另一个子查询中。
在上面的例子中,我们不得不使用film_id
因为该film_actor
表不包含电影标题。如果我们可以使用电影标题而不是必须记住我们需要查看的每部电影的电影ID,那将更好。这是嵌套子查询可以派上用场的地方。
我们可以使用这样的嵌套子查询:
SELECT * FROM actor
WHERE actor_id IN
(SELECT actor_id FROM film_actor
where film_id =
(select film_id FROM actor
WHERE title= “Ace Goldfinger”)
);
结果:

上面的示例使用嵌套子查询film_id
从film
表中检索title
等于的表Ace Goldfinger
。这恰好与前一个例子中的电影相同(它film_id
是2),因此,我们获得与前一个示例相同的演员列表。
所以,现在我们需要做的就是想一个电影片头,我们可以找回它的演员 - 不需要试着记住电影ID。








暂无数据