SQLite权威指南(第二版)第三章 SQLite中的SQL

SQL,是与关系数据库通信的唯一方法,是一种直观的用户友好的语言,功能非常强大,可以构建、读取、写、排序、过滤、映射、计算、产生、分组、聚集、管理信息。

一、语法

SQL语法的一般结构:


1.png
1、命令:

SQL由命令组成,每条命令以分号(;)结束。
分号(;),作为命令终结符,启动处理命令。

2、常量

字符串常量:建议使用单引号引起来
数字常量:整数、十进制数、科学计数法表示的数
二进制常量:使用x’0000’表示,每一位是一个16进制数

3、关键字和标识符

关键字:select、update、insert、create、drop、begin等。
标识符:数据库里的具体对象,如表或索引。
关键字和标识符,都不区分大小写。

4、注释

单行注释:两个连续连字符(--)表示
多行注释:C语言风格的/* */形式

二、创建数据库

1、创建表

创建表的语句:

create [temp | temporary] table table_name (column_definitions [, constraints]);

说明:

  • temp 或 temporary,表示临时表,只存活于当前会话;
  • []表示可选项
  • | 表示两者选其一

2、修改表

一般格式:

alter table table_name { rename to name | add column column_def }

说明:

  • {} 括起来一个选项表,表示必须从各选项中选一个;

三、数据库查询

1、select命令与操作管道

select 命令的通用形式如下:

select [distinct] heading 
from tables 
where predicate 
group by columns 
having predicate 
order by columns 
limit count, offset;

其处理过程:


2.png

2、信息处理的操作

  • 过滤;通过算数操作符(单目、二元、三元操作符)、 逻辑操作符:AND、OR、NOT、IN、LIKE 与 GLOB 操作符(字符串匹配)等来过滤筛选数据;
  • 限定和排序:limit指定返回记录最大数量,offset指定偏移的记录数;通常放在操作管道的最后;
  • 函数:函数指数学函数,如(abs()、upper()和lower()等);
  • 聚合:是从一组记录中计算聚合值(如sum()、avg()、count()、min()、max()等);
  • 分组:group by
  • 去重:distinct

3、多表连接:

语法格式:

select heading from left_table join_type right_table on join_condition; 
  • 内连接:通过表中的两个字段进行连接,取两个表的交集;
  • 交叉连接:缺乏连接条件时,返回第一个表中的所有行和第二个表的所有行的联合;
  • 外连接:SQLite不支持忧外连接和全外连接,只有左外连接。因为右外连接可以用左外连接代替,全外连接可以通过符合查询执行。
  • 自然连接:实际上是内连接的另一种形式,通过表中共有的字段名称将两个表连接起来,不需要添加连接条件就可以获得内连接的结果。

4、子查询

子查询是指,select语句嵌套select语句。

5、复合查询

复合查询操作的参数必须符合:

  1. 涉及的关系字段数目必须相同;
  2. 只能有一个order by子句,并且处在符合查询的最末尾,对联合结果进行排序;

关键字有:

  • union:返回A和B联合的非重复字段的单一关系。union all会保留重复数据;
  • intersect:返回既在A中,也在B中的行。
  • except:返回所有在A中,但不在B中的行。

6、条件结果

  1. 接收静态值,并列出各种情况下的case返回值:
case value
 when x then value_x
 when y then value_y
 when z then value_z
 else default_value
end
  1. case形式允许when条件中有表达式:
case
 when condition1 then value1
 when condition2 then value2
 when condition3 then value3
 else default_value

case 表达式只执行一个条件,也就是说,如果满足的条件超过一个,只执行第一个。
如果没有满足条件且没有定义else条件,case返回null。

7、处理SQLite中的Null

  • 可以通过is null 或者is not null操作符检测null是否存在
  • null不等于任何值,包括null。
  • SQLite是三态逻辑,null是真假值之一


    3.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,099评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,473评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,229评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,570评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,427评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,335评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,737评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,392评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,693评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,730评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,512评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,349评论 3 314
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,750评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,017评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,290评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,706评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,904评论 2 335

推荐阅读更多精彩内容