SQLite 高级语法介绍

SQLite查询优化实战:从基础语法到高级窗口函数应用 数据库查询是数据处理的核心环节,其本质是通过结构化查询语言(SQL)对数据进行检索、聚合与分析。理解查询执行顺序、索引机制与连接原理是优化性能的基础。在移动端、嵌入式及桌面应用中,高效的查询能显著降低应用负载,提升响应速度。本文聚焦SQLite这一轻量级数据库,深入解析其高级查询特性,包括多表关联、子查询、窗口函数及性能调优技巧。通过掌握这些技术,开发者能将计算逻辑下推到数据库层,有效应对复杂业务场景,如销售排名统计与移动平均计算,实现从基础增删改查到游刃有余的跨越。 阅读详情

Alter命令

SQLite 的 ALTER TABLE 命令不通过执行一个完整的转储和数据的重载来修改已有的表。您可以使用 ALTER TABLE 语句重命名表,使用 ALTER TABLE 语句还可以在已有的表中添加额外的列。

在 SQLite 中,除了重命名表和在已有的表中添加列,ALTER TABLE 命令不支持其他操作。

重命名已有的表的 ALTER TABLE:

ALTER TABLE database_name.table_name RENAME TO new_table_name;
alter table person rename to new_person;

在已有的表中添加一个新的列的 ALTER TABLE:

ALTER TABLE database_name.table_name ADD COLUMN column_def...;
alter table new_person add column salary real;

Truncate Table

在 SQLite 中,并没有 TRUNCATE TABLE 命令,但可以使用 SQLite 的 DELETE 命令从已有的表中删除全部的数据,但建议使用 DROP TABLE 命令删除整个表,然后再重新创建一遍。

DELETE FROM table_name;
DELETE FROM PERSON;
VACUUM;

这样,PERSON 表中的记录完全被删除,使用 SELECT 语句将没有任何输出。

视图(View)

视图(View)只不过是通过相关的名称存储在数据库中的一个 SQLite 语句。视图(View)实际上是一个以预定义的 SQLite 查询形式存在的表的组合。

视图(View)可以包含一个表的所有行或从一个或多个表选定行。视图(View)可以从一个或多个表创建,这取决于要创建视图的 SQLite 查询。

视图(View)是一种虚表,允许用户实现以下几点:

  • 用户或用户组查找结构数据的方式更自然或直观。

  • 限制数据访问,用户只能看到有限的数据,而不是完整的表。

  • 汇总各种表中的数据,用于生成报告。

SQLite 视图是只读的,因此可能无法在视图上执行 DELETE、INSERT 或 UPDATE 语句。但是可以在视图上创建一个触发器,当尝试 DELETE、INSERT 或 UPDATE 视图时触发,需要做的动作在触发器内容中定义。

创建视图

SQLite 的视图是使用 CREATE VIEW 语句创建的。SQLite 视图可以从一个单一的表、多个表或其他视图创建。

CREATE [TEMP | TEMPORARY] VIEW view_name AS
SELECT column1, column2.....
FROM table_name
WHERE [condition];

您可以在 SELECT 语句中包含多个表,这与在正常的 SQL SELECT 查询中的方式非常相似。如果使用了可选的 TEMP 或 TEMPORARY 关键字,则将在临时数据库中创建视图。

在 PERSON 表中创建一个视图。

CREATE VIEW PERSON_VIEW AS
SELECT ID, NAME, AGE
FROM  PERSON;

查询 COMPANY_VIEW,与查询实际表的方式类似。

select * from person_view;

id          name        age
----------  ----------  ----------
1           Jack        21
2           Mary        20
3           Mike        22
4           Amy         19
5           Alen        18
6           Ren         21
7           Lucy        20
8           John        17
9           Kate        21

删除视图

要删除视图,只需使用带有 view_name 的 DROP VIEW 语句。

DROP VIEW view_name;

Autoincrement(自动递增)

SQLite 的 AUTOINCREMENT 是一个关键字,用于表中的字段值自动递增。我们可以在创建表时在特定的列名称上使用 AUTOINCREMENT 关键字实现该字段值的自动增加。

关键字 AUTOINCREMENT 只能用于整型(INTEGER)字段。

