SQLite入门之四表的增删攺查

前端之家收集整理的这篇文章主要介绍了SQLite入门之四表的增删攺查前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

4.1 sqlite 存储类型

sqlite 存储类型

REALTEXTBLOB
存储类型 描述
NULL 值是一个 NULL 值。
INTEGER 值是一个带符号的整数,根据值的大小存储在 1、2、3、4、6 或 8 字节中。
值是一个浮点值,存储为 8 字节的 IEEE 浮点数字。
值是一个文本字符串,使用数据库编码(UTF-8、UTF-16BE 或 UTF-16LE)存储。
值是一个 blob 数据,完全根据它的输入存储。

4.2 创建数据库和创建表

创建了一个 COMPANY 表,ID 作为主键,NOT NULL 的约束表示在表中创建纪录时这些字段不能为 NULL

  1. bixiaopeng@bixiaopeng db$ sqlite3 wireless.db
  2. sqlite version 3.7.13 2012-07-17 17:46:21
  3. Enter ".help" for instructions
  4. Enter sql statements terminated with a ";"
  5. sqlite> CREATE TABLE COMPANY(ID INT PRIMARY KEY NOT NULL,NAME TEXT NOT NULL,AGE INT NOT NULL,ADDRESS CHAR(50),SALARY REAL);

CREATE TABLE 是告诉数据库系统创建一个新表的关键字。CREATE TABLE 语句后跟着表的唯一的名称或标识。您也可以选择指定带有 table_name 的 database_name。

查看表是否创建成功

  1. sqlite> .tables
  2. COMPANY

查看表的完整信息

  1. sqlite> .schema COMPANY
  2. CREATE TABLE COMPANY(ID INT PRIMARY KEY NOT NULL,SALARY REAL);

4.3 插入数据

插入数据,方法一:插入对应的列的值

  1. sqlite> INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
  2. ...> VALUES (1,'Paul',32,'California',20000.00 );

查询是否插入成功

  1. sqlite> SELECT * FROM COMPANY;
  2. 1|Paul|32|California|20000.0

 插入数据,方法二:给所有列插入值

  1. sqlite> INSERT INTO COMPANY VALUES (7,'James',24,'Houston',10000.00 );
  2. sqlite> SELECT * FROM COMPANY;
  3. 1|Paul|32|California|20000.0
  4. 7|James|24|Houston|10000.0

用第二种方法多插入几个数据:

  1. sqlite> INSERT INTO COMPANY VALUES (2,'Allen',25,'Texas',15000.00 );
  2. sqlite> INSERT INTO COMPANY VALUES (3,'Teddy',23,'Norway',20000.00 );
  3. sqlite> INSERT INTO COMPANY VALUES (4,'Mark','Rich-Mond ',65000.00 );
  4. sqlite> INSERT INTO COMPANY VALUES (5,'David',27,85000.00 );
  5. sqlite> INSERT INTO COMPANY VALUES (6,'Kim',22,'South-Hall',45000.00 );
  6. sqlite> SELECT * FROM COMPANY;
  7. 1|Paul|32|California|20000.0
  8. 7|James|24|Houston|10000.0
  9. 2|Allen|25|Texas|15000.0
  10. 3|Teddy|23|Norway|20000.0
  11. 4|Mark|25|Rich-Mond |65000.0
  12. 5|David|27|Texas|85000.0
  13. 6|Kim|22|South-Hall|45000.0

4.4 更新数据

  1. //先插入一条数据
  2. sqlite> INSERT INTO COMPANY VALUES (8,'wirelessqa',28,'HZ',20000.00 );
  3. sqlite> SELECT * FROM COMPANY;
  4. ID NAME AGE ADDRESS SALARY
  5. 1 Paul 32 California 20000.0
  6. 7 James 24 Houston 10000.0
  7. 2 Allen 25 Texas 15000.0
  8. 3 Teddy 23 Norway 20000.0
  9. 4 Mark 25 Rich-Mond 65000.0
  10. 5 David 27 Texas 85000.0
  11. 6 Kim 22 South-Hall 45000.0
  12. 8 wirelessqa 28 HZ 20000.0
  13.  
  14. //更新NAME为wirelessqa的地址为NanJing
  15. sqlite> UPDATE COMPANY SET ADDRESS = 'NanJing' WHERE NAME = 'wirelessqa';
  16. 8 wirelessqa 28 NanJing 20000.0
  17.  
  18. //查看更新后的数据
  19. sqlite> SELECT * FROM COMPANY WHERE NAME = 'wirelessqa';
  20. ID NAME AGE ADDRESS SALARY
  21. 8 wirelessqa 28 NanJing 20000.0

