子查询
子查询或内部查询或嵌套查询是在另一个sqlite查询内嵌入在WHERE子句中的查询。
使用子查询返回的数据将被用在主查询中作为条件,以进一步限制要检索的数据。
子查询可以与SELECT、INSERT、UPDATE和DELETE语句一起使用,可伴随着使用运算符如=、<、>、>=、<=、IN、BETWEEN等。
子查询必须遵循的几个规则:
- 子查询必须用括号括起来。
- 子查询在SELECT子句只能有一个列,除非在主查询中有多列,与子查询的所选列进行比较。
- ORDER BY不能用在子查询中,虽然主查询可以使用ORDER BY。可以在子查询中使用GROUP BY,功能与ORDER BY相同。
- 子查询返回多余一行,只能与多值运算符一起使用,如IN运算符。
- BETWEEN运算符不能与子查询一起使用,但是,BETWEEN可在子查询内使用。
SELECT语句中的子查询
-- 语法 SELECT * FROM table_name1[,table_name2] WHERE column_name OPERATOR ( SELECT column_name1[,column_name2] FROM table_name[,table_name2] WHERE [condition] ); -- 实例 SELECT * FROM link_men WHERE ID IN ( SELECT ID FROM link_men WHERE SALARY > 5000 );
INSERT语句中的子查询
-- 语法 INSERT INTO table_name [ (column1 [,column2 ]) ] SELECT [ (column1 [,column2 ]) ] FROM table_name1[,column_name2] FROM table_name1[,table_name2] WHERE [condition] ); -- 实例 INSERT INTO link_men SELECT * FROM link_men WHERE ID IN ( SELECT ID FROM link_men WHERE SALARY > 5000 );
UPDATE语句中的子查询
-- 语法 UPDATE table_name SET column_name = new_value WHERE column_name OPERATOR ( SELECT column_name1[,table_name2] WHERE [condition] ); -- 实例 UPDATE link_men SET SALARY = SALARY * 0.50 WHERE AGE IN ( SELECT AGE FROM link_men WHERE AGE > 25 );
DELETE语句中的子查询
-- 语法 DELETE FROM table_name WHERE column_name OPERATOR ( SELECT column_name1[,table_name2] WHERE [condition] ); -- 实例 DELETE FROM link_men WHERE AGE IN ( SELECT AGE FROM link_men WHERE AGE > 25 );