create table person (
   id integer primary key autoincrement,
   ...
 );

这样插入数据id就会自动增加啦。

insert into person(name, age, dept) values('Nate', 21, 2);

既然提到了Autoincrement,就说明下rowid。SQLite数据库中的表均有一个特殊的rowid字段,它是一个不重复的64位有符号整数,默认起始值为1。rowid别名为oid或rowid,但在创建表的SQL声明语句中只能使用rowid作为关键字。如果在创建表的时候设置了类型为integer的具有自动增长性的主键,那么这时的主键相当于是rowid的别名。

sqlite> select rowid, name from person;
rowid       name
----------  ----------
1           Jack
2           Mary
3           Mike
4           Amy

rowid只能是单调递增的,它由SQLite内部维护,不能自己指定。对于失败的插入操作,rowid也可能在原来的基础上执行了自增。删除或回滚操作并不会减小rowid的值。当rowid达到所能表示的最大值时,这时如果有新纪录要插入,系统就会从之前没有被使用过的(或从已经被删除的记录的)rowid中随机取出一个作为rowid。若没有可用的rowid,系统就会抛出SQLITE_FULL的错误。

rowid字段在表中默认是隐藏的,也就是说,除非SQL查询语句中指定返回rowid,否则查询结果不会包含有rowid字段。

可以在创建表时使用WITHOUT ROWID以声明不生成rowid字段,例如:

create table if not exists person(
   id integer primary key,
   ...
) without rowid; 

将关键字AUTOINCREMENT使用在声明为WITHOUT ROWID的表不但不起作用,还将引发一个错误。

事务(Transaction)

事务(Transaction)是一个对数据库执行工作单元。事务(Transaction)是以逻辑顺序完成的工作单位或序列,可以是由用户手动操作完成,也可以是由某种数据库程序自动完成。

事务(Transaction)是指一个或多个更改数据库的扩展。例如,如果您正在创建一个记录或者更新一个记录或者从表中删除一个记录,那么您正在该表上执行事务。重要的是要控制事务以确保数据的完整性和处理数据库错误。

实际上,您可以把许多的 SQLite 查询联合成一组,把所有这些放在一起作为事务的一部分进行执行。

事务属性

事务(Transaction)具有以下四个标准属性,通常根据首字母缩写为 ACID:这些属性的介绍在我的SQLite入门介绍(一)博客中有说明。

事务控制

使用下面的命令来控制事务:

  • BEGIN TRANSACTION:开始事务处理。

  • COMMIT:保存更改,或者可以使用 END TRANSACTION 命令。

  • ROLLBACK:回滚所做的更改。

事务控制命令只与 DML 命令 INSERT、UPDATE 和 DELETE 一起使用。他们不能在创建表或删除表时使用,因为这些操作在数据库中是自动提交的。

BEGIN TRANSACTION

事务(Transaction)可以使用 BEGIN TRANSACTION 命令或简单的 BEGIN 命令来启动。此类事务通常会持续执行下去,直到遇到下一个 COMMIT 或 ROLLBACK 命令。不过在数据库关闭或发生错误时,事务处理也会回滚。以下是启动一个事务的简单语法:

BEGIN;
or 
BEGIN TRANSACTION;

COMMIT

COMMIT 命令是用于把事务调用的更改保存到数据库中的事务命令。

COMMIT 命令把自上次 COMMIT 或 ROLLBACK 命令以来的所有事务保存到数据库。

COMMIT 命令的语法如下:

COMMIT;
or
END TRANSACTION;

ROLLBACK

ROLLBACK 命令是用于撤消尚未保存到数据库的事务的事务命令。

ROLLBACK 命令只能用于撤销自上次发出 COMMIT 或 ROLLBACK 命令以来的事务。

ROLLBACK 命令的语法如下:

ROLLBACK;

实例

在我创建的表 PERSON 中的数据如下:

id          name        age         dept_id     salary
----------  ----------  ----------  ----------  ----------
1           Jack        21          2
2           Mary        20          1
3           Mike        22          3
4           Amy         19          1
5           Alen        18          2
6           Ren         21          3
7           Lucy        20          1
8           John        17          0
9           Kate        21          1

