日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

sqlite3命令語句, 文檔小記

 zkc_younger 2017-03-16

前言:重新復(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)連接、外連接等概念不了解的童鞋可以請教度娘。


完了。祝成長?。?!


    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多