SQL的语法像自然语言,以命令模式表达语句。以描述行为的动词开始,接下来是主语和谓语,由分号";"结尾。如下所示:

MySQL中SQL中包含常量表达式和注释 sql 常量_SQL

SQL的易用性非常高,因为它是声明式语言而非命令式语言,它是为非技术人员设计的。声明式语言是描述想要什么,命令式语言是描述达到目标的如何做的过程,如C语言。

 

1 常量

SQL中有3种类型常量,分别为:字符串常量、数字常量和二进制常量。

1.1 字符串常量

与C/C++中类似,字符串常量由一个或多个字母和数字字符组成,但是SQLite中用单引号(')引起来(虽然SQLite支持单引号和双引号,但是单引号才是SQL标准)。如果字符串中本身包含单引号,需要用两个单引号,例如kenny's chicken:

'kenny''s chicken'

SQLite中的字符串常量值是大小写敏感的,但是关键字例如select/updata/insert/create等是不区分大小写的。

1.2 数字常量

数字常量有整数、十进制数和科学记数法表示的数。例如:-1、3.14、2.0E19。

1.3 二进制值

二进制值的形式为:x'xx',其中每位是一个16进制数,二进制值必须由两个及以上16进制数组成。例如:x'20'、x'ff'。

 

2 创建表

SQLite中创建表的命令如下:

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

·[temp]是可选项,用temp/temporary关键字声明创建的表是临时表,一旦连接断开,就会被自动销毁。

·table_name是创建表的表名。

·column_definitions由逗号分隔的字段列表组成,每个字段定义包括一个名称、一个类型说明符(也称域)和一个逗号分隔的字段约束。例如:

"CREAT TABLE media(idx integer primary key autoincrement, chn int, recType int, startTime long, endTime long, pos int, path vchar, name vchar, alarmsrc vchar,\ 

playTime long)";

 其实SQLite存储类中并没有int/long/vchar/等,之所以这样用是为了代码表达清晰、方便程序员交流使用,之所以可以这样用是因为SQLite数据库会根据值来分配存储与字段类型无关,但是主键必须申明为整型integer。详细了解可以看:。

 

3 数据库查询

select是SQL命令中最大、最复杂的命令,也是查询数据库的唯一命令。select语句提供混合、比较和过滤数据的“关系操作”。

select命令的通用形式为:

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

 类似于Linux中的管道命令,select命令从from开始,接收一个或多个表;将它们组合成单一复合表,传递给后续操作链。

MySQL中SQL中包含常量表达式和注释 sql 常量_SQL_02

2.1 过滤

where子句的操作对象是行,子句中的限制条件对行进行逻辑判断,为真的所有行将会包含在结果集中,为假则被排除。例如:他是一个帅气的江西男孩,翻译成等价的关系操作就是:select * from people where gender='male' and province='Jiangxi';

2.1.1 运算符

1)二元运算符

MySQL中SQL中包含常量表达式和注释 sql 常量_SQL_03

与C/C++中二元运算符相差不大,除了几个需特别注意外,其他可类比C/C++。

·'||':其作用是连接字符串,类似于C++中string类的重载运算符'+',例如"app"||"le"其结果为“apple”。

·IN:它允许我们where子句中规定多个值。例如:Persons表,

Id

LastName

FirstName

Address

City

1

Adams

John

Oxford Street

London

2

Bush

George

Fifth Avenue

New York

3

Carter

Thomas

Changan Street

Beijin

执行"select Id, LastName from Persons where LastName IN ('Bush'. Carter);"得到结果集:

Id

LastName

2

Bush

3

Carter

其实等同于:"select Id, LastName from Persons where LastName = 'Bush' or LastName='Carter';",但是显然IN操作符比较简洁。

·like:like的作用类似于'=',都是通过一个模式来进行字符串匹配。like是大小写不敏感的,例如:

MySQL中SQL中包含常量表达式和注释 sql 常量_单引号_04