现在我们开始一个事务,最后使用 ROLLBACK 取消所有的更改。

begin;
delete from person where id = 9;
insert into person values(9, 'Mini', 16, 1, 5000);
rollback;

然后我们查询 PERSON 表会发现数据没有修改。

现在我们使用 COMMIT 命令提交所有的更改。

begin;
delete from person where id = 9;
insert into person values(9, 'Mini', 16, 1, 5000);
commit;
id          name        age         dept_id     salary
----------  ----------  ----------  ----------  ----------
1           Jack        21          2
2           Mary        20          1
3           Mike        22          3
4           Amy         19          1
5           Alen        18          2
6           Ren         21          3
7           Lucy        20          1
8           John        17          0
9           Mini        16          1           5000.0

事务的创建可以让数据库对多修改更有效率。

子查询

子查询或内部查询或嵌套查询是在另一个 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])

让我们用 PERSON 表来检查 SELECT 语句中的子查询使用:

select * from person 
where id in (select id from person where age > 20);
id          name        age         dept_id     salary
----------  ----------  ----------  ----------  ----------
1           Jack        21          2
3           Mike        22          3
6           Ren         21          3

INSERT

子查询也可以与 INSERT 语句一起使用。INSERT 语句使用子查询返回的数据插入到另一个表中。在子查询中所选择的数据可以用任何字符、日期或数字函数修改。

