版权声明
- 本文原创作者:清风不渡
- 博客地址:https://blog.csdn.net/WXKKang
一、子查询
子查询(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 操作符可以用在子查询中
1、基本语法
如果需要在SELECT语句中使用子查询,基本语法如下:
SELECT column_name [, column_name ]
FROM table1 [, table2 ]
WHERE column_name OPERATOR
(SELECT column_name [, column_name ]
FROM table1 [, table2 ]
[WHERE])
在INSERT 语句中使用子查询,就可以将子查询返回的数据插入到其他表中,子查询中选取的数据可以被任何字符、日期或者数值函数所修饰,基本语法如下所示:
INSERT INTO table_name [ (column1 [, column2 ]) ]
SELECT [ *|column1 [, column2 ]
FROM table1 [, table2 ]
[ WHERE VALUE OPERATOR ]
在UPDATE语句中使用子查询的时候,既可以更新单个列,也可更新多个列,基本语法如下:
UPDATE table
SET column_name = new_value
[ WHERE OPERATOR [ VALUE ]
(SELECT COLUMN_NAME
FROM TABLE_NAME)
[ WHERE) ]
在DELETE语句中使用子查询的时候,既可以删除单个列,也可删除多个列,基本语法如下:
DELETE FROM TABLE_NAME
[ WHERE OPERATOR [ VALUE ]
(SELECT COLUMN_NAME
FROM TABLE_NAME)
[ WHERE) ]