子查询是另一个SQL查询中的查询,并嵌入在WHERE
子句中。
重要规则:
WHERE
子句,FROM
子句,HAVING
子句。SELECT
,UPDATE
,INSERT
,DELETE
语句以及=
,<
,>
,>
=
,<=
,IN
,BETWEEN
等运算符一起使用。ORDER BY
命令。 但GROUP BY
命令可用于执行与ORDER BY
命令相同的功能。SQL子查询最常与Select
语句一起使用。
语法
SELECT column_name FROM table_name WHERE column_name expression operator ( SELECT column_name from table_name WHERE ... );
示例
假设EMPLOYEE
表有以下记录:
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
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
语句的子查询将是:
SELECT * FROM EMPLOYEE WHERE ID IN (SELECT ID FROM EMPLOYEE WHERE SALARY > 4500);
这将产生以下结果:
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
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_name WHERE VALUE OPERATOR
示例
假设有一个与EMPLOYEE
类似的表EMPLOYEE_BKP
。现在使用以下语法将完整的EMPLOYEE
表复制到EMPLOYEE_BKP
表中。
INSERT INTO EMPLOYEE_BKP SELECT * FROM EMPLOYEE WHERE ID IN (SELECT ID FROM EMPLOYEE);
SQL的子查询可以与Update
语句一起使用。 当子查询与Update
语句一起使用时,可以更新表中的单个列或多个列。
语法
UPDATE table SET column_name = new_value WHERE VALUE OPERATOR (SELECT COLUMN_NAME FROM TABLE_NAME WHERE condition);
示例
假设有一个EMPLOYEE_BKP
表,它是EMPLOYEE
表的备份。要在EMPLOYEE
表中为所有AGE
大于或等于29
的员工更新SALARY
值更新增加 0.25
倍。
UPDATE EMPLOYEE SET SALARY = SALARY * 0.25 WHERE AGE IN (SELECT AGE FROM CUSTOMERS_BKP WHERE AGE >= 29);
上面命令将影响三行,最后,EMPLOYEE
表的记录更新为如下。
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
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 |
SQL的子查询可以与Delete
语句一起使用,就像上面提到的任何其他语句一样。
语法
DELETE FROM TABLE_NAME WHERE VALUE OPERATOR (SELECT COLUMN_NAME FROM TABLE_NAME WHERE condition);
示例
假设有一张EMPLOYEE_BKP
表,它是EMPLOYEE
表的备份。要从EMPLOYEE
表中删除AGE
大于或等于29
的所有记录。参考以下语句 -
DELETE FROM EMPLOYEE WHERE AGE IN (SELECT AGE FROM EMPLOYEE_BKP WHERE AGE >= 29 );
这将影响三行,最后,EMPLOYEE
表将具有以下记录。
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
1 | John | 20 | US | 2000.00 |
2 | Stephan | 26 | Dubai | 1500.00 |
3 | David | 27 | Bangkok | 2000.00 |
7 | Jackson | 25 | Mizoram | 10000.00 |