INSERT INTO table_name [ (column1 [, column2 ]) ]
           SELECT [ *|column1 [, column2 ]
           FROM table1 [, table2 ]
           [ WHERE VALUE OPERATOR ]

假设 PERSON_COPY 的结构与 PERSON 表相似,且可使用相同的 CREATE TABLE 进行创建,只是表名改为 PERSON。现在把整个 PERSON 表复制到 PERSON_COPY,语法如下:

INSERT INTO PERSON_COPY
     SELECT * FROM PERSON 
     WHERE ID IN (SELECT ID 
                  FROM PERSON) ;

UPDATE

子查询可以与 UPDATE 语句结合使用。当通过 UPDATE 语句使用子查询时,表中单个或多个列被更新。

UPDATE table SET column_name = new_value
[ WHERE OPERATOR [ VALUE ]
   (SELECT COLUMN_NAME
   FROM TABLE_NAME)
   [ WHERE) ]

假设,我们有 PERSON_COPY 表,是 PERSON_COPY 表的备份。
下面的实例把 PERSON 表中所有 AGE 大于或等于 20 的数据的 SALARY 更新为原来的 0.50 倍:

UPDATE person set salary = salary * 0.5 
where age in 
(select age from person_copy where age >= 20);

DELETE

子查询可以与 DELETE 语句结合使用,就像上面提到的其他语句一样。

DELETE FROM TABLE_NAME
[ WHERE OPERATOR [ VALUE ]
   (SELECT COLUMN_NAME
   FROM TABLE_NAME)
   [ WHERE) ]

删除 PERSON 表中所有 AGE 大于或等于 20 的记录:

DELETE FROM PERSON
     WHERE AGE IN (SELECT AGE FROM PERSON_COPY
                   WHERE AGE >= 20 );

结束语:本文仅用来学习记录,参考查阅。

SQLite 和 MySQL语法区别 SQLite 和 MySQL 在 SQL 语法上有一些差异,这些差异主要体现在数据类型、函数、表和索引的管理等方面。 阅读详情

相关推荐

Qt 实现SQLite全部语法(增删改查、内置函数、高级语法)

Qt 实现SQLite全部语法 【1】SQLite Qt界面设计 【2】SQLite Qt数据库创建、打开、关闭、删除 【3】SQLite Qt表格的创建 【4】SQLite Qt表格的插入 【5】SQLite Qt表格的查询 【6】SQLite Qt表格的删除 【7】SQLite Qt表格的更新 【8】SQLite Qt表格的结构 【9】SQLite Qt表格的修改 【10】SQLite 常用内置函数举例

Qt历险记,专注Qt技术,三年医疗设备研发经验,1年机器视觉研发经验,半年柔性传感研发经验。 2566

sqlite数据库高级

1.函数和聚合 SQL语句支持利用函数来处理数据,函数一般是在数据上执行的,它给数据的转换和处理提供了方便 常用的文本处理函数: length() 返回字符串的长度 lower() 将字符串转换为小写 upper() 将字符串转换为大写 2.常用的聚集函数: 使用聚集函数,用于检索数据,以便分析和生成报表 avg() 返回某列的平均值 count() 返回某...

yw946711214的博客 491

微信小程序实现锚点效果 scroll-view的scroll-into-view属性

小程序中实现锚点效果,可以直接使用scroll-view的scroll-into-view属性就可以实现锚点效果,比较方便简单。那么需要用到scroll-view那些参数呢,下面具体讲讲:效果展示: wxml **注意:**viewid值是动态的,通过setData设置即可。js wxss......

FaxMiao的博客 5449

SQLite(5) 高级用法大全

1 SQLite 约束 2 SQLite Joins 联合查询 3 SQLite Unions 合并 4 SQLite NULL 值 5 SQLite AS 别名 6 SQLite Trigger 触发器 7 SQLite Index 索引 8 SQLite Indexed By 9 SQLite Alter 修改表 10 SQLite View 模板 11 SQLite Tra

高级软件开发工程师--周玉的博客 1943

影刀RPA进阶:Excel多条件筛选与数据提取实战

本文详细介绍了如何利用影刀RPA实现Excel多条件筛选与数据提取的自动化。通过拆解文本、数值、日期及颜色筛选等核心指令,并结合实战案例,指导用户构建稳健的销售数据提取机器人,从而高效处理复杂数据报表,提升工作效率。

onion的博客 530

【硬件自锁开关】用两个D触发器完成实用的自锁开关电路

性价比是做电子设计的人要考虑的事,在学会了用单片机解决大多数问题的时候,是否你也想过用简单的手段解决一个多数场合要解决的问题呢?按一下,输出状态由关闭变成开启,再按一下开启变成关闭。机械弹簧式的开关可以实现自锁的功能:钩子和弹簧将当前状态“储存”起来,这个能量为下一次触发的提供状态“翻转”的动力;在电子设计中,经常通过单片机的程序指令实现自锁:通过寄存器将当前电平状态暂存起来,下一次触发的时候寄存器内容“取反”,再将其输出到端口。可否用电路实现以上过程呢?完全可以,方案很简单,通过两个D触发器即可实现。

qq_33175704的博客 4254

sqlite 基本和高级用法

转自:http://www.yiibai.com/sqlite/sqlite_using_joins.html SQLite的连接子句用于从两个或多个数据库中的表的记录相结合。JOIN是一种手段,从两个表中使用常见于每个值相结合的字段。 SQL定义了三种主要类型的联接: 交叉连接 - CROSS JOIN 内连接 - INNER JOIN 外连接 -

liangqiuJL的博客 671

Conda报错急救指南:遇到Malformed version string ‘~‘怎么办?(附最新解决方案)

本文深度解析Conda报错`Malformed version string '~'`的根源与解决方案。该错误通常由版本字符串解析异常或Conda版本过旧引起。文章提供了从清理缓存、针对性升级到环境重建的完整修复流程,并强调了升级Conda至最新版本是解决此类`CondaValueError`问题的根本方法,帮助开发者高效恢复工作环境。

weixin_28835789的博客 647

(完整)SQLite数据库基本语法介绍(SQL语言)

闲来无聊,写点东西。 SQL语言 一种关系型数据语言,介于关系代数与关系演算之间的结构化查询语言,也是一个通用的,功能及强的关系型数据库语言。接下来介绍其基本用法: (1) CREATE TABLE : 用来创建一个关系表 语法: CREATE TABLE 表名 ( 列名1 数据类型 “约束”(有可无) 列名2 数据类型 “约束”(有可无) 列名3 数据类型 “约束”(有可无) ... );//注意,SQL语句要以分号结尾 数据类型: integer(size)

miracleis的博客 5415

机器人强化学习入门学习笔记

如果你追求高精度动力学仿真、用于强化学习或机器人研究,MuJoCo 是一个非常优秀的选择。如果需要快速实验、使用真实机器人模型,PyBullet 或 Gazebo可能更合适;如果你追求大规模并行训练,Isaac Gym 或 BraX会更高效。legged gym底层是​编辑isaacgym,基于gpu训练可以多环境并行训练,收敛到一个稳定行走的策略快。本视频MuJoCo基于cpu训练很慢。

xiaomu_347的博客 1459

ubuntu安装英伟达显卡驱动后wifi消失解决方法

ubuntu安装英伟达显卡驱动后(比如4090和3090等),会把wifi和蓝牙驱动去除,导致wifi无法连接。需要重新下载驱动安装。

人工智能(AI)技术,大模型技术,深度学习,机器学习,计算机视觉,AI工具实践应用等分享 3903

android.database.sqlite

android.database.sqlite 科特林|爪哇 包含应用程序用于管理自己的私有数据库的SQLite数据库管理类。 应用程序使用这些类来管理私有数据库。如果创建内容提供程序,则可能必须使用这些类来创建和管理自己的数据库以存储内容。看见内容提供者若要了解实现内容提供程序的约定,请执行以下操作。如果您正在处理由提供程序发送给您的数据,则不使用这些SQLite类,而是使用泛型。...

博客 644

PCIe 6.0 – 关于 PCI Express Gen6 您需要知道的一切

幸运的是,PCIe 6.0 FEC 足够轻,对延迟的影响最小。在电气层上,PCIe 6.0 使用 PAM4 信号(“四级脉冲幅度调制”),每个时钟周期将 2 位组合为 4 个幅度级别(00、01、10、11),与 PCIe 5.0 和前几代相比,它使用 NRZ 调制,每个时钟周期 1 位和两个幅度级别 (0, 1)。虽然 PAM4 信号更容易出错,但由于调制技术的性质,与 PCIe 5.0 相比,通道损耗不受影响,因此 PCB 上 PCIe 6.0 信号的范围将与 PCIe 5.0 相同。

qq_43416206的博客 3431

SQLite Insert 语句

SQLite 是一种轻量级的数据库管理系统,广泛用于各种应用程序中。它是一种嵌入式数据库,意味着它不需要独立的服务器进程或系统,可以直接在应用程序中运行。SQLite 支持标准的 SQL 语法,包括用于插入数据的INSERT语句。

lly202406的博客 1177

深度学习实战12(进阶版)-利用Dewarp实现文本扭曲矫正

大家好,我是微学A1, 我们在生活中会看到一些拍摄扭曲的图片,我们在通过OCR识别的时候,因为扭曲的厉害,而无法识别,我们需要对图片进行处理。

微学AI的博客 3157

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

[原创] SQLite数据库使用清单(下)

上文两章对SQLite的功能、语法、和操作进行了介绍,本文讲解SQLite的一些高级语法和操作。 3. 转载于:https://www.cnblogs.com/misybing/p/4920873.html

weixin_30398227的博客 73

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

SQLite权威指南(第2版)资源下载介绍

SQLite权威指南(第2版)资源下载介绍 去发现同类优质开源项目:https://gitcode.com/ 欢迎来到SQLite权威指南(第2版)的资源下载页面。本仓库提供的《SQLite权威指南(第2版)》是一个全面而深入的了解SQLite数据库系统的书籍资源,适用于数据库管理人员、开发者和对SQLite有兴趣的学习者。 本书详细介绍了SQLite数据库的各个方面,包括但不限于其架构、SQL语...

gitblog_06777的博客 324

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

sqllite和mysql语法,Android SQLite(一.简介和常用语法)

一.简介SQLite是一个轻量级的数据库,实现了自给自足的,无服务器的,零配置的,事务性的SQL数据库引擎。二.基本SQL语法SQLite 不区分大小写,但有一些命令是大小写敏感的,例如:GLOB和glob1.数据类型每个存储在SQLite的值都属于以下存储类之一存储类说明NULL值是一个NULL值INTEGER值是一个带符号的整数,根据值的大小存储在1、2、3、4、6或8个字节中REAL值是一个...

weixin_31056947的博客 576

SQLITE入门至精通

关键字: sqlite 入门至精通 菜鸟入门 1。从www.sqlite .org 下载SQLite 3.3.4的版本    为了方便,我把它解压了,就一个SQLite3.exe,放入Windows目录下。    Cmd 进入命令行    1)    创建数据库文件:    &gt;SQLite3...

