子查询或内部查询或嵌套查询是在另一个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[, table_name2]
    WHERE column_name OPERATOR
        SELECT column_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[, column_name2]
        FROM table_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[, column_name2]
        FROM table_name1[, table_name2]
        WHERE [condition]
-- 实例
DELETE FROM link_men
    WHERE AGE IN (
        SELECT AGE FROM link_men
        WHERE AGE > 25
                                    文章目录0 背景1 代码2 sql 语句分析2.1关键词解析:2.2 全语句解释:2.3 从任何一个节点出发查询整条链的数据
因为实际用到递归查询数据库表中结果,本想用其他语言实现递归select操作,但是发现sql语句自身也可以行递归查询,而且效率很高,因此就搜了相关的资料,发现网上很多的代码,但是几乎都没有注解。于是我就决定写一下注解,方便大家理解,使用和测试的环境为Qt,
连接数据库:
#ifndef CREATECONNECTION_H
#define CREATECONNEC
                                    SQLite是一款轻型的数据库,是关系型数据库(RDBMS)管理系统,它包含在一个相对小的C库中。目前在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix/Android/IOS等等主流的操作系统,同时能够跟很多程序语言相结合。
                                    SQLite 的 PRAGMA 命令是一个特殊的命令,可以用在 SQLite 环境内控制各种环境变量和状态标志。一个 PRAGMA 值可以被读取,也可以根据需求行设置。
2、 常用配置
2.1 auto_vacuum
2.1.1 VACUUM
 命令通过复制主数据库中的内容到一个临时数据库文件,然后清空主数据库,并从副本中重新载入原始的数据库文件。这消除了空闲页,把表中的数据排列为连续的,另外会清理数据库文件结构。如果表中没有明确的整型主键(), 命令可能会改变表中条目的行 ID()。命令只适用于主数据库
                                       查询或内部查询或嵌套查询是在另一个SQLite查询内嵌入在WHERE句中的查询。
   使用查询返回的数据将被用在主查询中作为条件,以一步限制要检索的数据。
   查询可以与SELECT、INSERT、UPDATE和DELETE语句一起使用,可伴随着使用运算符如=、&lt;、&gt;、&gt;=、&lt;=、IN、BETWEEN等。
   以下是查询必须遵循的几个规则:
INSERT INTO biao ( id, userID, Number, Modle )
VALUES
	( '', ( SELECT id FROM user WHERE userName = '王五' LIMIT 1 ), '', '' )
//sqlite中插入二制数据
//需要使用(?)...
其中limit 0,10中,0表示从第0条记录开始,10表示向下10条记录。
2、根据条件查找一个表,按某字段行排序
select * from table where name='XXX' order by id; 
其中id是表中的字段。