zoukankan      html  css  js  c++  java
  • SQLite3学习笔记(3)

    SQLite 表达式

    表达式是一个或多个值、运算符和计算值的 SQL函数的组合。

    SQL表达式与公式类似,都写在查询语言中。您还可以使用特定的数据集来查询数据库。

    SELECT语句的基本语法如下:

    SELECT column1, column2, columnN 
    FROM table_name 
    WHERE [CONDITION | EXPRESSION];

    假设现表中的数据如下:

    sqlite> SELECT * FROM COM;
    ID          NAME        AGE
    ----------  ----------  ----------
    1           JXX         18
    2           CLJ         19
    3           WX          19
    4           HY          21
    5           CCC         19

    SQLite-布尔表达式

    SQLite 的布尔表达式在匹配单个值的基础上获取数据。语法如下:

    sqlite> SELECT * FROM COM WHERE AGE = 19;
    ID          NAME        AGE
    ----------  ----------  ----------
    2           CLJ         19
    3           WX          19
    5           CCC         19

    SQLite-数值表达式

    这些表达式用来执行查询中的任何数学运算:

    SELECT numerical_expression as  OPERATION_NAME
    [FROM table_name WHERE CONDITION] ;

    在这里,numerical_expression 用于数学表达式或任何公式。下面是实例:

    sqlite> SELECT (15+6) AS ADDITION
       ...> ;
    21

    有几个内置的函数,比如 avg()、sum()、count(),等等,执行被称为对一个表或者一个特定的表列的汇总数据计算。

    sqlite> SELECT COUNT(*) AS "RECORDS" FROM COM;
    5

    SQLite-日期表达式

    日期表达式返回当前系统日期和时间值,这些表达式将被用于各种数据操作。

    sqlite> select datetime('now','localtime');
    2018-09-26 12:33:09

    SQLite Update 语句

    UPDATE 查询用于修改表中已有的记录。可以使用带有WHERE 子句的 UPDATE 查询来更新选定行,否则所有的行都会被更新。

    大有 WHERE 子句的UPDATE查询的基本语法如下:

    UPDATE table_name
    SET column1 = value1, column2 = value2...., columnN = valueN
    WHERE [condition];

    可以使用 AND 或 OR 运算符来结合 N 个数量的条件。

    假设COM表中有如下数据:

    ID          NAME        AGE
    ----------  ----------  ----------
    1           JXX         18
    2           CLJ         19
    3           WX          19
    4           HY          21
    5           CCC         19

    下面是一个实例,她会更新ID为1的客户地址:

    sqlite> update COM set AGE = 19 where ID=1;
    sqlite> select * from COM;
    ID          NAME        AGE
    ----------  ----------  ----------
    1           JXX         19
    2           CLJ         19
    3           WX          19
    4           HY          21
    5           CCC         19

    如果想修改COM表中的 AGE 和 NAME 列的所有值,则不需要使用 WHERE子句:

    sqlite> update COM set AGE = 19,NAME="jxx";
    sqlite> select * from COM;
    ID          NAME        AGE
    ----------  ----------  ----------
    1           jxx         19
    2           jxx         19
    3           jxx         19
    4           jxx         19
    5           jxx         19

    SQLite Delete 语句

    SQLite 的DELETE 查询用于删除表中已有的记录。可以使用带有 WHERE 子句的 DELETE 查询来删除选定行,否则所有的记录都将被删除。

    带有 WHERE 子句的 DELETE 查询的基本语法如下:

    DELETE FROM table_name
    WHERE [condition];

    可以使用 AND 或 OR 运算符来结合 N 个数量的条件

    实例;

    假设表中数据如下:

    ID          NAME        AGE
    ----------  ----------  ----------
    1           jxx         19
    2           clj         19
    3           ccc         19
    4           hy          21
    5           wx          19
    6           xy          19

    删除 ID = 5 的数据:

    sqlite> delete from COM where ID =5;
    sqlite> select * from COM;
    ID          NAME        AGE
    ----------  ----------  ----------
    1           jxx         19
    2           clj         19
    3           ccc         19
    4           hy          21
    6           xy          19

    如果不使用 WHERE 子句,表中的数据将会全部删除;

    sqlite> delete from COM;

    SQLite Like 子句

    LIKE 运算符是用来匹配通配符指定模式的文本值。如果搜索表达式与模式表达式匹配,LIKE 运算符将返回真 (True) ,也就是1。这里有两个通配符与 LIKE 运算符一起使用:

    • 百分号:(%)
    • 下划线:(_)

    百分号(%)代表零个、一个或多个数字或字符。

    下划线(_)代表一个单一的数字或字符。

    这些符号可以被组合使用。

    基本语法如下:

    SELECT column_list 
    FROM table_name
    WHERE column LIKE 'XXXX%'
    
    or 
    
    SELECT column_list 
    FROM table_name
    WHERE column LIKE '%XXXX%'
    
    or
    
    SELECT column_list 
    FROM table_name
    WHERE column LIKE 'XXXX_'
    
    or
    
    SELECT column_list 
    FROM table_name
    WHERE column LIKE '_XXXX'
    
    or
    
    SELECT column_list 
    FROM table_name
    WHERE column LIKE '_XXXX_'

    可以使用 AND 或 OR 运算符来结合 N 个数量的条件。(注:XXXX 可以是任何数字或字符串值)

    下面一些实例演示了带有 '%' 和 '_' 运算符的 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 结尾的任意值

    实例,表中的数据如下:

    ID          NAME        AGE
    ----------  ----------  ----------
    1           jxx         19
    2           clj         19
    3           ccc         19
    4           hy          21
    6           xy          19
    7           long        19
    8           OuYang      18
    9           Star-Man    19

    开始查找:

    sqlite> select * from COM where AGE like '2%';
    ID          NAME        AGE
    ----------  ----------  ----------
    4           hy          21
    sqlite> select * from COM where NAME like 'c%';
    ID          NAME        AGE
    ----------  ----------  ----------
    2           clj         19
    3           ccc         19
    sqlite> select * from COM where AGE like '2_';
    ID          NAME        AGE
    ----------  ----------  ----------
    4           hy          21
    sqlite> select * from COM where NAME like '%-%';
    ID          NAME        AGE
    ----------  ----------  ----------
    9           Star-Man    19

    SQLite Glob 子句

    GLOB 运算符是用来匹配通配符指定模式的文本值。如果搜索表达式与模式表达式匹配,GLOB 运算符将返回真(True),也就是1。与 LIKE 运算符不同的是,GLOB 是大小写敏感的,对于下面的通配符,它遵循 UNIX 的语法。

    • 星号(*)
    • 问号(?)

    星号(*)代表零个、一个或多个数字或字符。

    问号(?)代表一个单一的数字或字符。

    这些符号可以组合使用。

    * 和 ? 的基本语法如下:

    SELECT FROM table_name
    WHERE column GLOB 'XXXX*'
    
    or 
    
    SELECT FROM table_name
    WHERE column GLOB '*XXXX*'
    
    or
    
    SELECT FROM table_name
    WHERE column GLOB 'XXXX?'
    
    or
    
    SELECT FROM table_name
    WHERE column GLOB '?XXXX'
    
    or
    
    SELECT FROM table_name
    WHERE column GLOB '?XXXX?'
    
    or
    
    SELECT FROM table_name
    WHERE column GLOB '????'

    可以使用 AND 或 OR 运算符来结合 N 个数量的条件。(注:XXXX 可以是任何数字或字符串值)

    下面是 GLOB 运算符中 '*' 和 '?' 的不同:

    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 结尾的任意值

    SQLite Limit 语句

    SQLite 的 Limit 子句用于限制SELECT 语句返回的数据数量。

    带有 LIMIT 子句的 SELECT 语句的基本语法如下:

    SELECT column1, column2, columnN
    FROM table_name
    LIMIT [no of rows]

    下面是 LIMIT 子句与 OFFSET 子句一起使用时的语法:

    SELECT column1, column2, columnN
    FROM table_name
    LIMIT [no of rows] OFFSET [row num]

    SQLite 引擎将返回从下一行开始直到给定的 OFFSET 为止的所有行。

    实例,假设 COM 表中有如下数据;

    ID          NAME        AGE
    ----------  ----------  ----------
    1           jxx         19
    2           clj         19
    3           ccc         19
    4           hy          21
    6           xy          19
    7           long        19
    8           OuYang      18
    9           Star-Man    19

     LIMIT 限制输出:

    sqlite> select * from COM limit 6;
    ID          NAME        AGE
    ----------  ----------  ----------
    1           jxx         19
    2           clj         19
    3           ccc         19
    4           hy          21
    6           xy          19
    7           long        19

     但是,在某些情况下,可能需要从一个特定的偏移开始提取记录,比如从第三位开始提取3个数据:

    sqlite> select * from COM limit 3 offset 2;
    ID          NAME        AGE
    ----------  ----------  ----------
    3           ccc         19
    4           hy          21
    6           xy          19

     

    SQLite Order By 子句

    ORDER BY 子句是用来基于一个或多个列按升序或降序顺序排列数据。

    ORDER BY 子句 的基本语法:

    SELECT column-list 
    FROM table_name 
    [WHERE condition] 
    [ORDER BY column1, column2, .. columnN] [ASC | DESC];

    可以在 ORDER BY 子句中使用多个列。确保使用的排序列在列清单中。

    下面的命令将按照ID 升序排序:

    sqlite> SELECT * FROM COM ORDER BY ID ASC;

    下面的命令将按照 NAME 降序排序:

    sqlite> SELECT * FROM COM ORDER BY NAME DESC;

     

     


     

    SQLite Group By 子句

    GROUP BY 用于 SELECT 语句一起使用,来对相同的数据进行分组。

    在 SELECT 语句中,GROUP BY 子句放在 WHERE 子句之后,放在 ORDER BY 子句之前。

    GROUP BY 子句的基本语法。GROUP BY 子句 必须放在 WHERE 子句中的条件之后,必须放在 ORDER BY 子句之前:

    SELECT column-list
    FROM table_name
    WHERE [ conditions ]
    GROUP BY column1, column2....columnN
    ORDER BY column1, column2....columnN

    可以在 GROUP BY 子句中使用多列,确保使用的分组列在列清单中。

    假设 COM 表的数据如下:

    ID          NAME        AGE
    ----------  ----------  ----------
    1           jxx         19
    2           clj         19
    3           ccc         19
    4           hy          21
    6           xy          19
    7           long        19
    8           OuYang      18
    9           Star-Man    19
    5           wx          19

    如果你想了解每个人的年龄:

    sqlite> select NAME,AGE from COM group by NAME;
    NAME        AGE
    ----------  ----------
    OuYang      18
    Star-Man    19
    ccc         19
    clj         19
    hy          21
    jxx         19
    long        19
    wx          19
    xy          19

    ORDER BY 子句和 GROUP BY 子句一起使用:

    sqlite> select NAME,AGE from COM group by NAME order by NAME asc;
    NAME        AGE
    ----------  ----------
    OuYang      18
    Star-Man    19
    ccc         19
    clj         19
    hy          21
    jxx         19
    long        19
    wx          19
    xy          19

    SQLite Having 子句

    HAVING 子句允许指定条件来过滤将出现在最终结果中的分组结果。

    WHERE 子句在所选定列上设置条件,而 HAVING 子句则在由 GROUP BY 子句创建的分组上设置条件。。

    HAVING 子句在 SELECT 查询中的位置:

    SELECT
    FROM
    WHERE
    GROUP BY
    HAVING
    ORDER BY

    在一个查询中,HAVING 子句必须放在 GROUP BY 子句之后,必须放在 ORDER BY 子句之前。语法:

    SELECT column1, column2
    FROM table1, table2
    WHERE [ conditions ]
    GROUP BY column1, column2
    HAVING [ conditions ]
    ORDER BY column1, column2

     假设表中数据如下:

    ID          NAME        AGE
    ----------  ----------  ----------
    1           jxx         19
    2           clj         19
    3           ccc         19
    4           hy          21
    6           xy          19
    7           long        19
    8           OuYang      18
    9           Star-Man    19
    5           ccc         19

     显示名称计数小于2的所有记录:

    sqlite> select * from COM group by name having count(name) <2;
    ID          NAME        AGE
    ----------  ----------  ----------
    8           OuYang      18
    9           Star-Man    19
    2           clj         19
    4           hy          21
    1           jxx         19
    7           long        19
    6           xy          19

     名称计数大于等于2的所有记录:

    sqlite> select * from COM group by name having count(name) >= 2;
    ID          NAME        AGE
    ----------  ----------  ----------
    3           ccc         19

     


     

     

     SQLite Distinct 关键字

    SQLite 的 DISTINCT 关键字与 SELECT 语句一起使用,来消除所有的重复的记录。并获取唯一一次记录。

    有可能出现一种情况,在一个表中有多个重复的记录。当提取这样的记录时,DISTINCT 关键字就显得特别有意义,它只获取唯一一次记录,而不是获取重复记录。

    用于消除重复记录的 DISTINCT 关键字的基本语法如下:

    SELECT DISTINCT column1, column2,.....columnN 
    FROM table_name
    WHERE [condition]

     假设COM 数据如下:

    ID          NAME        AGE
    ----------  ----------  ----------
    1           jxx         19
    2           clj         19
    3           ccc         19
    4           hy          21
    6           xy          19
    7           long        19
    8           OuYang      18
    9           Star-Man    19
    5           ccc         19

     SELECT查询将会返回重复NAME 的记录,可以在SELECT 查询中使用 DISTINCT 关键字:

    sqlite> select distinct name from COM;
    NAME
    ----------
    jxx
    clj
    ccc
    hy
    xy
    long
    OuYang
    Star-Man

     

     

     

     

     

     

     

  • 相关阅读:
    MySQL常见问题(包括忘记root密码)
    MySQL运维面试基础题目
    系统根目录可用空间低于20%,清理mysql binary logs日志空间
    服务检测是否正常运行的shell脚本
    CentOS下安装 MySQL5.5
    问题处理--ceph集群告警: pgs inconsistent修复方案
    十、Spring中常用注解-分层整理
    七、SXSSFWorkbook生成大excle,避免内存溢出
    一、FreeMarker实现对js和css压缩
    九、web.xml理解
  • 原文地址:https://www.cnblogs.com/jxxclj/p/9696872.html
Copyright © 2011-2022 走看看