前端学数据库之记录操作,关于移动端SQLite

MySQL基本简单操作

现在我创建了一个数据表,表的内容如下:

mysql> select * from gubeiqing_table;
+----------+-----+
| name     | age |
+----------+-----+
| gbq      | 21  |
| zhangsan | 20  |
| lisi     | 22  |
+----------+-----+
3 rows in set (0.00 sec)

我现在需要对这些数据按照年龄进行一个升序排序。

mysql> select * from gubeiqing_table order by age ASC;
+----------+-----+
| name     | age |
+----------+-----+
| zhangsan | 20  |
| gbq      | 21  |
| lisi     | 22  |
+----------+-----+
3 rows in set (0.00 sec)

可以看到现在的数据库已经按照升序的方式进行排序了。
order by是用来排序的,ASC是升序排序,DESC是降序排序。

现在我有一个这样的数据表。

mysql> select * from gubeiqing_table;
+----------+-----+
| name     | age |
+----------+-----+
| gbq      | 21  |
| zhangsan | 20  |
| lisi     | 22  |
| zhangsi  | 21  |
| lisan    | 22  |
+----------+-----+
5 rows in set (0.00 sec)

我想知道这个数据表里有哪些年龄段。

mysql> select age from gubeiqing_table group by age;
+-----+
| age |
+-----+
| 21  |
| 20  |
| 22  |
+-----+
3 rows in set (0.00 sec)

首先从数据表中查找age字段,接着通过group by将这些年龄分组。
还可以统计这些年龄分别有多少人。

mysql> select age,count(*) from gubeiqing_table group by age;
+-----+----------+
| age | count(*) |
+-----+----------+
| 21  |        2 |
| 20  |        1 |
| 22  |        2 |
+-----+----------+
3 rows in set (0.00 sec)

接着学一下联合查询,使用UNIONUNION用于连接两个以上的SELECT语句的结果组合到一个结果集合中,多个SELECT语句会删除重复的数据。。

mysql> show tables;
+---------------------+
| Tables_in_gubeiqing |
+---------------------+
| gbq                 |
| gubeiqing_table     |
+---------------------+
2 rows in set (0.00 sec)

mysql> select * from gbq;
+------+-----+
| name | age |
+------+-----+
| qaz  | 20  |
| wsx  | 23  |
| edc  | 21  |
+------+-----+
3 rows in set (0.00 sec)

mysql> select * from gubeiqing_table;
+----------+-----+
| name     | age |
+----------+-----+
| gbq      | 21  |
| zhangsan | 20  |
| lisi     | 22  |
| zhangsi  | 21  |
| lisan    | 22  |
+----------+-----+
5 rows in set (0.00 sec)

我现在想查看两个表

mysql> select age from gbq
    -> union
    -> select age from gubeiqing_table;
+-----+
| age |
+-----+
| 20  |
| 23  |
| 21  |
| 22  |
+-----+
4 rows in set (0.00 sec)

现在看到的是所有的值,但是并不是这个字段所以的值。用UNION看到的是去重之后的所有值,如果不想去重那么要使用UNION ALL

mysql> select age from gbq
    -> union all
    -> select age from gubeiqing_table;
+-----+
| age |
+-----+
| 20  |
| 23  |
| 21  |
| 21  |
| 20  |
| 22  |
| 21  |
| 22  |
+-----+
8 rows in set (0.00 sec)

这样就看到了全部的值。
各位大佬不介意的话我只想要一点流量。个人博客

SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源的世界著名数据库管理系统来讲,它的处理速度比他们都快。

前面的话

  本文将详细介绍mysql关于记录的增删改查

 

<br />

插入记录

INSERT [INTO] tbl_name [(col_name,...)] {VALUES|VALUE} ({expr|DEFAULT},...),(...),...

  首先,创建一个简单的数据表

图片 1

  如果省略col_name,则意味着所有的字段按照顺序依次赋值。因为id字段是自动编号的,该字段可以赋值为NULL或DEFAULT

图片 2

图片 3

  通过逗号分隔,可以一次性写入多条记录;而且,值可以使用表达式表示

图片 4

  数据库并没有布尔类型BOOLEAN,如果声明类型为BOOLEAN,则会被转换为TINYINT类型,true转换为1,false转换为0

