将子查询用于 WHERE 子句
子查询能够与 SELECT、INSERT、UPDATE 和 DELETE 语句一起使用。
下面以 SELECT 语句作为示例:
SELECT id, name FROM table1 WHERE id in ( SELECT id FROM table2); |
在上面所给的例子中,我们将子查询的结果作为一个集合,使用 in 成员测试运算来筛选出同时存在于 table1 和 table2 中的 id 。
注意:WHERE 子句中的子查询必须使用括号包围起来。待比较的数据应该与子查询的结果具有相同的列数。
子查询的结果为单条记录,则可以使用 =、<、>、>=、<=、IN、BETWEEN 等运算符。例如:
SELECT id, name FROM table1 WHERE id = ( SELECT id FROM table2 WHERE name = "xxx"); |
或者多列:
SELECT id, name FROM table1 WHERE (name, age) = ( SELECT name, age FROM table2 WHERE id = 3); |
当查询结果为多条记录时,只能使用 in 成员测试运算。
例如:
SELECT email FROM table1 WHERE id in ( SELECT id FROM table2); |
将子查询结果插入表中
我们可以将一个表的查询结果作为数据插入到另一个表中,例如:
INSERT INTO newtable SELECT * FROM oldtable WHERE id > 100; |
还可以选择特定的列:
INSERT INTO newtable (id, name) SELECT id, name FROM oldtable WHERE id < 50; |
我们注意到,这里的子查询语句不需要使用括号包围。