SQLite 子查询
子查询,又称为内部查询 或 嵌套查询,是在一个 SQLite 语句中的 WHERE 子句中嵌入另一个 SQL 查询语句
子查询 返回的数据可以被用在主查询中作为条件,以进一步限制要检索的数据
子查询的语法格式一般如下
[COMMAND] FROM tablename WHERE fieldname [op] ([sub query])
[COMMAND]可以是SELECT、INSERT、UPDATE和DELETE[op]可以是运算符=、<、>、>=、<=、IN等[sub query]就是一个子查询
例如下面的查询语句包含了一个子查询
SELECT * FROM tbl_employee WHERE id IN ( SELECT id FROM tbl_employee WHERE salary > 50000 );
这条语句的意思是先查询出 salary 大于 50000 的职工的 id 作为条件,筛选出这些人的所有信息
看起来比较简单,所以完全可以使用下面的语句代替
SELECT * FROM tbl_employee WHERE id > 50000;
但如果涉及到复杂的查询,最好的方法就是乖乖的使用子查询
子查询规则
使用子查询时必须遵循以下几个规则
-
子查询必须用括号括起来
-
子查询在 SELECT 子句中只能有一个列,除非在主查询中有多列,与子查询的所选列进行比较
-
ORDER BY不能用在子查询中,虽然主查询可以使用ORDER BY,但子查询中可以使用GROUP BY -
如果子查询返回多于一行,则只能与多值运算符一起使用,如
IN运算符 -
BETWEEN运算符不能与子查询一起使用,但是,BETWEEN可在子查询内使用
范例
子查询可以用在 SELECT、INSERT、UPDATE 和 DELETE 语句中