图片 5

 

方法二

INSERT [INTO] tb1_name SET col_name={expr|DEFAULT},...

  与第一种方法的区别在于,此方法可以使用子查询(SubQuery),以及一次性只能插入一条记录

图片 6

 

方法三

INSERT [INTO] tb1_name [(col_name,...)] SELECT ...

  此方法可以将查询结果插入到指定数据表

 

  • 1、占用资源低
  • 2、速度快
  • 3、与其他数据库相比,更适配移动平台、嵌入式平台

更新记录

UPDATE [LOW_PRIORITY][IGNORE] table_reference SET col_name1={expr1|DEFAULT}[,col_name2={expr2|DEFAULT}]...[WHERE where_condition]

  可以一次更新多条记录;当省略WHERE条件时,所有记录的值将会更新

  下面将所有人的年龄都增加5岁

图片 7

  下面将所有人的年龄更新为原有年龄减去其id值,将所有人的性别改成0

图片 8

  下面将所有id值为偶数的人的年龄加10岁

图片 9

 

<br />

删除记录

DELETE FROM tbl_name [WHERE where_condition]

图片 10

  [注意]删除某条记录后,再插入一条新的记录,自动编号不会补到删除记录的编号上,而是基于原有记录最大编号继续增加

图片 11

 

 1、INTEGER - 整形 2、blob - 二进制 3、real - 浮点型 4、text - 字符串 5、NULL - 空

查询表达式

SELECT select_expr [,select_expr...]
[
FROM tbl_references
[WHERE where_condition]
[GROUP BY {col_name | position} [ASC | DESC],...]
[HAVING where_condition]
[ORDER BY {col_name | expo | position}  [ASC | DESC],...]
[LIMIT {[offset,] row_count | row_count OFFSET offset}]
]

  查询表达式的每个表达式表示想要查找的一列,必须有至少一个。多个列之间以英文逗号分开

图片 12

  查询表达式的顺序可以和原表中字段的顺序不一致

图片 13

  在使用多表连接时,可能会出现不同的表中存在名称相同的字段,如果直接写字段,分不清到底是哪张数据表的字段。在字段名前加上数据表可以分辨出隶属于哪张数据表

图片 14

  星号*号表示所有的列。tbl_name.*可以表示命名表的所有列

图片 15

  查询表达式可以使用[AS] alias_name为其赋予别名,别名可用于GROUP BY, ORDER BY, HAVING字句

图片 16

  [注意]在使用查询表达式设置别名查询,AS可以使用,也可以不使用。但如果不使用,可能会出现二义性情况

SELECT id username FROM users;

  mysql会把上面的语句解析为username作为id的别名

 

<br />

结果处理

[GROUP BY {col_name | position} [ASC | DESC],...]

  查询结果分组(GROUP BY)的参数中,ASC是升序,是默认的;DESC是降序

图片 17

  col_name代表字段名,position以数字代表位置,如1代表SELECT语句中第一次出现的字段

图片 18

分组条件

[HAVING where_condition]

  在设置分组(HAVING)时,一定要保证分组条件(where_condition)要么是聚合函数(max,min,avg,count,sum),要么其中的字段必须是SELECT中的一个查询字段,否则会报错

图片 19

分组排序

[ORDER BY {col_name | expo | position}  [ASC | DESC],...]

  可以使用分组排序(order by)对查询结果进行排序

图片 20

  同时可以用几个条件来排序,按输入顺序来进行优先级的选择

图片 21

限制结果

[LIMIT {[offset,] row_count | row_count OFFSET offset}]

  限制查询结果(LIMIT)默认情况下,返回所有查找到的结果

图片 22

  如果LIMIT后面只有一个数字,表示从第一条开始返回,并返回相应数字个数的记录

图片 23

  SELECT语句默认从0开始编号,如果想从第三条开始返回,则需要offset参数和row_count参数一起使用

图片 24

【补充】

