子查詢或內(nèi)部查詢或嵌套查詢是另一個SQL Server查詢內(nèi)的查詢,并嵌入在WHERE子句中。 子查詢用于返回將在主查詢中使用的數(shù)據(jù)作為進一步限制要檢索的數(shù)據(jù)的條件。
子查詢可以與SELECT,INSERT,UPDATE和DELETE語句以及諸如=,<,>,> =,<=,IN,BETWEEN等運算符一起使用。
子查詢必須遵循幾個規(guī)則
子查詢語句必須寫在括號內(nèi)。
子查詢必須包括SELECT子句和FROM子句。
子查詢可以使用WHERE,GROUP BY和HAVING子句。
子查詢不能使用COMPUTE或FOR BROWSE子句。
只有在使用了TOP子句時,才能使用ORDER BY子句。
您可以嵌套最多32個級別的子查詢。
子查詢最常用于SELECT語句,以下是基本語法:
SELECT column_name [, column_name ] FROM table1 [, table2 ] WHERE column_name OPERATOR (SELECT column_name [, column_name ] FROM table1 [, table2 ] [WHERE])
請參考具有以下記錄的CUSTOMERS表:
ID NAME AGE ADDRESS SALARY 1 Ramesh 32 Ahmedabad 2000.00 2 Khilan 25 Delhi 1500.00 3 kaushik 23 Kota 2000.00 4 Chaitali 25 Mumbai 6500.00 5 Hardik 27 Bhopal 8500.00 6 Komal 22 MP 4500.00 7 Muffy 24 Indore 10000.00
讓我們使用SELECT語句應(yīng)用以下子查詢:
SELECT * FROM CUSTOMERS WHERE ID IN (SELECT ID FROM CUSTOMERS WHERE SALARY > 4500)
上述命令將產(chǎn)生以下結(jié)果集:
ID NAME AGE ADDRESS SALARY 4 Chaitali 25 Mumbai 6500.00 5 Hardik 27 Bhopal 8500.00 7 Muffy 24 Indore 10000.00
子查詢也可以與INSERT語句一起使用。INSERT語句使用從子查詢返回的數(shù)據(jù)插入到另一個表中。可以使用字符,日期或數(shù)字函數(shù)中的任何一個修改子查詢中選定的數(shù)據(jù)。
下面是基本的語法。
INSERT INTO table_name [ (column1 [, column2 ]) ] SELECT [ *|column1 [, column2 ] FROM table1 [, table2 ] [ WHERE VALUE OPERATOR ]
創(chuàng)建一張命名為CUSTOMERS_BKP的表,表結(jié)構(gòu)與CUSTOMERS表相同,并將CUSTOMERS表的數(shù)據(jù)復(fù)制到CUSTOMERS_BKP表中。
以下是將完整的CUSTOMERS表數(shù)據(jù)復(fù)制到CUSTOMERS_BKP的語法:
INSERT INTO CUSTOMERS_BKP SELECT * FROM CUSTOMERS WHERE ID IN (SELECT ID FROM CUSTOMERS)
子查詢可以與UPDATE語句結(jié)合使用。 當使用帶有UPDATE語句的子查詢時,可以更新表中的單個或多個列。
以下是基本語法。
UPDATE table SET column_name = new_value [ WHERE OPERATOR [ VALUE ] (SELECT COLUMN_NAME FROM TABLE_NAME) [ WHERE) ]
以下命令對CUSTOMERS表中AGE大于或等于27的所有客戶的SALARY乘以0.25。
UPDATE CUSTOMERS SET SALARY = SALARY * 0.25 WHERE AGE IN (SELECT AGE FROM CUSTOMERS_BKP WHERE AGE >= 27 )
上述命令將產(chǎn)生以下結(jié)果集:
ID NAME AGE ADDRESS SALARY 1 Ramesh 32 Ahmedabad 500.00 2 Khilan 25 Delhi 1500.00 3 kaushik 23 Kota 2000.00 4 Chaitali 25 Mumbai 6500.00 5 Hardik 27 Bhopal 2125.00 6 Komal 22 MP 4500.00 7 Muffy 24 Indore 10000.00
子查詢可以與DELETE語句一起使用,就像上面提到的任何其他語句一樣。
以下是基本語法。
DELETE FROM TABLE_NAME [ WHERE OPERATOR [ VALUE ] (SELECT COLUMN_NAME FROM TABLE_NAME) [ WHERE) ]
以下命令將刪除CUSTOMERS表中所有的年齡大于或等于27的客戶的記錄。
DELETE FROM CUSTOMERS WHERE AGE IN (SELECT AGE FROM CUSTOMERS_BKP WHERE AGE >=27 )
上述命令將產(chǎn)生以下結(jié)果集:
ID NAME AGE ADDRESS SALARY 2 Khilan 25 Delhi 1500.00 3 kaushik 23 Kota 2000.00 4 Chaitali 25 Mumbai 6500.00 6 Komal 22 MP 4500.00 7 Muffy 24 Indore 10000.00
更多建議: