博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【数据库】适用于SQLite的SQL语句(二)
阅读量:4262 次
发布时间:2019-05-26

本文共 4609 字,大约阅读时间需要 15 分钟。

目录

九、视图VIEW

视图是基于真实数据上创建的虚拟表,在查询语句SELECT中可以当表来使用。

1、创建视图
CREATE VIEW "VIEW_NAME" AS "SQL 语句";
2、删除视图
DROP VIEW "VIEW_NAME";

十、虚拟表

虚拟表和普通表类似,但是并不实际存储数据。

1、创建虚拟表
CREATE VIRTUAL TABLE
2、删除虚拟表

使用删除普通表的语法:

DROP TABLE

十一、时间和日期的函数

date(timestring, modifier, modifier, …):返回日期,格式为YYYY-MM-DD;

time(timestring, modifier, modifier, …):返回时间,格式为HH:MM:SS;
datetime(timestring, modifier, modifier, …):返回日期时间:格式为YYYY-MM-DD HH:MM:SS;
julianday(timestring, modifier, modifier, …):返回儒略日(Julian Day);
儒略日(Julian Day)是公元前4714年11月24日(格林尼治公历)自格林威治中午以来的天数。
strftime(format, timestring, modifier, modifier, …):返回格式化时间;
和C标准库的strftime类似。代替格式如下:

d		一个月中的一天:00%F		小数秒:SS.SSS%H		时间:00-24%j		一年中的一天:001-366%J		儒略日(Julian Day)天数%m		月:01-12%M		分钟:00-59%s		自1970-01-01以来的秒数%S		秒:00-59%w		0-6的星期几,星期日== 0%W		一年中的第几周:00-53%Y		年:0000-9999%%		%

函数中timestring格式可以是如下格式:

YYYY-MM-DDYYYY-MM-DD HH:MMYYYY-MM-DD HH:MM:SSYYYY-MM-DD HH:MM:SS.SSSYYYY-MM-DDTHH:MMYYYY-MM-DDTHH:MM:SSYYYY-MM-DDTHH:MM:SS.SSSHH:MMHH:MM:SSHH:MM:SS.SSSnowDDDDDDDDDD

函数中modifier取值如下:

NNN daysNNN hoursNNN minutesNNN.NNNN secondsNNN monthsNNN yearsstart of monthstart of yearstart of dayweekday Nunixepochlocaltimeutc

例子:

计算当前日期SELECT date('now');计算当月的最后一天。SELECT date('now','start of month','+1 month','-1 day');给定unix时间戳1092941466,计算日期和时间。SELECT datetime(1092941466, 'unixepoch');给定unix时间戳1092941466,计算日期和时间,并补偿您的本地时区。SELECT datetime(1092941466, 'unixepoch', 'localtime');计算当前的unix时间戳。SELECT strftime('%s','now');计算自美国独立宣言签署以来的天数。SELECT julianday('now') - julianday('1776-07-04');计算自2004年某个特定时刻以来的秒数:SELECT strftime('%s','now') - strftime('%s','2004-01-01 02:34:56');计算当年10月的第一个星期二的日期。SELECT date('now','start of year','+9 months','weekday 2');计算以秒为单位的自unix纪元以来的时间(类似于strftime('%s','now'),但包括小数部分):SELECT (julianday('now') - 2440587.5)*86400.0;

十二、分析和故障排除

EXPLAIN + sql语句:打印虚拟机指令;

EXPLAIN QUERY PLAN + sql语句:用于交互式调试,对sql查询语句说明;

select * from tt;id|name|age|abc1|XiaoHong|18|2|XiaoMing|19|3|Xiao1|88|EXPLAIN select * from tt;addr  opcode         p1    p2    p3    p4             p5  comment      ----  -------------  ----  ----  ----  -------------  --  -------------0     Init           0     10    0                    00  Start at 10  1     OpenRead       0     2     0     4              00  root=2 iDb=0; tt2     Rewind         0     9     0                    00               3       Rowid          0     1     0                    00  r[1]=rowid   4       Column         0     1     2                    00  r[2]=tt.name 5       Column         0     2     3                    00  r[3]=tt.age  6       Column         0     3     4                    00  r[4]=tt.abc  7       ResultRow      1     4     0                    00  output=r[1..4]8     Next           0     3     0                    01               9     Halt           0     0     0                    00               10    Transaction    0     0     9     0              01  usesStmtJournal=011    Goto           0     1     0                    00               EXPLAIN QUERY PLAN select * from tt;QUERY PLAN`--SCAN TABLE tt	//该SELECT语句通过对表tt执行全表扫描来实现

十三、SQL语句中的表达式

1、运算符

优先级由高到低

||*    /    %+    -<<   >>   &    |<    <=   >    >==    ==   !=   <>   IS   IS NOT   IN   LIKE   GLOB   MATCH   REGEXPAND   OR// 一元运算符-    +    ~    NOT	COLLATE
2、字面值

整数、浮点数、字符串、BLOB或NULL

3、参数

用于 sqlite3_bind()接口

?NNN  : NNN为数字,表示第几个参数,介于1到SQLITE_MAX_VARIABLE_NUMBER之间;?   :问号后不带数字,表示已分配的最大参数加一,为了和其它数据库引擎兼容,不推荐使用;:AAAA : 参数名称AAAA,和问号不带数字相同,会按顺序自动分配编码@AAAA :和上一个冒号:相同,只是参数名称带@$AAAA:用于Tcl的语法

十四、插入 INSERT

三种基本形式

INSERT INTO table VALUES(...);INSERT INTO table SELECT ...;INSERT INTO table DEFAULT VALUES;	// 插入默认值

十五、SQLite关键字

关键字不能用作表、索引、列、数据库、用户定义的函数、归类、虚拟表模块或任何其他命名对象的名称。

关键字列表

ABORTACTIONADDAFTERALLALTERANALYZEANDASASCATTACHAUTOINCREMENTBEFOREBEGINBETWEENBYCASCADECASECASTCHECKCOLLATECOLUMNCOMMITCONFLICTCONSTRAINTCREATECROSSCURRENTCURRENT_DATECURRENT_TIMECURRENT_TIMESTAMPDATABASEDEFAULTDEFERRABLEDEFERREDDELETEDESCDETACHDISTINCTDODROPEACHELSEENDESCAPEEXCEPTEXCLUDEEXCLUSIVEEXISTSEXPLAINFAILFILTERFIRSTFOLLOWINGFORFOREIGNFROMFULLGLOBGROUPGROUPSHAVINGIFIGNOREIMMEDIATEININDEXINDEXEDINITIALLYINNERINSERTINSTEADINTERSECTINTOISISNULLJOINKEYLASTLEFTLIKELIMITMATCHNATURALNONOTNOTHINGNOTNULLNULLNULLSOFOFFSETONORORDEROTHERSOUTEROVERPARTITIONPLANPRAGMAPRECEDINGPRIMARYQUERYRAISERANGERECURSIVEREFERENCESREGEXPREINDEXRELEASERENAMEREPLACERESTRICTRIGHTROLLBACKROWROWSSAVEPOINTSELECTSETTABLETEMPTEMPORARYTHENTIESTOTRANSACTIONTRIGGERUNBOUNDEDUNIONUNIQUEUPDATEUSINGVACUUMVALUESVIEWVIRTUALWHENWHEREWINDOWWITHWITHOUT

十六、解决冲突 ON CONFLICT

在INSERT和UPDATE命令,关键字“ ON CONFLICT”应替换为“ OR;

五中解决冲突的算法:ROLLBACK、ABORT、FAIL、IGNORE和REPLACE。默认是ABORT。

转载地址:http://cdmei.baihongyu.com/

你可能感兴趣的文章
Java基础入门(三)
查看>>
Java基础入门(四)
查看>>
Java基础入门(完结篇)
查看>>
Java进阶之面向对象(一)——继承
查看>>
Java进阶之自定义ArrayList&斗地主发牌案例
查看>>
JavaWeb之filter&listener&文件上传
查看>>
JavaWeb之Ajax&json
查看>>
BUFG,IBUFG,BUFGP,IBUFGDS等含义以及使用
查看>>
逻辑思维测试题
查看>>
如何用Easy CHM制作CHM格式电子书(帮助文档)
查看>>
为什么学习python
查看>>
华为进不了美国,并不是贸易保护这么简单
查看>>
markdown文件的基本常用编写语法(图文并茂)
查看>>
java变量简介
查看>>
Shell十分钟入门
查看>>
nginx 配置 upstream backup 报错
查看>>
Linux执行 wget命令:提示command not found的两种解决方法
查看>>
openssl实现md5加rsa签名
查看>>
史上最全的前端学习路线图,干货满满
查看>>
来点不一样的:解耦 HTML、CSS 和 JS之间的那些事
查看>>