INSERT [INTO] tbl_name [(col_name,...] SELECT ...

  与一开始介绍的插入记录的方法不同,现在这种方法可以将查找的结果存储到指定的数据表

图片 25

<br />

DDL(Data Definition Language):数据定义语言,用来创建数据库中的各种对象-----表、视图、索引、同义词、聚簇等

  • 创建表
CREATE TABLE 表名 (字段名 字段类型,字段名1 字段类型1,...);
  • 删除表
DROP TABLE 表名;

<br />

<br />CREATE TABLE T_Person(id INTEGER, name TEXT,age INTEGER);在这里我们通常有两种书写格式,假设语句不是很长的情况下,可以写成一行,但是如果语句过长就不利于阅读,所以有了下面的格式:CREATE TABLE T_Person( id INTEGER, name TEXT, age INTEGER);

通过上述代码我们就可以创建一个表了,但是如果在执行一次上面的语句, 就会发现报错了,错误:文件已存在Error : table T_Person already exists所以我们创建的时候需要判断表是不是存在于是有了下面的创建语句:

CREATE TABLE IF NOT EXISTS T_Person( id INTEGER, name TEXT, age INTEGER);

其中

IF NOT EXISTS : 如果不存在上面创建的语句翻译就是:创建一个表,如果不存在的话就创建

<br />

DROP TABLE T_Person;

<br />

DML(Data Manipulation Language)数据库操作语句:关键字有insert,update,delete分别对应:插入、更新、删除

  • 插入数据
INSERT INTO 表名 VALUES;
  • 更新数据
UPDATE 表名 SET 字段名=值,...;
  • 删除数据
DELETE FROM 表名;

<br />

INSERT INTO T_Person1  VALUES;在现实生活中我们可能会遇到这样一种情况:在一个班里,有可能有两个人的姓名完全一致,这个时候我们就需要进行区分,就像每个人都有一个身份证号,且唯一

图片 26这个时候如何区分?

<br />

这个时候就需要主键:PRIMARY KEY,所以我们要修改我们的创建表的语句修饰主键的方法有两种:

  • 方法一:
CREATE TABLE T_Person( id INTEGER PRIMARY KEY, name TEXT, age INTEGER);
  • 方法二:
CREATE TABLE IF NOT EXISTS T_Person1( id INTEGER, name TEXT, age INTEGER, PRIMARY KEY ;

<br />这个时候我们再次执行插入语句

INSERT INTO T_Person1 (id,name,age) VALUES(1,'zs',20);.第一次:Affected rows : 1, Time: 0.00sec第二次:Error : UNIQUE constraint failed: T_Person1.id

从上面的结果可以看出,id不能相同,那怎么样才能保证ID不相同,又不输入id这个属性呢?因为人输入,可能会存在差错,交给机器做最好。于是我们要用到个新的关键字:AUTOINCREMENT 自增所以我们还要在修改一次创建语句:

CREATE TABLE IF NOT EXISTS T_Person1( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER);

<br />现在我们就可以肆无忌惮的执行下面这条插入语句了

INSERT INTO T_Person1  VALUES;

<br />下面是执行了5次的之后的表:

图片 27执行了5次之后

现在我们完全可以不用管理ID这个字段,并且现在每一条数据都是唯一的。

<br />但是在某些情况下还是会有不完善的地方,比如下面这条插入语句:

INSERT INTO T_Person1  VALUES;

<br />然后我们来查看一下表:

图片 28插入了一条姓名为空、年龄是35的数据

这样子看似乎没有问题,但是结合实际情况来看,假设这是一个班级的数据,我不希望我的学生连名字都没有,这个不像话。

然后没错,又要使用一个新的关键字:NOT NULL 不为空

然后再次更新表的创建语句:

CREATE TABLE T_Person1 ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, age INTEGER);

然后我们再次执行上面的语句

INSERT INTO T_Person1  VALUES;错误提示:Error : NOT NULL constraint failed: T_Person1.name

这个时候就会报错:提示我们名字不能为空

<br />于是我们要写成:

INSERT INTO T_Person1  VALUES('xiaoming',35);提示:Affected rows : 1, Time: 0.00sec

<br />再次查看表:

图片 29插入数据

然后我们在介绍一个属性:DEFAULT 默认值使用方法就是在字段名后面

age INTEGER DEFAULT 15表示定义了一个age 字段 默认是15

<br />这个时候我们的创建表语句如下:

CREATE TABLE T_Person1 ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, age INTEGER DEFAULT 15);