4.5 删除数据

  1. //删除ADDRESS为NanJing的这条数据
  2. sqlite> DELETE FROM COMPANY WHERE ADDRESS = 'NanJing';
  3. sqlite> SELECT * FROM COMPANY WHERE ADDRESS = 'NanJing';
  4. sqlite>

4.6 数据查询

4.6.1. sqlite 算术运算符

运算符: + - * / %

  1. sqlite> select 4 + 2;
  2. 6
  3. sqlite> select 4 - 2;
  4. 2
  5. sqlite> select 4 * 2;
  6. 8
  7. sqlite> select 4 / 2;
  8. 2
  9. sqlite> select 4 % 2;
  10. 0

4.6.2. sqlite 算术运算符

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

看一下表里现有的数据:

  1. sqlite> .headers on
  2. sqlite> .mode tabs
  3. sqlite> SELECT * FROM COMPANY;
  4. ID NAME AGE ADDRESS SALARY
  5. 1 Paul 32 California 20000.0
  6. 7 James 24 Houston 10000.0
  7. 2 Allen 25 Texas 15000.0
  8. 3 Teddy 23 Norway 20000.0
  9. 4 Mark 25 Rich-Mond 65000.0
  10. 5 David 27 Texas 85000.0
  11. 6 Kim 22 South-Hall 45000.0
  12. sqlite> SELECT * FROM COMPANY WHERE AGE = 32;
  13. ID NAME AGE ADDRESS SALARY
  14. 1 Paul 32 California 20000.0
  15. sqlite> SELECT * FROM COMPANY WHERE AGE == 32 ;
  16. ID NAME AGE ADDRESS SALARY
  17. 1 Paul 32 California 20000.0
  18. sqlite> SELECT * FROM COMPANY WHERE AGE < 32;
  19. ID NAME AGE ADDRESS SALARY
  20. 7 James 24 Houston 10000.0
  21. 2 Allen 25 Texas 15000.0
  22. 3 Teddy 23 Norway 20000.0
  23. 4 Mark 25 Rich-Mond 65000.0
  24. 5 David 27 Texas 85000.0
  25. 6 Kim 22 South-Hall 45000.0
  26. sqlite> SELECT * FROM COMPANY WHERE AGE != 32;
  27. ID NAME AGE ADDRESS SALARY
  28. 7 James 24 Houston 10000.0
  29. 2 Allen 25 Texas 15000.0
  30. 3 Teddy 23 Norway 20000.0
  31. 4 Mark 25 Rich-Mond 65000.0
  32. 5 David 27 Texas 85000.0
  33. 6 Kim 22 South-Hall 45000.0
  34. sqlite> SELECT * FROM COMPANY WHERE AGE <= 32;
  35. ID NAME AGE ADDRESS SALARY
  36. 1 Paul 32 California 20000.0
  37. 7 James 24 Houston 10000.0
  38. 2 Allen 25 Texas 15000.0
  39. 3 Teddy 23 Norway 20000.0
  40. 4 Mark 25 Rich-Mond 65000.0
  41. 5 David 27 Texas 85000.0
  42. 6 Kim 22 South-Hall 45000.0
  43. sqlite> SELECT * FROM COMPANY WHERE AGE >= 32;
  44. ID NAME AGE ADDRESS SALARY
  45. 1 Paul 32 California 20000.0
  46. sqlite> SELECT * FROM COMPANY WHERE AGE > 32;

4.6.3. sqlite 逻辑运算符

