- 子查询
也称为嵌套查询,位于两个in个一个查询的 WHERE 子句里的查询,它返回的数据通常在主查询里作为一个条件,从而进一步数据库返回的数据
- 子查询使用遵守的规则
a、子查询必须位于圆括号内
b、子查询的SELECT子句中只能有一个列,除非主查询中的多个列,用于与子查询选中的列相比较
c、子查询不能使用 ORDER BY,不过主查询可以,在查询中,GROUP BY可以起到同 ORDER BY 相同的作用
d、返回多行数据的子查询只能同多值操作符一起使用,比如 IN 操作符
e、SELECT 列表中不能包含任何对 BLOB、ARRAY、CLOB 或者 NCLOB类型值的引用
f、子查询不能直接在用在集合函数中
g、BETWEEN 操作符不能同子查询一起使用,但是 BETWEEN 操作符可以在子查询中
- SELECT 语句中的子查询
语法
SELECT column_name [,column_name]
FROM table1 [,table2]
WHERE column_name OPERATOR
(SELECT column_name [,column_name]
FROM table1 [,table2]
[WHERE])
案例
找除薪水大于4500的数据
SELECT *
FROM CUSTOMERS
WHERE ID IN(
SELECT ID
FROM CUSTOMERS
WHERE SALARY > 4500)
- 子查询与INSERT语句
将子查询返回的数据插入到其他表中,子查询选区的数据可以被任何字符、日期或着数值函数所修饰(DML命令,需要使用COMMIT和ROLLBACK)
语法
INSERT INTO table_name [(column1 [,column2 ])]
SELECT [ * |column1 [,column2]]
FROM tabel [, table2]
[WHERE VALUE OPERATOR]
案例
按照上述的将表所有的数据插入新表
INSERT INTO CUSTOMERS_BKP
SELECT *
FROM CUSTOMERS
WHERE ID IN(
SELECT ID
FROM CUSTOMERS
)
- 子查询与UPDATE语句
更新列表
语法
UPDATE table
SET column_name = new_value
[WHERE OPERATOR[VALUE]]
(SELECT COLUMN_NAME
FROM TABLE_NAME)
[WHERE)]
示例
假设我们有一份 CUSTOMERS_BKP 表作为 CUSTOMERS 表的备份。
下面的示例将 CUSTOMERS 表中所有 AGE 大于或者等于 27 的客户的 SALARY 字段都变为了原来的 0.25 倍
UPDATE CUSTOMERS
SET SALARY = SALARY * 0.25
WHERE AGE IN (
SELECT AGE
FROM CUSTOMERS_BKP
WHERE AGE >= 27)
- 子查询与DELETE语句
语法
DELETE FROM TABLE_NAME
[WHERE OPERATOR [VALUE]]
(SELECT COLUMN_NAME
FROM TABLE_NAME
[WHERT)]
- 关联子查询
关联子查询是指一个包含对表的引用的子查询,该表也显示在外部查询中。通俗一点来讲,就是子查询引用到了主查询的数据