子查詢是另一個SQL查詢中的查詢,並嵌入在WHERE子句中。
重要規則:
- 子查詢可以放在許多SQL子句中,如
WHERE子句,FROM子句,HAVING子句。 - 可以將子查詢與
SELECT,UPDATE,INSERT,DELETE語句以及=,<,>,>=,<=,IN,BETWEEN等運算符一起使用。 - 子查詢是另一個查詢中的查詢。外部查詢稱為主查詢,內部查詢稱為子查詢。
- 子查詢位於比較運算符的右側。
- 子查詢括在括弧中。
- 在子查詢中,不能使用
ORDER BY命令。 但GROUP BY命令可用於執行與ORDER BY命令相同的功能。
1.帶有Select語句的子查詢
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 |
2.帶有INSERT語句的子查詢
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);
3.帶有UPDATE語句的子查詢
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 |
4.帶有DELETE語句的子查詢
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 |