ANDBETWEENEXISTSINNOT INLIKEGLOBNOTORIS NULLISIS NOT\UNIQUE
AND 运算符允许在一个 sql 语句的 WHERE 子句中的多个条件的存在。
BETWEEN 运算符用于在给定最小值和最大值范围内的一系列值中搜索值。
EXISTS 运算符用于在满足一定条件的指定表中搜索行的存在。
IN 运算符用于把某个值与一系列指定列表的值进行比较。
IN 运算符的对立面,用于把某个值与不在一系列指定列表的值进行比较。
LIKE 运算符用于把某个值与使用通配符运算符的相似值进行比较。
GLOB 运算符用于把某个值与使用通配符运算符的相似值进行比较。GLOB 与 LIKE 不同之处在于,它是大小写敏感的。
NOT 运算符是所用的逻辑运算符的对立面。比如 NOT EXISTS、NOT BETWEEN、NOT IN,等等。它是否定运算符。
OR 运算符用于结合一个 sql 语句的 WHERE 子句中的多个条件。
NULL 运算符用于把某个值与 NULL 值进行比较。
IS 运算符与 = 相似。
IS NOT 运算符与 != 相似。
\
UNIQUE 运算符搜索指定表中的每一行,确保唯一性(无重复)。
  1. //AND 运算符允许在一个 sql 语句的 WHERE 子句中的多个条件的存在。
  2. sqlite> SELECT * FROM COMPANY WHERE AGE < 25 AND SALARY > 15000.0;
  3. ID NAME AGE ADDRESS SALARY
  4. 3 Teddy 23 Norway 20000.0
  5. 6 Kim 22 South-Hall 45000.0
  6.  
  7. //OR 运算符用于结合一个 sql 语句的 WHERE 子句中的多个条件。
  8. sqlite> SELECT * FROM COMPANY WHERE AGE < 25 OR SALARY > 15000.0;
  9. ID NAME AGE ADDRESS SALARY
  10. 1 Paul 32 California 20000.0
  11. 7 James 24 Houston 10000.0
  12. 3 Teddy 23 Norway 20000.0
  13. 4 Mark 25 Rich-Mond 65000.0
  14. 5 David 27 Texas 85000.0
  15. 6 Kim 22 South-Hall 45000.0
  16.  
  17. //BETWEEN 运算符用于在给定最小值和最大值范围内的一系列值中搜索值。
  18. sqlite> SELECT * FROM COMPANY WHERE AGE BETWEEN 25 AND 32;
  19. ID NAME AGE ADDRESS SALARY
  20. 1 Paul 32 California 20000.0
  21. 2 Allen 25 Texas 15000.0
  22. 4 Mark 25 Rich-Mond 65000.0
  23. 5 David 27 Texas 85000.0
  24.  
  25. //EXISTS 运算符用于在满足一定条件的指定表中搜索行的存在。
  26. sqlite> SELECT AGE FROM COMPANY WHERE EXISTS (SELECT AGE FROM COMPANY WHERE SALARY > 65000);
  27. AGE
  28. 32
  29. 24
  30. 25
  31. 23
  32. 25
  33. 27
  34. 22
  35.  
  36. //AGE 不为 NULL 的所有记录
  37. sqlite> SELECT * FROM COMPANY WHERE AGE IS NOT NULL;
  38. ID NAME AGE ADDRESS SALARY
  39. 1 Paul 32 California 20000.0
  40. 7 James 24 Houston 10000.0
  41. 2 Allen 25 Texas 15000.0
  42. 3 Teddy 23 Norway 20000.0
  43. 4 Mark 25 Rich-Mond 65000.0
  44. 5 David 27 Texas 85000.0
  45. 6 Kim 22 South-Hall 45000.0
  46.  
  47. //LIKE 运算符用于把某个值与使用通配符运算符的相似值进行比较。
  48. sqlite> SELECT * FROM COMPANY WHERE NAME LIKE 'Ki%';
  49. ID NAME AGE ADDRESS SALARY
  50. 6 Kim 22 South-Hall 45000.0
  51.  
  52. //GLOB 运算符用于把某个值与使用通配符运算符的相似值进行比较。GLOB 与 LIKE 不同之处在于,它是大小写敏感的。
  53. sqlite> SELECT * FROM COMPANY WHERE NAME GLOB 'Ki*';
  54. ID NAME AGE ADDRESS SALARY
  55. 6 Kim 22 South-Hall 45000.0
  56.  
  57. //IN 运算符用于把某个值与一系列指定列表的值进行比较。
  58. sqlite> SELECT * FROM COMPANY WHERE AGE IN ( 25,27 );
  59. ID NAME AGE ADDRESS SALARY
  60. 2 Allen 25 Texas 15000.0
  61. 4 Mark 25 Rich-Mond 65000.0
  62. 5 David 27 Texas 85000.0
  63.  
  64. //IN 运算符的对立面,用于把某个值与不在一系列指定列表的值进行比较。
  65. sqlite> SELECT * FROM COMPANY WHERE AGE NOT IN ( 25,27 );
  66. ID NAME AGE ADDRESS SALARY
  67. 1 Paul 32 California 20000.0
  68. 7 James 24 Houston 10000.0
  69. 3 Teddy 23 Norway 20000.0
  70. 6 Kim 22 South-Hall 45000.0
  71.  
  72. //
  73. sqlite> SELECT * FROM COMPANY WHERE AGE > (SELECT AGE FROM COMPANY WHERE SALARY > 65000);
  74. ID NAME AGE ADDRESS SALARY
  75. 1 Paul 32 California 20000.0
  76.  
  77. sqlite> SELECT * FROM COMPANY WHERE AGE < (SELECT AGE FROM COMPANY WHERE SALARY > 65000);
  78. ID NAME AGE ADDRESS SALARY
  79. 7 James 24 Houston 10000.0
  80. 2 Allen 25 Texas 15000.0
  81. 3 Teddy 23 Norway 20000.0
  82. 4 Mark 25 Rich-Mond 65000.0
  83. 6 Kim 22 South-Hall 45000.0

