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

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

一、语法

SQL语法的一般结构:


SQLite权威指南(第二版)第三章 SQLite中的SQL_第1张图片
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;

其处理过程:


SQLite权威指南(第二版)第三章 SQLite中的SQL_第2张图片
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是真假值之一


    SQLite权威指南(第二版)第三章 SQLite中的SQL_第3张图片
    3.png

你可能感兴趣的:(SQLite权威指南(第二版)第三章 SQLite中的SQL)