子查詢是另一個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 |