首页 > 其他 > 详细

24 子查询的用法

时间:2021-06-19 22:57:45      阅读:26      评论:0      收藏:0      [点我收藏+]

24.1什么是子查询

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

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

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

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

· 子查询必须括在圆括号中。

· 子查询的SELECT子句中只能有一个列,除非主查询中有多个列,用于与子查询选中的列想比较。

· 子查询不能使用ORDER BY,不过主查询可以,在子查询中,GROUP BY可以起到同ORDER BY相同的作用。  

· 返回多行数据的子查询只能同多值操作符一起使用,比如IN操作符。

· SELECT列表中不能包含任何对BLOB、ARRAY、CLOB或者NCLOB类型值得引用。

·子查询不能直接用在集合函数中。

· BETWEEN操作符不能同子查询一起使用,但是BETWEEN操作符可以用在子查询中。

 

24.2 SELECT子查询语句

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

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

示例数据库中有“Customers”表和“Orders”表

在SELECT语句中进行子查询:

SELECT * FROM Customers
WHERE 客户 ID IN
(
SELECT 客户 ID FROM Orders
WHERE 员工 ID=9
);

 

24.3 INSERT子查询语句

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

其基本语法如下所示:

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

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

INSERT INTO Customers_bak
SELECT * FROM Customers
WHERE 客户 ID IN
(
SELECT 客户 ID FROM Orders
WHERE 员工 ID=9);

 

24.4 UNDATE子查询语句

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

其基本语法如下:

UNDATE table
SET column_name=new_value
[WHERE OPERATION [VALUE]
(SELECT column_name
FROM table-name)
[WHERE]
]

示例:

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

UPDATE Customers
SET 城市=城市+
WHERE 客户 ID IN
(SELECT 客户 ID FROM Orders); 

 

24.5 DELETE子查询语句

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

其基本语法如下:

DELETE FROM table_name
[WHERE OPERATOR [VALUE]
(SELECT column_name
FROM table_name)
[WHERE]
]

示例:删除在“Orders”表中有购买记录的客户信息

DELETE FROM Customers
WHERE 客户 ID IN
(SELECT 客户 ID FROM Orders);

 

24.6 批注

原则上子查询嵌套不要超过三层。超过的话可以考虑使用临时表将子查询结果先保存,再和其他查询进行关联。

24 子查询的用法

原文:https://www.cnblogs.com/yongzhao/p/14900778.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!