flyhighwl的博客 246

SQLite3语法(一)

csv 逗号分隔的值column 左对齐的列html HTML 的 代码insert TABLE 表的 SQL 插入(insert)语句line 每行一个值list 由 .separator 字符串分隔的值tabs 由 Tab 分隔的值tcl TCL 列表元素同时,还有数据的亲和类型,大家可以通过:【https://www.runoob.com/sqlite/sqlite-data-types.html】来了解 2、 导出 3、 附加 连接一中对于附加数据库的数据更新也同步回了原数据库的......

一个专注于机器学习基础与实战的技术博客,内容涵盖算法推导、模型实现、数学原理与代码实践。用通俗的语言解析复杂概念,记录学习过程中的思考与总结,适合机器学习爱好者和从业者参考。 2282

SQLite入门介绍(三)

相信经过前面的介绍,即使是以前没有接触过SQLite的朋友也已经可以熟练的用sqlite来创建表了,这就是明显的进步啊。但学习不止,数据库的知识怎么可能仅仅局限于创建表,现在让我们一起学习下SQLite更高级的语法应用。JOINSQLite 的 Joins 子句用于结合两个或多个数据库中表的记录。JOIN 是一种通过共同值来结合两个表中字段的手段。 SQL 定义了三种主要类型的连接: 交叉连接 -

