子查询

2017-11-30  本文已影响0人  一江碎月

嵌套在其他查询中的查询叫子查询

  1. 使用到 WHERE 子句中时,子查询必须用括号括起来

  2. 子查询在 SELECT 子句中只能有一个列,除非在主查询中有多列,与子查询的所选列进行比较。

  3. 子查询返回多于一行时,只能与多值运算符一起使用,如 IN 运算符。

  4. 子查询与可以 SELECT , UPDATE , INSERT , DELETE 一直使用。

作为条件

子查询做为条件时,从内往外执行

SELECT name FROM artists WHERE ArtistId IN (
       SELECT DISTINCT ArtistId FROM albums GROUP BY ArtistId HAVING count(*)>4 -- 查找记录数大于 4 的 ArtistId
)
INSERT INTO albums_bak
       select * from albums
;
INSERT INTO albums_bak(AlbumId,Title,ArtistId)
       select ArtistId,Title,AlbumId from albums
;

作为返回列

子查询也可做为返回列。作为返回列,子查询从外往内执行

作为返回列时,需要使用 () 括赶来。

SELECT ArtistId, name,(SELECT COUNT(*) FROM albums WHERE albums.[ArtistId] = artists.[ArtistId]) AS num FROM artists;

首先会从 artists 表中检索出每一行,将每行的 ArtistId 传入内层 SELECT语句中,再执行内层的 SELECT,并将结果做为外层的一列结果值返回。

上一篇 下一篇

猜你喜欢

热点阅读