本文概述
- 1.使用Select语句的子查询
- 2.带有INSERT语句的子查询
- 3.带有UPDATE语句的子查询
- 4.带有DELETE语句的子查询
重要规则:
- 子查询可以放置在许多SQL子句中, 例如WHERE子句, FROM子句, HAVING子句。
- 你可以将子查询与SELECT, UPDATE, INSERT, DELETE语句以及=, < , > , > =, < =, IN, BETWEEN等运算符一起使用。
- 子查询是另一个查询中的查询。外部查询称为主查询, 内部查询称为子查询。
- 子查询在比较运算符的右侧。
- 子查询括在括号中。
- 在子查询中, 不能使用ORDER BY命令。但是GROUP BY命令可用于执行与ORDER BY命令相同的功能。
句法
SELECT column_nameFROM table_nameWHERE column_name expression operator ( SELECT column_namefrom table_name WHERE ... );
例
考虑EMPLOYEE表具有以下记录:
ID | NAME | 年龄 | 地址 | 薪水 |
---|---|---|---|---|
1 | John | 20 | US | 2000.00 |
2 | Stephan | 26 | Dubai | 1500.00 |
3 | David | 27 | Bangkok | 2000.00 |
4 | Alina | 29 | UK | 6500.00 |
5 | Kathrin | 34 | Bangalore | 8500.00 |
6 | Harry | 42 | China | 4500.00 |
7 | Jackson | 25 | Mizoram | 10000.00 |
SELECT * FROM EMPLOYEEWHERE ID IN (SELECT ID FROM EMPLOYEE WHERE SALARY >
4500);
这将产生以下结果:
ID | NAME | 年龄 | 地址 | 薪水 |
---|---|---|---|---|
4 | Alina | 29 | UK | 6500.00 |
5 | Kathrin | 34 | Bangalore | 8500.00 |
7 | Jackson | 25 | Mizoram | 10000.00 |
- SQL子查询也可以与Insert语句一起使用。在insert语句中, 从子查询返回的数据用于插入到另一个表中。
- 在子查询中, 可以使用任何字符, 日期函数来修改所选数据。
INSERT INTO table_name (column1, column2, column3....) SELECT *FROM table_nameWHERE VALUE OPERATOR
例
考虑一个与EMPLOYEE类似的表EMPLOYEE_BKP。
现在, 使用以下语法将完整的EMPLOYEE表复制到EMPLOYEE_BKP表中。
INSERT INTO EMPLOYEE_BKPSELECT * FROM EMPLOYEE WHERE ID IN (SELECT ID FROM EMPLOYEE);
3.带有UPDATE语句的子查询SQL的子查询可以与Update语句一起使用。当子查询与Update语句一起使用时, 可以更新表中的单列或多列。
句法
UPDATE tableSET column_name = new_valueWHERE VALUE OPERATOR(SELECT COLUMN_NAMEFROM TABLE_NAMEWHERE condition);
例
假设我们有一个EMPLOYEE_BKP表, 它是EMPLOYEE表的备份。给定的示例对AGE大于或等于29的所有雇员在EMPLOYEE表中将SALARY更新.25倍。
UPDATE EMPLOYEESET SALARY = SALARY * 0.25WHERE AGE IN (SELECT AGE FROM CUSTOMERS_BKPWHERE AGE >
= 29);
这将影响三行, 最后, EMPLOYEE表将具有以下记录。
ID | NAME | 年龄 | 地址 | 薪水 |
---|---|---|---|---|
1 | John | 20 | US | 2000.00 |
2 | Stephan | 26 | Dubai | 1500.00 |
3 | David | 27 | Bangkok | 2000.00 |
4 | Alina | 29 | UK | 1625.00 |
5 | Kathrin | 34 | Bangalore | 2125.00 |
6 | Harry | 42 | China | 1125.00 |
7 | Jackson | 25 | Mizoram | 10000.00 |
句法
DELETE FROM TABLE_NAMEWHERE VALUE OPERATOR(SELECT COLUMN_NAMEFROM TABLE_NAMEWHERE condition);
例
【DBMS SQL子查询】假设我们有一个EMPLOYEE_BKP表, 它是EMPLOYEE表的备份。给定的示例从AGE大于或等于29的所有EMPLOYEE中删除EMPLOYEE表中的记录。
DELETE FROM EMPLOYEEWHERE AGE IN (SELECT AGE FROM EMPLOYEE_BKPWHERE AGE >
= 29 );
这将影响三行, 最后, EMPLOYEE表将具有以下记录。
ID | NAME | 年龄 | 地址 | 薪水 |
---|---|---|---|---|
1 | John | 20 | US | 2000.00 |
2 | Stephan | 26 | Dubai | 1500.00 |
3 | David | 27 | Bangkok | 2000.00 |
7 | Jackson | 25 | Mizoram | 10000.00 |
推荐阅读
- DBMS SQL表
- DBMS SQL集合操作
- SQL SELECT语句
- DBMS SQL运算符
- DBMS SQL联接查询
- DBMS SQL介绍
- DBMS SQL INSERT语句
- DBMS SQL索引
- DBMS SQL DELETE语句