HardWorkingAnt的博客 656

Android SQLite (一.简介和常用语法)

[一.SQLite简介和常用语法][二.数据库创建,升级及降级] 一.简介 SQLite是一个轻量级的数据库,实现了自给自足的,无服务器的,零配置的,事务性的SQL数据库引擎。 二.基本SQL语法 SQLite 不区分大小写,但有一些命令是大小写敏感的,例如:GLOB和glob 1.数据类型 每个存储在SQLite的值都属于以下存储类之一 存储类 说明 NULL 值是一...

limushan的博客 314

sqlite的sql语法与技术架构研究

对 SQLite 的 SQL 语法和技术架构的梳理非常系统全面,涵盖了核心要点和关键细节,清晰展现了这款嵌入式数据库的设计逻辑与功能特性。无论是语法层面的分类(DDL、DML、DCL),还是架构层面的分层(前端解析、中间执行、后端存储),都准确抓住了 SQLite 的精髓:在语法部分,既强调了其灵活性(如动态类型、简化的自增语法),也客观指出了局限性(如 ALTER TABLE 功能有限、外键需手动开启),体现了 SQLite 为轻量性和嵌入式场景做的权衡。

春夜喜雨的专栏 1187

SQLite Select 语句详解

本文详细介绍了 SQLite 的SELECT语句,包括其基本语法、常用功能以及高级技巧。掌握SELECT语句对于使用 SQLite 进行数据查询至关重要。希望本文能帮助您更好地理解和运用 SQLite 的SELECT语句。

wjs2024的博客 1162

SQLite 基础

SQLite SQLite 是一个软件库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎,其源代码不受版权限制。 SQLite是一个进程内的库,但不是一个独立的进程,可以按应用程序的需求进行静态或动态连接,SQLite直接访问其存储文件。 为什么使用SQLite? 不需要一个单独的服务器进程或操作的系统(无服务器的)。 SQLite 不需要配置,这意味着不需要安装或管理。 一...

a834595603的博客 838

SQLite 语法

SQLite语法大全(2025版)涵盖了核心SQL操作、动态类型系统、表创建与约束、CRUD操作、索引视图、事务处理等核心功能。支持标准SQL-92语法,并扩展了JSON处理、窗口函数、生成列等现代特性。摘要重点包含:1)基础增删改查语法;2)动态类型系统与亲和性规则;3)表约束与索引创建;4)高级查询功能(聚合、连接、窗口函数);5)事务控制;6)常用函数(字符串、数学、日期、JSON)。该文档是SQLite 3.x版本的完整语法参考手册。

m0_57545130的博客 743
上一篇: SQLite--索引介绍
下一篇: SQLite--日期 & 时间
因人而异
博客等级 码龄10年 46粉丝 88原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值