SQL子查詢

子查詢是另一個SQL查詢中的查詢,並嵌入在WHERE子句中。

重要規則:

  • 子查詢可以放在許多SQL子句中,如WHERE子句,FROM子句,HAVING子句。
  • 可以將子查詢與SELECTUPDATEINSERTDELETE語句以及=<>> =<=INBETWEEN等運算符一起使用。
  • 子查詢是另一個查詢中的查詢。外部查詢稱為主查詢,內部查詢稱為子查詢。
  • 子查詢位於比較運算符的右側。
  • 子查詢括在括弧中。
  • 在子查詢中,不能使用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

上一篇: SQL索引 下一篇: SQL子句