SQLite 学习笔记(一)
一、优点
1.不需要单独的服务器进程或操作的系统;2.不需要配置安装;3.轻量级,无外部依赖;
二、命令 create,insert,select,update,alter,delete,drop
CREATE:创建一个新的表,一个表的视图,或者数据库中的其他对象。
ALTER:修改数据库中的某个已有的数据库对象,比如一个表。
DROP:删除整个表,或者表的视图,或者数据库中的其他对象。
INSERT:创建一条记录。
UPDATE:修改记录。
DELETE:删除记录。
SELECT:从一个或多个表中检索某些记录。
三、命令eg
1.创建一个表,ID 作为主键,NOT NULL 表示在表中创建纪录时这些字段不能为 NULL:
create table tablename(ID int integer primary key NOT NULL,name TEXT,past TEXT);
2.插入部分数据到表
insert into tablename (column1, column2, column3,...columnN) values(value1, value2, value3,...valueN);
3.如果要为表中的所有列添加值,您也可以不需要在 SQLite 查询中指定列名称。但要确保值的顺序与列在表中的顺序一致。SQLite 的 INSERT INTO 语法如下:
insert into tablename values(value1, value2, value3,...valueN);
4.用一个表来填充另一个表
insert into tablename (column1, column2, column3,...columnN)
select column1, column2, ...columnN
from destablename [WHERE condition];
5.UPDATE 查询用于修改表中已有的记录
eg:修改表内ID=6的地址(address)
UPDATE tablename SET address="new add" where ID=6
四、逻辑运算符
1. EXISTS:用于在满足一定条件的表中搜索行的存在
2. IN:IN 运算符用于把某个值与一系列指定列表的值进行比较。
eg:下面的 SELECT 语句列出了 AGE 的值为 25 或 27 的所有记录:
SELECT * FROM COMPANY WHERE AGE IN ( 25, 27 );
3. NOT IN:IN 运算符的对立面,用于把某个值与不在一系列指定列表的值进行比较。
eg:下面的 SELECT 语句列出了 AGE 的值既不是 25 也不是 27 的所有记录:
SELECT * FROM COMPANY WHERE AGE NOT IN ( 25, 27 );
4. LIKE: LIKE 运算符用于把某个值与使用通配符运算符的相似值进行比较。
eg: NAME 以 'Ki' 开始的所有记录,'Ki' 之后的字符不做限制:
select * from tablename where NAME like "ki%"
LIKE通常与两个运算符一起使用(%,_),百分号(%)代表零个、一个或多个数字或字符。下划线(_)代表一个单一的数字或字符。
WHERE SALARY LIKE '200%' 查找以 200 开头的任意值
WHERE SALARY LIKE '%200%' 查找任意位置包含 200 的任意值
WHERE SALARY LIKE '_00%' 查找第二位和第三位为 00 的任意值
WHERE SALARY LIKE '2_%_%' 查找以 2 开头,且长度至少为 3 个字符的任意值
WHERE SALARY LIKE '%2' 查找以 2 结尾的任意值
WHERE SALARY LIKE '_2%3' 查找第二位为 2,且以 3 结尾的任意值
WHERE SALARY LIKE '2___3' 查找长度为 5 位数,且以 2 开头以 3 结尾的任意值
5. GLOB:把某个值与使用通配符运算符的相似值进行比较。GLOB 与 LIKE 不同之处在于,它是大小写敏感的。结合运算符星号(*)代表零个、一个或多个数字或字符。问号(?)代表一个单一的数字或字符。
WHERE SALARY GLOB '200*' 查找以 200 开头的任意值
WHERE SALARY GLOB '*200*' 查找任意位置包含 200 的任意值
WHERE SALARY GLOB '?00*' 查找第二位和第三位为 00 的任意值
WHERE SALARY GLOB '2??' 查找以 2 开头,且长度至少为 3 个字符的任意值
WHERE SALARY GLOB '*2' 查找以 2 结尾的任意值
WHERE SALARY GLOB '?2*3' 查找第二位为 2,且以 3 结尾的任意值
WHERE SALARY GLOB '2???3' 查找长度为 5 位数,且以 2 开头以 3 结尾的任意值
eg:下面的 SELECT 语句列出了 NAME 以 'Ki' 开始的所有记录,'Ki' 之后的字符不做限制:
SELECT * FROM COMPANY WHERE NAME GLOB 'Ki*';
6. NOT:NOT 运算符是所用的逻辑运算符的对立面。比如 NOT EXISTS、NOT BETWEEN、NOT IN,等等。它是否定运算符。
7. IS NULL:NULL 运算符用于把某个值与 NULL 值进行比较。
8. IS:IS 运算符与 = 相似。
9:IS NOT:IS NOT 运算符与 != 相似。
eg:SELECT 语句列出了 AGE 不为 NULL 的所有记录,结果显示所有的记录:
slecet from tablename where AGE IS NOT NULL
10.UNIQUE:UNIQUE 运算符搜索指定表中的每一行,确保唯一性(无重复)。
11. LIMIT 子句用于限制由 SELECT 语句返回的数据数量。
SELECT * FROM COMPANY LIMIT 6 取6行
SELECT * FROM COMPANY LIMIT 3 OFFSET 2; 从第三位开始提取 3 个记录
12. ORDER BY 子句是用来基于一个或多个列按升序或降序顺序排列数据。
SELECT * FROM COMPANY ORDER BY SALARY ASC; 结果按 SALARY 升序排序
SELECT * FROM COMPANY ORDER BY NAME DESC; NAME 降序排序
13. GROUP BY 子句用于与 SELECT 语句一起使用,来对相同的数据进行分组。
在 SELECT 语句中,GROUP BY 子句放在 WHERE 子句之后,放在 ORDER BY 子句之前。
14.HAVING 子句允许指定条件来过滤将出现在最终结果中的分组结果。
WHERE 子句在所选列上设置条件,而 HAVING 子句则在由 GROUP BY 子句创建的分组上设置条件。
eg:显示名称计数小于 2 的所有记录:
SELECT * FROM COMPANY GROUP BY name HAVING count(name) < 2;
15. DISTINCT 与 SELECT 一起使用,来消除所有重复的记录,并只获取唯一一次记录。
SELECT DISTINCT name FROM COMPANY;