Sqlite3 基本使用

2018-07-02  本文已影响0人  改名_f64e

Sqlite 命令

格式化输出内容
.header on
.timer on
.mode column
显示配置信息
.show
打开指定数据库
.open <数据库名称>
打开数据库/创建数据库
.database <数据库名称>(存在打开,不存在创建)
导出数据库变成sql文本
sqlite3 <test.db> .dump > <test.sql>
从sql文本回复到数据库
sqlite3 <test.db> < <test.sql>
设置显示列的宽度
.width 20 20 20 20 20 20 20 ...
显示创建表的sql语句,查看表中列,数据类型等
.schema <表名>(不要加 ; )
退出Sqlite
.quit
Sqlite 存储类型
NULL        NULL值(不是空值)
INTEGER     带符号的整数
REAL        浮点值(8字节)
TEXT        文本字符串(UTF-8,UTF-16BE,UTF-16LE)
BLOB        BLOB数据类型
(Sqlite 没有单独的Boolean类型,在数据库中存储为整数0(false),1(true))
(Sqlite 没有单独的Date类,存储时会变成TEXT,INTEGER,REAL类型)
创建表
语法:   create table <tableName> (ID <TYPE> primary key autoincrement <condition>,
           name <type> <condition> ...);

例子:   create table test (id integer primary key autoincrement not null,name text);
autoincrement:只能用于primary key
删除表
DROP TABLE table_name;

例子:   drop table test1;
插入数据
语法:   insert into <tableName> (cloumnName1, cloumnName2, cloumnName3,...columnN)
           values(value1, value2, value3,...valueN);
        
        (insert into <TABLE_NAME> (colume_1_value,colume_2_value,....>))
        (这种方法必须每一列都要传值)
        
例子:   insert into test (name) values ('胖虎');
数据库中数据
sqlite> select * from test;
    id          name        age         price
    ----------  ----------  ----------  ----------
    1           qqq         10          100.0
    2           www         11          101.0
    3           eee         12          102.0
    4           rrr         13          103.0
    5           ttt         14          104.0
    6           yyy         15          1055.0
    7           uuu         15          106.0
    8           iii         16          1077.0
    9           iippp       16          1088.0
    10          yyuuuu      17          10999.0
    Run Time: real 0.021 user 0.010000 sys 0.000000
查询数据
语法:   select <columnName1>,<columnName2>,... from <table_name>;

例子:   select * from test;(显示test表中所有的列,显示所有的数据)
        select id from test;(显示test表中id那一列,显示所有数据)
运算符
算数运算符
    +(加), -(减), *(乘), /(除), %(取余)
    .mode line (设置模式)
    例子:   select 10 + 20 = 30
            ...
比较运算符
    a==b(两个值相等,true)
    a!=b(两个值不等,ture)
    <>a(大于并且小于,true)
    a>b(大于,true)
    a<b(小于,true)>
    a>=b(大于等于,true)
    a<=b(小于等于,true)
    a!>b(不大于,true)
    a!<b(不小于,true)>
    
    语法:   select <columnName>,... from <tableName> where <columnName> <运算符> value;
    例子:   select * from test where sex = 100;
            select * from test where sex !=100;
