什么是子查询 子查询(Sub Query)或者说内查询(Inner Query),也可以称作嵌套查询(Nested Query),是一种嵌套在其他 SQL 查询的 WHERE 子句中的查询。 子查询用于为主查询返回其所需数据,或者对检索数据进行进一步的限制。 子查询可以在 SELECT、INSERT、UPDATE 和 DELETE 语句中,同 =、<、>、>=、<=、IN、BETWEEN 等运算符一起使用。 使用子查询必须遵循以下几个规则:
SELECT子查询语句通常情况下子查询都与 SELECT 语句一起使用,其基本语法如下所示:
示例数据表考虑 Customers表和Orders表,表中记录如下所示: 表Customers 表Orders 子查询实例 现在,让我们试一下在 SELECT 语句中进行子查询:
上述语句的执行结果如下所示: 上述语句是先获取订单表Orders中员工ID=9的发货记录,我们发现有两条记录,其中这两条记录对应的客户ID是3和4,而在外层客户Customers表中我们需要找到Orders表中返回的客户ID是3和4所对应的记录,那就是我们查询出的结果了。 注意:在WHERE子句中使用子查询(如这里所示),应该保证SELECT语句具有与WHERE子句中相同数目的列。通常,子查询将返回单个列并且与单个列匹配,但如果需要也可以使用多个列。 INSERT 子查询语句子查询还可以用在 INSERT 语句中。INSERT 语句可以将子查询返回的数据插入到其他表中。子查询中选取的数据可以被任何字符、日期或者数值函数所修饰。 其基本语法如下所示:
示例:考虑与 Customers表拥有相似结构的 Customers_bak表。现在要将 上面查询的结果插入到Customers_bak表中
查询一下Customers_bak的结果,会发现和上面的结果一致。 UPDATE子查询语句子查询可以用在 UPDATE 语句中。当子查询同 UPDATE 一起使用的时候,既可以更新单个列,也可更新多个列。 其基本语法如下:
示例:下面的示例将 Customers表中在Orders表里有发货的客户,他们所在的城市要加一个“市”字。
这将影响4行数据,随后 Customers表中的记录将如下所示: DELETE 子查询语句如同前面提到的其他语句一样,子查询还可以同 DELETE 语句一起使用。 其基本语法如下所示:
示例:假设我们想删除在Orders表中有购买记录的客户信息,可以这样写
这将影响4行数据,随后 Customers表中的记录将如下所示: 相关子查询 是指涉及外部查询的子查询 例如:要查询每个客户的订单数量,我们可以这样写:
结果为: 这里使用SELECT COUNT(*)对表中的行进行计数,并且通过提供一条WHERE子句来匹配某个特定的客户ID 。其中相关就是通过WHERE里面的匹配条件来确定联系的。
|
|