<br />然后我们插入数据:

INSERT INTO T_Person1  VALUES;INSERT INTO T_Person1  VALUES;INSERT INTO T_Person1  VALUES;INSERT INTO T_Person1  VALUES;

<br />表如下:

图片 30数据表图

通过上面的了解我们就知道如何插入数据,并且设置字段了。

<br />

UPDATE T_Person1 SET name='qq';执行这行语句后会发现所有的名字都变成了qq

<br />更新多个字段

UPDATE T_Person1 set name='qq',age=20;

<br />如图:

图片 31更新数据之后

在上面的代码中我们已经完成了对数据库的更新,但是却不是我们想要的结果,上面的是对整个数据库都进行了更新,如果我们只想对某个数据更新改如何解决呢?后面会讲到

<br />

DELETE FROM T_Person1;执行完上面语句之后查看打印:Affected rows : 4, Time: 0.00sec 影响了四行数据

<br />然后我们再来看表

图片 32空空如也

这个时候我们就已经完成了对DML的学习,但是这些还不够,比如我们更新数据的时候是对整个表进行更新,删除也是把整个表进行删除,如果我们想对指定的数据进行操作,我们需要学习一个新的关键字:WHERE 条件

SQLite的 WHERE 子句用于指定从一个表或多个表中获取数据的条件。如果满足给定的条件,即为真时,则从表中返回特定的值。您可以使用 WHERE 子句来过滤记录,只获取需要的记录。SQLite的运算符有四种:算数、比较、逻辑以及位运算符算数运算符:

+ 加法 - 把运算符两边的值相加 a + b 将得到 30- 减法 - 左操作数减去右操作数 a - b 将得到 -10* 乘法 - 把运算符两边的值相乘 a * b 将得到 200/ 除法 - 左操作数除以右操作数 b / a 将得到 2% 取模 - 左操作数除以右操作数后得到的余数 b % a will give 0

比较运算符

== 检查两个操作数的值是否相等,如果相等则条件为真。  不为真。= 检查两个操作数的值是否相等,如果相等则条件为真。  不为真。!= 检查两个操作数的值是否相等,如果不相等则条件为真。  为真。<> 检查两个操作数的值是否相等,如果不相等则条件为真。 (a <> b) 为真。>> 检查左操作数的值是否大于右操作数的值,如果是则条件为真。  不为真。< 检查左操作数的值是否小于右操作数的值,如果是则条件为真。  为真。>= 检查左操作数的值是否大于等于右操作数的值,如果是则条件为真。 (a >= b) 不为真。<= 检查左操作数的值是否小于等于右操作数的值,如果是则条件为真。 (a <= b) 为真。!< 检查左操作数的值是否不小于右操作数的值,如果是则条件为真。 (a !< b) 为假。!> 检查左操作数的值是否不大于右操作数的值,如果是则条件为真。 (a !> b) 为真。

逻辑运算符:

 AND AND 运算符允许在一个 SQL 语句的 WHERE 子句中的多个条件的存在。 BETWEEN BETWEEN 运算符用于在给定最小值和最大值范围内的一系列值中搜索值。 EXISTS EXISTS 运算符用于在满足一定条件的指定表中搜索行的存在。 IN IN 运算符用于把某个值与一系列指定列表的值进行比较。 NOT IN IN 运算符的对立面,用于把某个值与不在一系列指定列表的值进行比较。 LIKE LIKE 运算符用于把某个值与使用通配符运算符的相似值进行比较。 GLOB GLOB 运算符用于把某个值与使用通配符运算符的相似值进行比较。GLOB 与 LIKE 不同之处在于,它是大小写敏感的。 NOT NOT 运算符是所用的逻辑运算符的对立面。比如 NOT EXISTS、NOT BETWEEN、NOT IN,等等。**它是否定运算符。** OR OR 运算符用于结合一个 SQL 语句的 WHERE 子句中的多个条件。 IS NULL NULL 运算符用于把某个值与 NULL 值进行比较。 IS IS 运算符与 = 相似。 IS NOT IS NOT 运算符与 != 相似。 || 连接两个不同的字符串,得到一个新的字符串。 UNIQUE UNIQUE 运算符搜索指定表中的每一行,确保唯一性。

位运算符:

