子查询或内部查询或嵌套查询是在另一个SQLite查询内嵌入在WHERE子句中的查询。
使用子查询返回的数据将被用在主查询中作为条件,以进一步限制要检索的数据。
子查询可以与SELECT、INSERT、UPDATE和DELETE语句一起使用,可伴随着使用运算符如=、<、>、>=、<=、IN、BETWEEN等。
以下是子查询必须遵循的几个规则:
-
子查询必须用括号括起来。
-
子查询在SELECT子句只能有一个列,除非在主查询中有多列,与子查询的所选列进行比较。
-
ORDER BY不能用在子查询中,虽然主查询可以使用ORDER BY。可以在子查询中使用GROUP BY,功能与ORDER BY相同。
-
子查询返回多于一行,只能与多值运算符一起使用,如IN运算符;
-
BETWEEN运算符不能与子查询一起使用,但是,BETWEEN可在子查询内使用。
SELECT 语句中的子查询使用
子查询通常与SELECT语句一起使用。基本语法如下:
SELECT column_name [, column_name ]
FROM table1 [, table2 ]
WHERE column_name OPERATOR
(SELECT column_name [, column_name ]
FROM table1 [, table2 ]
[WHERE])
假设COMPANY表有以下记录:
ID NAME AGE ADDRESS SALARY
---------- ---------- ---------- ---------- ----------
1 Paul 32 California 20000.0
2 Allen 25 Texas 15000.0
3 Teddy 23 Norway 20000.0
4 Mark 25 Rich-Mond 65000.0
5 David 27 Texas 85000.0
6 Kim 22 South-Hall 45000.0
7 James 24 Houston 10000.0
现在,让我们检查SELECT语句中的子查询使用:
sqlite> SELECT *
FROM COMPANY
WHERE ID IN (SELECT ID
FROM COMPANY
WHERE SALARY > 45000) ;
这将产生如下结果:
ID NAME AGE ADDRESS SALARY
---------- ---------- ---------- ---------- ----------
4 Mark 25 Rich-Mond 65000.0
5 David 27 Texas 85000.0
INSERT语句中的子查询使用
子查询也可以与 INSERT 语句一起使用。INSERT 语句使用子查询返回的数据插入到另一个表中。在子查询中所选择的数据可以用任何字符、日期或数字函数修改。
INSERT INTO table_name [ (column1 [, column2 ]) ]
SELECT [ *|column1 [, column2 ]
FROM table1 [, table2 ]
[ WHERE VALUE OPERATOR ]
实例
假设 COMPANY_BKP 的结构与 COMPANY 表相似,且可使用相同的 CREATE TABLE 进行创建,只是表名改为 COMPANY_BKP。现在把整个 COMPANY 表复制到 COMPANY_BKP,语法如下:
sqlite> INSERT INTO COMPANY_BKP
SELECT * FROM COMPANY
WHERE ID IN (SELECT ID
FROM COMPANY) ;
UPDATE语句中的子查询使用
UPDATE table
SET column_name = new_value
[ WHERE OPERATOR [ VALUE ]
(SELECT COLUMN_NAME
FROM TABLE_NAME)
[ WHERE) ]
假设,我们有 COMPANY_BKP 表,是 COMPANY 表的备份。
下面的实例把 COMPANY 表中所有 AGE 大于或等于 27 的客户的 SALARY 更新为原来的 0.50 倍:
sqlite> UPDATE COMPANY
SET SALARY = SALARY * 0.50
WHERE AGE IN (SELECT AGE FROM COMPANY_BKP
WHERE AGE >= 27 );
这将影响两行,最后COMPANY表中的记录如下:
ID NAME AGE ADDRESS SALARY
---------- ---------- ---------- ---------- ----------
1 Paul 32 California 10000.0
2 Allen 25 Texas 15000.0
3 Teddy 23 Norway 20000.0
4 Mark 25 Rich-Mond 65000.0
5 David 27 Texas 42500.0
6 Kim 22 South-Hall 45000.0
7 James 24 Houston 10000.0
DELETE 语句中的子查询使用
DELETE FROM TABLE_NAME
[ WHERE OPERATOR [ VALUE ]
(SELECT COLUMN_NAME
FROM TABLE_NAME)
[ WHERE) ]
sqlite> DELETE FROM COMPANY
WHERE AGE IN (SELECT AGE FROM COMPANY_BKP
WHERE AGE > 27 );
这将影响两行,最后COMPANY表中的记录如下:
ID NAME AGE ADDRESS SALARY
---------- ---------- ---------- ---------- ----------
2 Allen 25 Texas 15000.0
3 Teddy 23 Norway 20000.0
4 Mark 25 Rich-Mond 65000.0
5 David 27 Texas 42500.0
6 Kim 22 South-Hall 45000.0
7 James 24 Houston 10000.0
https://www.yuque.com/docs/share/eec5adea-b0eb-4872-a561-d727fb4620b2
SQLite
的 PRAGMA 命令是一个特殊的命令,可以用在
SQLite
环境内控制各种环境变量和状态标志。一个 PRAGMA 值可以被读取,也可以根据需求进行设置。
2、 常用配置
2.1 auto_vacuum
2.1.1 VACUUM
命令通过复制主数据库中的内容到一个临时数据库文件,然后清空主数据库,并从副本中重新载入原始的数据库文件。这消除了空闲页,把表中的数据排列为连续的,另外会清理数据库文件结构。如果表中没有明确的整型主键(), 命令可能会改变表中条目的行 ID()。命令只适用于主数据库
select
表1.*,表2.字段名 where 表1.字段名=表2.字段名;重命名为:
select
* A.字段名,B.字段名 from 表1 A inner 表2 B on A.字段名=B.字段名;
select
* 表1.字段名,表2.字段名 from 表1 inner 表2 on 表1.字段名=表2.字段名;
select
* from 表1 inner join 表2 on 表1.字段名=表2.字段名;
select
* from 表1,表2 where 表1.字段名=表2.字段名;
sql语句:
1.
select
count(*) FROM student//查询表中数据行数
2.
SELECT
sex,student_number FROM student where name=?//查询名字为《要查的名字》的性别,学号
查询demon
//查找表中所有学生人数
#define
SELECT
_STUDENT_MSG "
select
count(*) FROM student"
//查找某个学生的信息
#define
SELECT
_STUDENT_NAME "
SELECT
sex,st
每个数据库通常都包含多个表,而每个表又包含多条数据。要获取数据库中的数据,就需要SQL语言提供的查询语句
SELECT
。本章将讲解和
SELECT
语句相关的内容,其中包括
SELECT
基本形式、表达式、连接、分组、排序和去重、获取子集、
子查询
以及联合查询等。
3.1
SELECT
基本形式
本节将讲解
SELECT
语句的基本形式,其中包括基本完整形式、
SELECT
子句、FROM子句以及WHERE子句等
3.1.1 基本形式
以下是
SELECT
语法的基本完整形式:
SELECT
[DISTINCT] se..
SQLite
中的
SELECT
子句使用表达式在
SELECT
语句中可以只有
SELECT
子句不写FROM子句。这些表达式列表将被单次计算,生成一行,然后组成工作表。这对于测试和判断独立表达式很有用。例如,下面的SQL语句在
SELECT
语句中只使用到了
SELECT
子句:
SELECT
1+1,6.68,'Hello'运行程序,执行效果如图3.7所示。图3.7 运行效果...
if not exists(
select
* from ErrorConfig where Type='TryWaitSeconds')
begin
insert into ErrorConfig(Type,Value1)
values('TryWaitSeconds','3')
insert into ErrorConfig(Type,Va
sqlite
会自动维护一个系统表
sqlite
_master,该表存储了我们所创建的各个table,
view, trigger等等信息。
sqlite
_master表数据字段:
type: 类型,取值一般为table, view
name:
tbl_name: 表名
rootpage:
sql:创建表或者视图的sql语句,可以从该sql语句中判