·like操作符对象中可以使用SQL通配符①'%'匹配一个或多个字符;②'_'匹配一个字符;通配符'[]'在SQLite中不能获取结果,like操作符不区分大小写。

·glob:在行为上与like操作符非常相似,不同之处在于它使用的通配符类似于Linux下的Shell脚本和Makefile,①'*'匹配一个或多个字符;②'?'匹配一个字符;而且glob操作符是区分大小写的。

2.2 限定与排序

2.2.1 限定

SQLite中用limit和offset关键字来限定最后结果集的大小和范围。limit指定返回记录的最大数量,offset指定偏移的记录数(也就是指出了从那条记录开始返回)。例如:

MySQL中SQL中包含常量表达式和注释 sql 常量_单引号_05

"limit m offset n"等价于"limit n, m"。如果是单独的"limit m"则是限制记录数量并不对结果集进行偏移。

2.2.2 排序

SQLite中用order by子句进行排序,它使记录集在返回之前按一个或多个字段值进行排序。order by子句以逗号分隔的一系列字段组成,每个字段都带有排序方向asc(默认升序)或desc(降序)。例如:

MySQL中SQL中包含常量表达式和注释 sql 常量_字段_06

多个字段进行排序时,先按第一个字段进行排序,再依次排序后续字段,后续的排序并不会打乱相等元素原有的相对顺序,可知SQLite中order by子句由稳定的排序算法实现。

2.3 分组(grouping)

在select语句的作用流程上,group by介于where和select子句之间,group by接收where的输出,并将其分隔成共享某个字段(或多个字段)上同等值的小组,这些在传递给select子句。例如:

MySQL中SQL中包含常量表达式和注释 sql 常量_单引号_07

MySQL中SQL中包含常量表达式和注释 sql 常量_字段_08

group by对某字段进行分组,但是没有再select子句之前过滤这些分组,而having可以实现该功能。与where子句过滤结果集中的行类似,having过滤的是分组。例如:

MySQL中SQL中包含常量表达式和注释 sql 常量_单引号_09

2.4 去掉重复—distinct

distinct出来select的结果并过滤掉其中重复的行。例如:"select distinct type_id from foods;",select提取出foods表的type_id字段,distinct删除重复的行。

 

接下来是3个修改数据的SQL命令:

4 插入记录

使用insert命令向表中插入记录,在一个表上工作时,insert命令可以一次插一条记录,利用select可以一次插入多行。insert语句的一般格式为:

insert into table (column_list) values (value_list);

·table:是数据待插入的表名。

·column_list:是用逗号分隔的字段名称,字段必须在表中存在。

·vaules:表示后面括号内的是值。

·value_list:是用逗号分隔的值,值与column_list的字段一一对应。

例如:"insert into foods (name, type_id) values ('Cinnamon Bobka', 1);",该例中没有id字段,是因为id是整型主键,它会自动产生相关的新值。可以用select命令验证是否成功插入数据,"select * from foods where name='Cinnamon Bobka' and type_id=1;"。

如果insert语句中为所有的字段提供值,那么可以省略字段列表。例如:"insert into foods values (NULL, 1, 'Blueberry Bobka');",值列表的顺序需与表字段顺序一致。

 

5 更新记录

updata命令用于更新表中的记录,该命令可以修改一个表中一行或多行中的一个或多个字段。一般格式为:

update table set update_list where predicate;

·table:待跟新的表名。

·update_list:一个或多个“字段赋值”的列表,字段赋值格式为column_name=value。

·where predicate:where子句与select语句相同。

MySQL中SQL中包含常量表达式和注释 sql 常量_SQL_10

 

6 删除记录

delete命令可以删除表中的记录。它的一般格式为:

delete from table where predicate;

"where predicate"与updata和select命令的where子句一样。例如:“delete from foods where name='Chocolate BOBKA';”。

 

该篇博客是自己的学习博客,水平有限,如果有哪里理解不对的地方,希望大家可以指正!