& 与| 或p q p & q p | q0 0 0 00 1 0 11 1 1 11 0 0 1

<br />在了解了WHERE之后呢我们就可以对数据库进行指定某条删除、更新等操作了先向数据库中 插入一些数据

INSERT INTO T_Person1  VALUES;INSERT INTO T_Person1  VALUES;INSERT INTO T_Person1  VALUES;INSERT INTO T_Person1  VALUES;INSERT INTO T_Person1  VALUES;INSERT INTO T_Person1  VALUES;INSERT INTO T_Person1  VALUES;INSERT INTO T_Person1  VALUES;

<br />然后数据表中数据如下:

图片 33数据图

UPDATE T_Person1 set name='ff',age=20 WHERE name='bb';表示我要更新一个姓名叫做bb的人数据,并且把他的名字设置为qq、年龄设置为20岁Affected rows : 1, Time: 0.00sec 提示已经影响了一条数据

<br />此时查看表如下:

图片 34更新了之后

如果你足够细心,你就发现了现在有两个人名字都叫ff了,如果我现在只想对第一个姓名叫ff的人更新数据我们可以这样子写:

UPDATE T_Person1 set name='ee',age=19 WHERE name='ff' AND age=20;

<br />然后表现在的数据如下:

图片 35更新数据之后

OK,通过上面的语句我们完成了只对第一个名字叫ff的人更新数据,但是现在我想对第二个姓名为ee进行更新,就很尴尬了,数据库中有两个姓名都叫ee的并且年龄都是19岁,到了这里我们定义id为唯一的作用就发挥出来了,此时我们只需要更新指定id即可

UPDATE T_Person1 set name='bb',age=28 WHERE id=9;

<br />更新之后如图:

图片 36更新之后

OK,通过上面的代码我们就可以知道如何对指定的数据进行更新了,下面我们简单的说下删除指定数据.

DELETE FROM T_Person1 WHERE name='gg';

<br />如图:

图片 37删除之后

<br />如果我想删除多条数据呢?比如删除20岁以上的

DELETE FROM T_Person1 WHERE age>20;Affected rows : 4, Time: 0.00sec 影响了四行,应该是删除了四行,我们查看更新之后的表

<br />表:

图片 38删除之后

DQL(Data Query Language)数据查询语言关键字:Select,同时也是使用频率最高的查询数据SELECT 字段名,... FROM 表名;

<br />先插入一下数据进去

INSERT INTO T_Person1  VALUES;INSERT INTO T_Person1  VALUES;INSERT INTO T_Person1  VALUES;INSERT INTO T_Person1  VALUES;INSERT INTO T_Person1  VALUES;INSERT INTO T_Person1  VALUES;INSERT INTO T_Person1  VALUES;INSERT INTO T_Person1  VALUES;INSERT INTO T_Person1  VALUES;INSERT INTO T_Person1  VALUES;INSERT INTO T_Person1  VALUES;INSERT INTO T_Person1  VALUES;INSERT INTO T_Person1  VALUES;INSERT INTO T_Person1  VALUES;INSERT INTO T_Person1  VALUES;INSERT INTO T_Person1  VALUES;INSERT INTO T_Person1  VALUES;INSERT INTO T_Person1  VALUES;

<br />然后可以看到表数据如下:

图片 39数据表如图

<br />OK,在填充了数据之后,我们开始查找

SELECT * FROM T_Person1;在这里*代表通配符,所有的字段

如图:

图片 40查找之后

现在我们不想看到那么多数据,假设我们只显示age

SELECT age FROM T_Person1;

如图所示

图片 41单个字段

查询多个字段: 这里字段的输入顺序就和显示的列名数据一致

SELECT age,name FROM T_Person1;

如图:

图片 42多个字段

OK,需求总是要变来变去的,这个时候我们想查询年龄大于22岁的数据,并且显示所有的信息

SELECT * FROM T_Person1 WHERE age>22;

如图:

图片 43条件查询

<br />然后我们想找名字为ab的人,不要显示id

SELECT name,age FROM T_Person1 WHERE name='ab';

如图:

图片 44条件查询二

如果你看到了这里,那么恭喜你,你已经知道了如何创建/删除表,以及对表的增删改查,同时还了解了WHERE条件语句,到这里基本上你已经可以自己管理数据库了。