4.6.4 排序、分组、去重、时间

  1. //通过内置函数查看一共有多少条数据
  2. sqlite> SELECT COUNT(*) AS "RECORDS" FROM COMPANY;
  3. RECORDS
  4. 7
  5.  
  6. //显示前4条
  7. sqlite> SELECT * FROM COMPANY LIMIT 4;
  8. ID NAME AGE ADDRESS SALARY
  9. 1 Paul 32 California 20000.0
  10. 7 James 24 Houston 10000.0
  11. 2 Allen 25 Texas 15000.0
  12. 3 Teddy 23 Norway 20000.0
  13.  
  14.  
  15. //按SALARY降序排序
  16. sqlite> SELECT * FROM COMPANY ORDER BY SALARY ASC;
  17. ID NAME AGE ADDRESS SALARY
  18. 7 James 24 Houston 10000.0
  19. 2 Allen 25 Texas 15000.0
  20. 1 Paul 32 California 20000.0
  21. 3 Teddy 23 Norway 20000.0
  22. 6 Kim 22 South-Hall 45000.0
  23. 4 Mark 25 Rich-Mond 65000.0
  24. 5 David 27 Texas 85000.0
  25.  
  26. //按SALARY升序排序
  27. sqlite> SELECT * FROM COMPANY ORDER BY SALARY DESC;
  28. ID NAME AGE ADDRESS SALARY
  29. 5 David 27 Texas 85000.0
  30. 4 Mark 25 Rich-Mond 65000.0
  31. 6 Kim 22 South-Hall 45000.0
  32. 1 Paul 32 California 20000.0
  33. 3 Teddy 23 Norway 20000.0
  34. 2 Allen 25 Texas 15000.0
  35. 7 James 24 Houston 10000.0
  36.  
  37. //按NAME和SALARY升序排序
  38. sqlite> SELECT * FROM COMPANY ORDER BY AGE,SALARY DESC;
  39. ID NAME AGE ADDRESS SALARY
  40. 6 Kim 22 South-Hall 45000.0
  41. 3 Teddy 23 Norway 20000.0
  42. 7 James 24 Houston 10000.0
  43. 4 Mark 25 Rich-Mond 65000.0
  44. 2 Allen 25 Texas 15000.0
  45. 5 David 27 Texas 85000.0
  46. 1 Paul 32 California 20000.0
  47.  
  48. // GROUP BY 子句用于与 SELECT 语句一起使用,来对相同的数据进行分组。
  49.  
  50. // 查询某个人的工资总数
  51. sqlite> SELECT NAME,SUM(SALARY) FROM COMPANY GROUP BY NAME;
  52. NAME SUM(SALARY)
  53. Allen 15000.0
  54. David 85000.0
  55. James 10000.0
  56. Kim 45000.0
  57. Mark 65000.0
  58. Paul 20000.0
  59. Teddy 20000.0
  60.  
  61. // GROUP BY 和 ORDER BY一起用
  62. sqlite> SELECT NAME,SUM(SALARY) FROM COMPANY GROUP BY NAME ORDER BY NAME DESC;
  63. NAME SUM(SALARY)
  64. Teddy 20000.0
  65. Paul 20000.0
  66. Mark 65000.0
  67. Kim 45000.0
  68. James 10000.0
  69. David 85000.0
  70. Allen 15000.0
  71.  
  72. //HAVING 子句允许指定条件来过滤将出现在最终结果中的分组结果。
  73.  
  74. //WHERE 子句在所选列上设置条件,而 HAVING 子句则在由 GROUP BY 子句创建的分组上设置条件。
  75.  
  76. //在一个查询中,HAVING 子句必须放在 GROUP BY 子句之后,必须放在 ORDER BY 子句之前
  77.  
  78.  
  79. //查询所有数据
  80. qlite> SELECT * FROM COMPANY;
  81. ID NAME AGE ADDRESS SALARY
  82. 1 Paul 32 California 20000.0
  83. 7 James 24 Houston 10000.0
  84. 2 Allen 25 Texas 15000.0
  85. 3 Teddy 23 Norway 20000.0
  86. 4 Mark 25 Rich-Mond 65000.0
  87. 5 David 27 Texas 85000.0
  88. 6 Kim 22 South-Hall 45000.0
  89.  
  90. //查询AGE,并去重
  91. sqlite> SELECT DISTINCT AGE FROM COMPANY;
  92. AGE
  93. 32
  94. 24
  95. 25
  96. 23
  97. 27
  98. 22
  99.  
  100. 日期 & 时间
  101.  
  102. //把header关掉了
  103. sqlite> . header off
  104. sqlite> SELECT date('now');
  105. 2014-02-27
  106.  
  107. sqlite> SELECT datetime(1092941466,'unixepoch');
  108. 2004-08-19 18:51:06
  109.  
  110. sqlite> SELECT TIME('NOW');
  111. 07:47:25å