逻辑运算符
    and         :在where中可以连接多个条件
    sqlite> select * from test where age > 13 and price >= 105;
            id          name        age         price
            ----------  ----------  ----------  ----------
            6           yyy         15          1055.0
            7           uuu         15          106.0
            8           iii         16          1077.0
            9           iippp       16          1088.0
            10          yyuuuu      17          10999.0
            Run Time: real 0.002 user 0.000000 sys 0.000000
    
    between     :在两个值之间进行搜索
    sqlite> select * from test where age between 12 and 17;
            id          name        age         price
            ----------  ----------  ----------  ----------
            3           eee         12          102.0
            4           rrr         13          103.0
            5           ttt         14          104.0
            6           yyy         15          1055.0
            7           uuu         15          106.0
            8           iii         16          1077.0
            9           iippp       16          1088.0
            10          yyuuuu      17          10999.0
            Run Time: real 0.003 user 0.000000 sys 0.010000
            
    exists      :
    
    in          :返回值等于匹配值的数据
    sqlite> select * from test where age in (12,15);
            id          name        age         price
            ----------  ----------  ----------  ----------
            3           eee         12          102.0
            6           yyy         15          1055.0
            7           uuu         15          106.0
            Run Time: real 0.002 user 0.000000 sys 0.000000
            
    not in      :和in相反
    sqlite> select * from test where age not in (12,15);
            id          name        age         price
            ----------  ----------  ----------  ----------
            1           qqq         10          100.0
            2           www         11          101.0
            4           rrr         13          103.0
            5           ttt         14          104.0
            8           iii         16          1077.0
            9           iippp       16          1088.0
            10          yyuuuu      17          10999.0
            Run Time: real 0.002 user 0.000000 sys 0.000000
            
    like        :相似匹配,后面字符不检查用 % ,大小写不敏感
    sqlite> select * from test where name glob 'y*';
            id          name        age         price
            ----------  ----------  ----------  ----------
            6           yyy         15          1055.0
            10          yyuuuu      17          10999.0
            Run Time: real 0.002 user 0.000000 sys 0.000000
    
    sqlite> select * from test where name like 'Y%';
            id          name        age         price
            ----------  ----------  ----------  ----------
            6           yyy         15          1055.0
            10          yyuuuu      17          10999.0
            Run Time: real 0.002 user 0.000000 sys 0.000000
    
    glob        :相似匹配,后面字符不检查用 % ,大小写不敏感
    sqlite> select * from test where name glob 'y*';
            id          name        age         price
            ----------  ----------  ----------  ----------
            6           yyy         15          1055.0
            10          yyuuuu      17          10999.0
            Run Time: real 0.002 user 0.000000 sys 0.000000
            
    sqlite> select * from test where name glob 'Y*';
            Run Time: real 0.003 user 0.000000 sys 0.000000
    not         :否定,一般和not in / not between 等合用
    
    or          :或
    sqlite> select * from test where age > 13 or price < 200;
    
    is null     :用于把某个值和NULL进行比对
    sqlite> select * from test where name is null;
            Run Time: real 0.001 user 0.000000 sys 0.000000
            
    is          :类似于 =
    
    is not      :类似于 !=
更新 update
语法:   update <tableName> set columnName1 = value,columnName2 = value ,...where ...;

例子:   sqlite> update test set name = 'vvvvv' where id =1;
        sqlite> update test set name = 'vvvvv' ;(不指定条件,那么所有的数据都会修改)
删除 delete
语法:   delete from <tableName> where ...;

例子:   sqlite> delete from test where id = 1;
like
语法:   % 和 _
        %:表示匹配0个,1个,或者多个数据或字符
        _:表示匹配1个字符,用来占位(比如说长度为3的字符串,___)
        
例子:   '1%':   表示以1开头的数字或字符串
        '%2':   表示以2结尾的数字或字符串
        '2_3':  以2开头3结尾长度为3的数据或字符串
glob
语法:   * 和 ?
        *:表示匹配0个,1个,或者多个数据或字符(大小写敏感)
        ?:表示匹配1个字符,用来占位(比如说长度为3的字符串,???)(大小写敏感)

例子:   和like一样
limit
语法:   select <columnName1>,<columnName2>... from <tableName> where <condition> limit <number> offset <number>;
        解释:默认的offset = 0, limit : 从offset之后的多少行
        
例子:   sqlite> select * from test where price > 105 limit 5;
order by
语法:   select <columnName1> ,... from <tableName> where <condition> order by <columnName> <ASC||DESC> limit 4;
        默认是  ASC:升序,DESC:降序
例子:   sqlite> select * from test where price < 103 order by price desc limit 5 ;
group by
语法:   select <columnName> , ... from <tableName> where <condition> 
                group by <columnName> order by <columnName> <ASC||DESC> limit 4;
        解释:group by : 根据列名进行分组,列名的值相同的会合并,和sum(),max等方法合用
having
语法:   select <columnName> , ... from <tableName> where <condition> 
                group by <columnName> having <condition> order by <columnName> <ASC||DESC> limit 4;
        解释:对 group by 的结果再次进行条件匹配

例子:   select * from test where price > 102 group by name having count(name) < 2 
               order by name limit 4;
distinct
语法:   select distinct ....
        解释:过滤相同的数据
上一篇下一篇

猜你喜欢

热点阅读