前言:重新復(fù)習(xí)一下sqlite3語句,記下來,權(quán)當(dāng)筆記。
歡迎關(guān)注我左側(cè)頭像下的新浪微博,實(shí)時更新最新文章信息,增進(jìn)交流,共同成長。
原文出處:http://blog.csdn.net/u014158743/article/details/51428329
一、文檔小記
SQL: 結(jié)構(gòu)化查詢語言
Struted Query Language
sqlite: sql:數(shù)據(jù)庫語言
lite:精簡版
創(chuàng)建數(shù)據(jù)庫: .open 路徑\數(shù)據(jù)庫名.db
數(shù)據(jù)庫不存在會創(chuàng)建該數(shù)據(jù)庫
數(shù)據(jù)庫存在會打開該數(shù)據(jù)庫
.database 查看當(dāng)前正被使用的數(shù)據(jù)庫(也就是使用.open打開的數(shù)據(jù)庫)
數(shù)據(jù)庫是以表的形式來存儲數(shù)據(jù)的:創(chuàng)建表的 sql語句----在當(dāng)前被打開的數(shù)據(jù)庫中創(chuàng)建
create table 表名(
字段1 數(shù)據(jù)類型 [約束]
字段2 數(shù)據(jù)類型 [約束]
字段3 數(shù)據(jù)類型 [約束]
.........
)
數(shù)據(jù)類型:integer,real,text,blob
兼容其它類型:smallint,int,longint,numeric,char(5),varchar(5)
.table 查看當(dāng)前數(shù)據(jù)庫中的表
.schema 表名 查看創(chuàng)建表的sql語句
向表中插入數(shù)據(jù):一次插入一條記錄
向表中所有字段插入值:
insert into 表名 values(值1,值2,值3 ...)--- 值要和字段的類型,個數(shù),順序保持一致
向表中部分字段插入值:
insert into 表名(字段名1,字段名2,...) values(值1,值2,值3 ...)
表中的每條記錄對應(yīng)一個實(shí)體,因為每個實(shí)體是獨(dú)一無二的,所以每條記錄也必須是獨(dú)一無二的
保證表中記錄唯一的方式:unique(唯一約束),primary key(主鍵),autoincrement(自動增長)
被設(shè)置為主鍵的字段上的值是不允許重復(fù)的,通常一張表都要有一個主鍵,如果一張表沒有適合
作為主鍵的,那么就在表中增加一個字段,專門作為主鍵
默認(rèn)值約束: default '值'
檢查約束: check(條件)
非空約束: not null
刪除表中記錄的語句:
delete from 表名 [where 條件]
修改表中記錄的語句: update 表名 set 字段名=修改之后的值,字段名=修改之后的值... [where 條件]
查詢:基于表中已經(jīng)存在的數(shù)據(jù)得到我們想要的數(shù)據(jù)
select * from 表名 [where 條件]; *號代表所有字段
> >= < <= = <> != not and or between ...and in(值,值....)
is null is not null
聚合函數(shù): max() min() sum() avg() count()
排序:select 字段名 from 表名 [where 條件] order by 字段 默認(rèn)是升序 asc 降序是desc
limit 3;
分組: group by 字段
分組之后再篩選記錄必須用having
子查詢:在一個查詢中有用到了別的查詢
外鍵:如果一張表的某個字段引用了另一張表中的某個字段上的值,那么這個字段就應(yīng)該
設(shè)置為外鍵
foreign key(字段) references 被引用的表(字段)
啟用外鍵: pragma foreign_keys= on
多表連接查詢: 內(nèi)連接 join
左外連接 left join
右外連接 right join (不支持)
二、命令行實(shí)戰(zhàn)
sqlite> .open student.db
sqlite> .database
seq name file
--- --------------- ----------------------------------------------------------
0 main E:\student.db
// 先來一個沒設(shè)主鍵的錯誤示范
sqlite> create table stuinfo(
...> id integer,
...> name text,
...> sex char(1),
...> birthday datetime);
sqlite> insert into stuinfo values(1,'孫迪','男','1990-8-15');
sqlite> select * from stuinfo;
1|孫迪|男|1990-8-15
sqlite> insert into stuinfo values(1,'孫迪','男','1990-8-15');
sqlite> select * from stuinfo;
1|孫迪|男|1990-8-15
1|孫迪|男|1990-8-15
sqlite> drop table stuinfo;
// 刪掉原來有錯誤的表, 重新創(chuàng)建新表
sqlite> create table stuinfo(
...> id integer primary key, // 這次加上了主鍵約束
...> name text,
...> sex char(1),
...> address text);
sqlite> insert into stuinfo values(1,'李四','男','上海');// 向表中插入數(shù)據(jù)的基本格式
sqlite> insert into stuinfo values(1,'李四','男','上海');
Error: UNIQUE constraint failed: stuinfo.id
sqlite> select * from stuinfo;
1|李四|男|上海
sqlite> insert into stuinfo values(3,'劉能','男',26,'鐵嶺');
// 也可以指定插入值的字段, 不過要注意主鍵、非空等關(guān)鍵字的約束
sqlite> insert into stuinfo(id,name,age,address) values(4,'趙四',28,'鐵嶺');
sqlite> select * from stuinfo;
1|李四|男|23|北京
2|王四|男|23|
3|劉能|男|26|鐵嶺
4|趙四|男|28|鐵嶺
sqlite> delete from stuinfo where id=2;// 刪除表中記錄的基本格式
sqlite> select * from stuinfo;
1|李四|男|23|北京
3|劉能|男|26|鐵嶺
4|趙四|男|28|鐵嶺
sqlite> update stuinfo set address='上海' where id=3;// 修改表中記錄的基本格式
sqlite> select * from stuinfo;
1|李四|男|23|北京
3|劉能|男|26|上海
4|趙四|男|28|鐵嶺
sqlite> update stuinfo set sex='女',address='北京' where id=4;// 可以一次性對多個字段上的值進(jìn)行修改
sqlite> select * from stuinfo;
1|李四|男|23|北京
3|劉能|男|26|上海
4|趙四|女|28|北京
sqlite> select * from stuinfo;
1|李四|男|23|北京
3|劉能|男|26|上海
4|趙四|女|28|北京
sqlite> select * from stuinfo where sex='男';// 附帶查詢條件的查詢語句
1|李四|男|23|北京
3|劉能|男|26|上海
// 讓我們進(jìn)一步, 重新創(chuàng)建表, 示范一系列帶查詢條件的查詢語句
sqlite> create table stuinfo(
...> id integer primary key,
...> name text,
...> sex char(1),
...> score int);
sqlite> insert into stuinfo values(1,'張三','女',78);
sqlite> insert into stuinfo values(2,'王三','男',68);
sqlite> insert into stuinfo values(3,'王麗','女',98);
sqlite> insert into stuinfo values(4,'王剛','男',58);
sqlite> insert into stuinfo values(5,'趙剛','男',88);
sqlite> insert into stuinfo values(6,'趙英','女',86);
sqlite> select * from stuinfo where score>80;
3|王麗|女|98
5|趙剛|男|88
6|趙英|女|86
sqlite> select * from stuinfo where score>=80;
3|王麗|女|98
5|趙剛|男|88
6|趙英|女|86
sqlite> select * from stuinfo where score<>80;
1|張三|女|78
2|王三|男|68
3|王麗|女|98
4|王剛|男|58
5|趙剛|男|88
6|趙英|女|86
sqlite> select * from stuinfo where score!=80;
1|張三|女|78
2|王三|男|68
3|王麗|女|98
4|王剛|男|58
5|趙剛|男|88
6|趙英|女|86
sqlite> select * from stuinfo where score=80;
sqlite> select * from stuinfo where sex='男';
2|王三|男|68
4|王剛|男|58
5|趙剛|男|88
sqlite> select * from stuinfo where not sex='男'; // 注意not的位置
1|張三|女|78
3|王麗|女|98
6|趙英|女|86
sqlite> select * from stuinfo where sex='男' and score>80;
// 查詢條件多個的情況
5|趙剛|男|88
sqlite> select * from stuinfo where sex='男' or score>80;
2|王三|男|68
3|王麗|女|98
4|王剛|男|58
5|趙剛|男|88
6|趙英|女|86
sqlite> select * from stuinfo where score>=70 and score<=90;
1|張三|女|78
5|趙剛|男|88
6|趙英|女|86
sqlite> select * from stuinfo where score between 70 and 90;
1|張三|女|78
5|趙剛|男|88
6|趙英|女|86
sqlite> select * from stuinfo where score=78 or score=88;
1|張三|女|78
5|趙剛|男|88
sqlite> select * from stuinfo where score in(78,88);
1|張三|女|78
5|趙剛|男|88
sqlite> insert into stuinfo values(7,'趙霞','女',null);
sqlite> insert into stuinfo values(8,'孫迪','男',null);
sqlite> select * from stuinfo where score is null;
7|趙霞|女|
8|孫迪|男|
sqlite> select * from stuinfo where score is not null;
1|張三|女|78
2|王三|男|68
3|王麗|女|98
4|王剛|男|58
5|趙剛|男|88
6|趙英|女|86
sqlite> selcet name,max(score) from stuinfo; // 聚合函數(shù): max() min() sum() avg() count()的用法示范
Error: near "selcec": syntax error
sqlite> select name,max(score) from stuinfo;
王麗|98
sqlite> select name,min(score) from stuinfo;
王剛|58
sqlite> select sum(score) from stuinfo;
476
sqlite> select avg(score) from stuinfo;
79.3333333333333
sqlite> select count(*) from stuinfo;
8
sqlite> select count(*) from stuinfo where sex='男';
4
sqlite> select count(*) from stuinfo where sex='女';
4
sqlite> select avg(score) from stuinfo where sex='女';
87.3333333333333
sqlite> select avg(score) from stuinfo where sex='男';
71.3333333333333
sqlite> select * from stuinfo order by score;// 開始對查詢出來的結(jié)果進(jìn)行簡單的排序, 可見默認(rèn)為升序
7|趙霞|女|
8|孫迪|男|
4|王剛|男|58
2|王三|男|68
1|張三|女|78
6|趙英|女|86
5|趙剛|男|88
3|王麗|女|98
sqlite> select * from stuinfo order by score desc;
3|王麗|女|98
5|趙剛|男|88
6|趙英|女|86
1|張三|女|78
2|王三|男|68
4|王剛|男|58
7|趙霞|女|
8|孫迪|男|
sqlite> select * from stuinfo group by sex;// group by 字段, 分組進(jìn)行查詢, 用select *只顯示第一條滿足分組條件的第一條數(shù)據(jù)
8|孫迪|男|
7|趙霞|女|
sqlite> select count(*) from stuinfo group by sex;
4
4
sqlite> select sex,count(*) from stuinfo group by sex;
男|4
女|4
sqlite> select avg(score) from stuinfo group by sex;
71.3333333333333
87.3333333333333
sqlite> select sex,avg(score) from stuinfo group by sex;
男|71.3333333333333
女|87.3333333333333
sqlite> select sex,avg(score) from stuinfo group by sex having avg(score)>80;// 分組之后再篩選記錄必須用having
女|87.3333333333333
sqlite> select * from stuinfo where score>(select avg(score) from stuinfo);// 子查詢, 在滿足子查詢條件的記錄中進(jìn)行查詢
3|王麗|女|98
5|趙剛|男|88
6|趙英|女|86
sqlite> select * from stuinfo order by score desc limit 3;// 限制查詢結(jié)果記錄條數(shù)
3|王麗|女|98
5|趙剛|男|88
6|趙英|女|86
// 快完了, 堅持住, 讓我們更進(jìn)一步, 最后進(jìn)入多表操作
sqlite> drop table stuinfo;
sqlite> create table stuinfo(
...> id integer primary key,
...> name text,
...> sex char(1),
...> address text);
sqlite> create table stuscore(
...> id integer primary key,
...> stunum integer,
...> kemu text,
...> score int,
...> foreign key(stunum) references stuinfo(id));
sqlite> insert into stuinfo values(1,'李四','男','上海');
sqlite> insert into stuinfo values(2,'王四','男','上海');
sqlite> insert into stuinfo values(3,'趙四','男','上海');
sqlite> insert into stuscore values(1,4,'Java',65);
sqlite> select * from stuscore;
1|4|java|65
sqlite> pragma foreign_keys= on;// 記得開啟外鍵約束
sqlite> insert into stuscore values(2,5,'java',65);// stunum=5不是任何一個學(xué)院信息表中id的值, 即不是外鍵
Error: FOREIGN KEY constraint failed
sqlite> insert into stuscore values(3,1,'java',75);
sqlite> insert into stuscore values(4,2,'java',85);
sqlite> insert into stuscore values(5,3,'java',55);
sqlite> select * from stuscore;
1|4|java|65
3|1|java|75
4|2|java|85
5|3|java|55
sqlite> delete from stuscore where id = 1;
sqlite> select * from stuscore;
3|1|java|75
4|2|java|85
5|3|java|55
//接下來引入多表連接查詢
sqlite> select * from stuinfo;
1|李四|男|上海
2|王四|男|上海
3|趙四|男|上海
sqlite> select * from stuscore;
3|1|java|75
4|2|java|85
5|3|java|55
sqlite> select name,address,score from stuinfo join stuscore on stuinfo.id=stuscore.stunum;// 內(nèi)連接
李四|上海|75
王四|上海|85
趙四|上海|55
sqlite> select name,address,score from stuinfo left join stuscore on stuinfo.id=stuscore.stunum;// 左外連接
李四|上海|75
王四|上海|85
趙四|上海|55
// 來認(rèn)真體會區(qū)別
sqlite> delete from stuscore where id = 5;
sqlite> select * from stuscore;
3|1|java|75
4|2|java|85
sqlite> select name,address,score from stuinfo join stuscore on stuinfo.id=stuscore.stunum;
李四|上海|75
王四|上海|85
sqlite> select name,address,score from stuinfo left join stuscore on stuinfo.id=stuscore.stunum;
李四|上海|75
王四|上海|85
趙四|上海|
// 內(nèi)連接取交集,外連接分左和右, 左連接左邊的全取, 右連接右邊的全取(sqlite不支持右連接)
sqlite> select name,address,score from stuinfo right join stuscore on stuinfo.id=stuscore.stunum;
Error: RIGHT and FULL OUTER JOINs are not currently supported
sqlite3的命令復(fù)習(xí)到這里,
如果你能從頭看下來相信會有收獲,文檔總結(jié)在文章的開頭, 現(xiàn)在回頭回憶一下加深記憶。當(dāng)然這只是入門級的更多的更完善的命令大全什么的, 還有對內(nèi)連接、外連接等概念不了解的童鞋可以請教度娘。
完了。祝成長?。?!
|