4.6.5. 常用函数

  1. //表行数
  2. sqlite> SELECT count(*) FROM COMPANY;
  3. 7
  4.  
  5. //最大值
  6. sqlite> SELECT max(salary) FROM COMPANY;
  7. 85000.0
  8.  
  9. //最小值
  10. sqlite> SELECT min(salary) FROM COMPANY;
  11. 10000.0
  12.  
  13. //平均值
  14. sqlite> SELECT avg(salary) FROM COMPANY;
  15. 37142.8571428572
  16. sqlite> SELECT sum(salary) FROM COMPANY;
  17. 260000.0
  18.  
  19. //转大写
  20. sqlite> SELECT upper(name) FROM COMPANY;
  21. PAUL
  22. JAMES
  23. ALLEN
  24. TEDDY
  25. MARK
  26. DAVID
  27. KIM
  28.  
  29. //转小写
  30. sqlite> SELECT lower(name) FROM COMPANY;
  31. paul
  32. james
  33. allen
  34. teddy
  35. mark
  36. david
  37. kim
  38.  
  39. //长度
  40. sqlite> SELECT name,length(name) FROM COMPANY;
  41. Paul 4
  42. James 5
  43. Allen 5
  44. Teddy 5
  45. Mark 4
  46. David 5
  47. Kim 3
  48. sqlite>

4.7 删除

  1. sqlite> DROP TABLE COMPANY;
  2. sqlite> .tables

4.8 删除数据库

  1. 直接rm 删除db文件就可以了

本系列主要参考:

http://www.w3cschool.cc/sqlite/sqlite-functions.html

http://www.cnblogs.com/myqiao/archive/2011/07/10/2102465.html


微信公众帐号: wirelessqa

关于作者:

作者:毕小朋 | 老 毕邮箱:wirelessqa.me@gmail.com

微博:@WirelessQA博客:http://blog.csdn.net/wirelessqa

猜你在找的Sqlite相关文章