<br />

继续上面的表,这个时候老师分配任务啦,给每个人100块的启动资金,然后一个月后来查看他们是让100块变成了0块还是变成了更多,这个时候上面就来话了,你给我添加一个字段进去,保存他们的金钱额度。但是这个需求在项目开始之初是没有考虑到的,这就比较坑爹了,原来的数据库文件的内容不能删除,又要新增一个字段……愁死我了。方法有很多种,这里不作介绍了只是来介绍一下动态添加字段这个方法

<br />

ALTER TABLE 表名 ADD 字段名 字段类型;

未插入字段之前的表:

图片 45未插入之前

插入一个字段:money

ALTER TABLE T_Person1 ADD money real DEFAULT 100.0;

图片 46插入之后

OK,到这里完美解决了之前的问题

比如你正在上厕所,突然有个人就进来把你赶出去了,占了你的坑,此时的你肯定是在暴怒状态,正常的应该是:先看下里面有没有人,有人了就换一个,没人然后在进去占一个坑……所以我们需要判断一下是不是可以插入这个字段

SQLITE_API const unsigned char *SQLITE_STDCALL sqlite3_column_text(sqlite3_stmt*, int iCol);

通过上面的方法会返回给我们一个C字符串数组判断这个数组是不是有值,如果有了就不能插入了

<br />为此我特地的又运行了一次

Error : duplicate column name: money提示说有两个都叫money的列了

<br />

可以暂时把表或列重命名为另一个名字,这被称为别名。使用表别名是指在一个特定的 SQLite 语句中重命名表。重命名是临时的改变,在数据库中实际的表的名称不会改变。列别名用来为某个特定的 SQLite 语句重命名表中的列。

比如:给字段起别名

SELECT name as xingming, age as nianling FROM T_Person1 WHERE age>25;

<br />如图:

图片 47字段别名

给表起别名:

SELECT one.name as one_name,one.age as one_age FROM T_Person1 as one WHERE age>25;

如图:

图片 48表别名

多表查询:先创建一个T_Person2表,然后插入一下数据

CREATE TABLE IF NOT EXISTS T_Person2( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, age INTEGER DEFAULT 20, money REAL DEFAULT 100.0);INSERT INTO T_Person2  VALUES('asdf',28);INSERT INTO T_Person2  VALUES('hsdfg',25);INSERT INTO T_Person2  VALUES('afdfb',24);INSERT INTO T_Person2  VALUES('dfasdf',22);INSERT INTO T_Person2  VALUES('ffdfd',23);INSERT INTO T_Person2  VALUES('yfdft',28);INSERT INTO T_Person2  VALUES('ocvi',21);INSERT INTO T_Person2  VALUES('qwvc',33);INSERT INTO T_Person2  VALUES('gvcvf',19);INSERT INTO T_Person2  VALUES('kcvcl',18);INSERT INTO T_Person2  VALUES;INSERT INTO T_Person2  VALUES('rvcdst',25);INSERT INTO T_Person2  VALUES('tr43',28);INSERT INTO T_Person2  VALUES('qwgh',26);INSERT INTO T_Person2  VALUES('xgfdx',24);INSERT INTO T_Person2  VALUES('hfgzx',25);INSERT INTO T_Person2  VALUES('mgfhn',24);INSERT INTO T_Person2  VALUES('vhgb',25);

这个时候,T_Person1里面有的字段T_Person2里面也有,就想两个班级里面的字段都有姓名,年龄等数据。别名这个时候就可以很方便的区分

SELECT one.name as one_name, one.age as one_age, two.name as two_name, two.age as two_age FROM T_Person1 as one, T_Person2 as two WHERE one.age>30 AND two.age>30;

如图:

图片 49如图

写别名的方式还有一种,但是不推荐,直接加个空格

SELECT name xingming,age nianling FROM T_Person2;

如图:

图片 50别名

<br />

ORDER BY,用于对数据进行排序考虑这么一种情况,当你把数据信息输入进去,而数据本身是杂乱无章的,这个时候你需要排序,比如:name、age字段来排序。DESC : 降序ASC:升序

<br />

SELECT * FROM T_Person2 ORDER BY age;

