我是靠谱客的博主 激情烤鸡,最近开发中收集的这篇文章主要介绍select嵌套查询_SQL基础知识——子查询,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

什么是子查询

子查询(Sub Query)或者说内查询(Inner Query),也可以称作嵌套查询(Nested Query),是一种嵌套在其他 SQL 查询的 WHERE 子句中的查询。

子查询用于为主查询返回其所需数据,或者对检索数据进行进一步的限制。

子查询可以在 SELECT、INSERT、UPDATE 和 DELETE 语句中,同 =、、>=、<=、IN、BETWEEN 等运算符一起使用。

使用子查询必须遵循以下几个规则:

  • 子查询必须括在圆括号中。
  • 子查询的 SELECT 子句中只能有一个列,除非主查询中有多个列,用于与子查询选中的列相比较。
  • 子查询不能使用 ORDER BY,不过主查询可以。在子查询中,GROUP BY 可以起到同 ORDER BY 相同的作用。
  • 返回多行数据的子查询只能同多值操作符一起使用,比如 IN 操作符。
  • SELECT 列表中不能包含任何对 BLOB、ARRAY、CLOB 或者 NCLOB 类型值的引用。
  • 子查询不能直接用在集合函数中。
  • BETWEEN 操作符不能同子查询一起使用,但是 BETWEEN 操作符可以用在子查询中。

SELECT子查询语句

通常情况下子查询都与 SELECT 语句一起使用,其基本语法如下所示:

SELECT column_name [,column_name]FROM table1 [,table2]WHERE column_name OPERATOR(SELECT column_name [,column_name] FROM table1 [,table2 ][WHERE])

示例:

考虑 Customers表和Orders表,表中记录如下所示:

9684d05fbff91c16a3fa4e3981d9e0ca.png

Customers表

00e5237e3da167f42b3b3ce51728ee4e.png

Orders表

现在,让我们试一下在 SELECT 语句中进行子查询:

SELECT * FROM CustomersWHERE 客户ID IN (SELECT 客户ID FROM OrdersWHERE 员工ID=9)

上述语句的执行结果如下所示:

c354a23835402f27f0d7fb7dcbc4b35a.png

上述语句是先获取订单表Orders中员工ID=9的发货记录,我们发现有两条记录,其中这两条记录对应的客户ID是3和4,而在外层客户Customers表中我们需要找到Orders表中返回的客户ID是3和4所对应的记录,那就是我们查询出的结果了。

INSERT 子查询语句

子查询还可以用在 INSERT 语句中。INSERT 语句可以将子查询返回的数据插入到其他表中。子查询中选取的数据可以被任何字符、日期或者数值函数所修饰。

其基本语法如下所示:

INSERT INTO table_name [(column1 [,column2])] SELECT [*|column1 [,column2] FROM table1 [,table2][WHERE VALUE OPERATOR]

示例:

考虑与 Customers表拥有相似结构的 Customers_bak表。现在要将 上面查询的结果插入到Customers_bak表中

INSERT INTO Customers_bakSELECT * FROM CustomersWHERE 客户ID IN (SELECT 客户ID FROM OrdersWHERE 员工ID=9)

查询一下Customers_bak的结果,会发现和上面的结果一致。

UPDATE子查询语句

子查询可以用在 UPDATE 语句中。当子查询同 UPDATE 一起使用的时候,既可以更新单个列,也可更新多个列。

其基本语法如下:

UPDATE tableSET column_name = new_value[WHERE OPERATOR [VALUE](SELECT COLUMN_NAME FROM TABLE_NAME)[WHERE)]

示例:

下面的示例将 Customers表中在Orders表里有发货的客户,他们所在的城市要加一个“市”字。

UPDATE CustomersSET 城市=城市+'市'WHERE 客户ID IN(SELECT 客户ID FROM Orders)

这将影响4行数据,随后 Customers表中的记录将如下所示:

6b4bee2bfc356ec4a0750479e780fdef.png

DELETE 子查询语句

如同前面提到的其他语句一样,子查询还可以同 DELETE 语句一起使用。

其基本语法如下所示:

DELETE FROM TABLE_NAME[ WHERE OPERATOR [VALUE](SELECT COLUMN_NAME FROM TABLE_NAME)[WHERE)]

示例:

假设我们想删除在Orders表中有购买记录的客户信息,可以这样写

DELETE FROM CustomersWHERE 客户ID IN (SELECT 客户ID FROM Orders)

这将影响4行数据,随后 Customers表中的记录将如下所示:

35ecdf6a67561ff81bca30e976ae523e.png

批注

子查询在我们平时的查询中用的比较多,可以很方便的将有关联的内容写在子查询中,然后将子查询的内容返回给主查询。但是子查询也不可乱用,随着对SQL语句的进一步掌握,有些同学比较喜欢写多层嵌套的子查询。这对于数据库实际上是很大的一种资源消耗,原则上子查询嵌套不要超过三层。超过的话可以考虑使用临时表将子查询结果先保存,再和其他查询进行关联。

最后

以上就是激情烤鸡为你收集整理的select嵌套查询_SQL基础知识——子查询的全部内容,希望文章能够帮你解决select嵌套查询_SQL基础知识——子查询所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部