SQLite 语法学习

原文地址

SQLite 语法特点

  1. 不区分大小写;
  2. 每条语句以分号(;)结尾;

SQLite 关键字

命令 描述
create 创建一个新的表,一个表的视图,或者数据库中的其他对象。
alter 修改数据库中的某个已有的数据库对象,比如一个表。
drop 删除整个表,或者表的视图,或者数据库中的其他对象。
insert 创建一条记录。
update 修改记录。
delete 删除记录。
select 从一个或多个表中检索某些记录。

在Mac的终端上输入sqlite3,出现如下提示:

TESTdeMacBook-Pro:Desktop chenxi$ sqlite3 
SQLite version 3.24.0 2018-06-04 14:10:15
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> 

显示帮助, 输入.help,出现帮助命令

  • .help 显示帮助信息

  • .exit 退出应用程序

  • .quit 退出应用程序

  • .headers on | off 是否显示头部信息

  • .mode MODE ?TABLE? 设置输出模式,MODE 可以是下列之一:

    • csv 逗号分隔的值
    • column 左对齐的列
    • html HTML 的 <table>代码
    • insert TABLE 表的 SQL 插入(insert)语句
    • line 每行一个值
    • list 由 .separator 字符串分隔的值
    • tabs 由 Tab 分隔的值
    • tcl TCL 列表元素
  • .databases 列举出所有的数据库

  • .tables 列举出所有的表

以下所有命令都在Mac终端下执行

SQLite 创建数据库

sqlite3 DatabaseName.db

SQLite 创建表

SQLite 的 CREATE TABLE 语句
用于在任何给定的数据库创建一个新表。创建基本表,涉及到命名表、定义列及每一列的数据类型。

create table company (
   id integer primary key   autoincrement,
   name           text      not null,
   age            int       not null,
   address        text      default 'TianTongYuan' ,  
   salary         real
);

它创建了一个 company 表,id , name, age, address, salary 五个字段;

primary key 约束唯一标识数据库表中的每条记录, 主键必须包含唯一的值, 主键列不能包含 NULL 值, 每个表有且只能拥有一个主键。

autoincrement 会在新记录插入表中时生成一个唯一的数字, 默认初始值是1,该数字会自动增长;

not null 约束表示在表中创建纪录时这些字段不能为 null;

default 约束用于向列中插入默认值;

SQLite 插入数据

插入数据方式有两种:

  1. 指定列的名称以及被插入的值;
  2. 只需要提供被插入的值

在终端上分别执行如下命令,插入8条数据;

# 添加数据,省略id字段,默认是1
insert into company (name, age, address, salary) values 
    ('Paul', 32, 'California', 20000.00);

# 添加数据,省略address字段,默认是'TianTongYuan'
insert into company (id, name, age, salary) values
    (2, 'Allen', 25, 15000.00);

insert into company (id, name, age, address, salary) values
    (3, 'Teddy', 23, 'Norway', 20000.00);

insert into company (id, name, age, address, salary) values
    (4, 'Mark', 25, 'Rich-Mond', 65000.00);

insert into company (id, name, age, address, salary) values
    (5, 'David', 27, 'Texas', 85000.00);

insert into company (id, name, age, address, salary) values
    (6, 'Kim', 23, 'South-Hall', 45000.00);

insert into company values (7, 'James', 24, 'Houston', 100000.00);

insert into company (name, age, address, salary) values
    ('Peak', 27, 'China', 24000.00);

SQLite 查询数据

  1. 获取所有可用的字段:

    select * from company;
    
  2. 获取部分字段:

    select id, name, salary from company;
    

使用 where 子句查询记录:

基本语法如下:

select column1,  column2, columnN from table_name where [condition]; 
比较运算符
  • == 检查两个操作数的值是否相等,如果相等则条件为真。

  • = 检查两个操作数的值是否相等,如果相等则条件为真。

  • != 检查两个操作数的值是否相等,如果不相等则条件为真。

  • > 检查左操作数的值是否大于右操作数的值,如果是则条件为真。

  • >= 检查左操作数的值是否大于等于右操作数的值,如果是则条件为真。

  • < 检查左操作数的值是否小于右操作数的值,如果是则条件为真。

  • <= 检查左操作数的值是否小于等于右操作数的值,如果是则条件为真。

  • !< 检查左操作数的值是否不小于右操作数的值,如果是则条件为真。

  • !> 检查左操作数的值是否不大于右操作数的值,如果是则条件为真。