如图:根据age升序

图片 51单个字段排序

<br />多个字段排序

SELECT * FROM T_Person2 ORDER BY name,age;

如图:根据name升序,在根据age升序

图片 52多个字段排序

通过上面的语句我们发现在不写明是什么排序的情况下默认是升序,也就是ASC

<br />通过写上ASC来证明:

SELECT * FROM T_Person2 ORDER BY name ASC,age ASC;

如图:

图片 53

<br />下面根据age字段进行降序

SELECT *FROM T_Person2ORDER BY age DESC;

如图:

图片 54age降序

<br />最后我们在实现一个根据name升序,age降序的先别着急,因为我们数据库中没有相同姓名的,所以我们先插入两条数据插入数据

INSERT INTO T_Person1 VALUES;INSERT INTO T_Person1 VALUES;

检索

SELECT *FROM T_Person1ORDER BY name ASC,age DESC;

如图:

图片 55检索如图

<br />

快速查询有多少条数据或者查询某个字段有多少条数据

SELECT COUNT FROM 表名;

<br />查询有多条数据:

SELECT COUNT FROM T_Person1;

如图

图片 56检索

<br />检索age字段条数:

SELECT COUNT FROM T_Person1;

图片 57age

<br />

Limit常用来对数据进行分页,比如每页固定显示n条数据

SELECT 字段... FORM 表名 LIMIT a,b;a:表示跳过多少条数据b:从a之后开始取多少条数据

在网络请求的时候我们经常可以向服务器说明,从哪一页开始,取多少条,类似这样子的操作很频繁。

<br />举例:每页取10条数据

  • 第1页:... LIMIT 0,10;
  • 第2页:... LIMIT 10,10;
  • 第3页:... LIMIT 20,10;
  • ...
  • 第n页:... LIMIT 10*,10;

于是我们可以得出一个公式:m:每次取多少n:页m*,m

<br />

<br />代码:取10条数据,从0开始

SELECT * FROM T_Person1 LIMIT 10;

如图:

图片 58limit

<br />如果我们数据库中没有那么多的情况下,就会把剩下的全部都取出来比如:T_Person1中我们只有23条数据,在上面检索出来过执行:

SELECT * FROM T_Person1 LIMIT 20,10;

如图:

图片 59limit 20,10

<br />OK,进一步增加难度,我要取得age>20的前面10条数据

SELECT * FROM T_Person1 WHERE age>20 LIMIT 10;

图片 60检索age大于20的数据,取十条图片 61

<br />然后我们在联合排序提取数据:

SELECT *FROM T_Person1ORDER BY age DESCLIMIT 10;

如图

图片 62根据age进行排序,取前面十条

对比查看数据是不是正确

图片 63对比

通过两个图比较,发现取出来的数据确实是正确的。

<br />文中一些比较简短的语句其实没比较分行分的那么清楚,只是笔者为了能让人阅读起来更加方便,有写笔者也没有进行分行,不过阅读起来应该还是比较简单的。OK,如果你坚持看完了,希望或多或少能给你带来一些小小的帮助。笔者写这个也花了一点时间,如果能让您复习或者有幸让你更了解SQLite的话,就不枉费这些时间了。

最后厚着脸皮求个喜欢,那是我最大的动力。后面会更新如何在Swift3.0的中使用。

Select * from 表一 join 表二 on 关联条件 where 筛选条件多个筛选条件中用 AND 分隔

假设有一个Person 表,设计如下:

字段名 类型 描述
user_id text 用户主键
name text 用户姓名

一个Action

字段名 类型 描述
user_id text 主键
action text 动作

现在我们要如何知道用户执行了什么操作?使用join

select * from //查找所有字段 Person as p join Action as a //把表关联 on p.user_id=a.user_id // 关联的字段where p.user_id = 'xxx' //筛选的条件select p.name, a.action from //只显示 name 和 action Person as p join Action as a //把表关联 on p.user_id=a.user_id // 关联的字段where p.user_id = 'xxx' and a.action = 'xxxxx' //筛选的条件

本文由澳门威斯尼人平台登录发布于澳门威斯尼人平台登录,转载请注明出处:前端学数据库之记录操作,关于移动端SQLite

相关阅读