逻辑运算符
  • and 用于结合一个 SQL 语句的 WHERE 子句中的多个条件。

  • or 用于结合一个 SQL 语句的 WHERE 子句中的多个条件。

  • between 用于在给定最小值和最大值范围内的一系列值中搜索值。

  • exists 用于在满足一定条件的指定表中搜索行的存在。

  • in 用于把某个值与一系列指定列表的值进行比较。

  • not in in运算符的对立面。

  • like 用于把某个值与使用通配符运算符的相似值进行比较。

查询 age 大于等于 25 并且 salary 大于等于 65000.00 的所有记录:

select * from company where age >= 25 and salary >= 65000;

查询 age 大于等于 25 或者 salary 大于 65000.00 的所有记录:

select * from company where age >= 25 or salary > 65000;

查询 name 是以 Ki 开头的所有记录:

select * from company where name like 'Ki%';

查询 age 是 25 或者 27 的所有记录:

select * from company where age in ( 25, 27 );

查询所有 age 在 25 到 27 之间的所有记录:

select * from company where age between 25 and 27;

limit 限制符:

用于限制由 select 语句返回的数据数量。

查询所有 age 在 25 到 27 之间的前 2 条记录:

 select * from company where age between 25 and 27 limit 2;

查询所有 age 在 25 到 27 之间的从第 1 条记录之后的前 2 条记录:

select * from company where age between 25 and 27 limit 2 offset 1;

order 限制符:

用来基于一个或多个列按升序或降序顺序排列数据。

基本语法:

select column-list from table_name [where condition] [order by column1, column2, columnN] [asc | desc];

按照 age 字段升序查询所有记录:

select * from company order by age asc;

按照 salary > 20000 并且 age 字段降序查询所有记录:

select * from company where salary > 20000 order by age asc;

常用函数

计算数据库中某一个表的行数:

select count (*) from company;

计算数据库中某一列的最大值:

select max(age) from company;

计算数据库中某一列的最小值:

select min(id) from company;

计算数据库中某一列的平均值:

select avg(salary) from company;

计算数据库中某一列的总和:

select sum(salary) from company;

把数据库中某一列的值转换成大写:

select upper(name) from company;

把数据库中某一列的值转换成小写:

select lower(address) from company;

计算数据库中某一列的值字符串长度:

select address, length(address) from company;

SQLite 修改数据

基本语法:

update table_name set column1 = value1, column2 = value2 ...., columnN = valueN where [condition];

修改 age > 26 并且 salary = 24000 的所有字段, 把其中的 address 的值设置为 BeiJing

update company set address = 'BeiJing' where age > 26 and salary = 24000;

SQLite 删除数据

基本语法:

delete from table where [condition];

删除 id 为 7 的用户:

delete from company where id = 7;

删除整张表:

delete from company;

练习脚本:

#!/bin/bash

DBName="first-blood.db"

create() {
    echo "create table company (
    id integer primary key   autoincrement,
    name           text      not null,
    age            int       not null,
    address        text      default 'TianTongYuan',  
    salary         real
    );" | sqlite3 $DBName
} 

insertValue() {
    echo "insert into company (name, age, address, salary) values 
    ('Paul', 32, 'California', 20000.00);" | sqlite3 $DBName

    echo "insert into company (id, name, age, salary) values
    (2, 'Allen', 25, 15000.00);" | sqlite3 $DBName

    echo "insert into company (id, name, age, address, salary) values
    (3, 'Teddy', 23, 'Norway', 20000.00);" | sqlite3 $DBName

    echo "insert into company (id, name, age, address, salary) values
    (4, 'Mark', 25, 'Rich-Mond', 65000.00);" | sqlite3 $DBName

    echo "insert into company (id, name, age, address, salary) values
    (5, 'David', 27, 'Texas', 85000.00);" | sqlite3 $DBName

    echo "insert into company (id, name, age, address, salary) values
    (6, 'Kim', 23, 'South-Hall', 45000.00);" | sqlite3 $DBName

    echo "insert into company values (7, 'James', 24, 'Houston', 100000.00);" | sqlite3 $DBName

    echo "insert into company (name, age, address, salary) values
    ('Peak', 27, 'China', 24000.00);" | sqlite3 $DBName
}

queryValue() {
    echo "query data ..."
    echo "select * from company;" | sqlite3 $DBName
    echo ""
}

updateValue() {
    echo "update ..."
    echo "update company set address = 'BeiJing' where age > 26 and salary = 24000;" | sqlite3 $DBName
}

deleteValue() {
    echo "delete ..."
    echo "delete from company where id = 7;" | sqlite3 $DBName
}

create

insertValue 

queryValue

updateValue

queryValue

deleteValue

queryValue


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,723评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,080评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,604评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,440评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,431评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,499评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,893评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,541评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,751评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,547评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,619评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,320评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,890评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,896评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,137评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,796评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,335评论 2 342

推荐阅读更多精彩内容