SQLite 語法學習

原文地址

SQLite 語法特點

  1. 不區(qū)分大小寫;
  2. 每條語句以分號(;)結尾典徊;

SQLite 關鍵字

命令 描述
create 創(chuàng)建一個新的表,一個表的視圖,或者數據庫中的其他對象咐汞。
alter 修改數據庫中的某個已有的數據庫對象,比如一個表儒鹿。
drop 刪除整個表化撕,或者表的視圖,或者數據庫中的其他對象约炎。
insert 創(chuàng)建一條記錄植阴。
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終端下執(zhí)行

SQLite 創(chuàng)建數據庫

sqlite3 DatabaseName.db

SQLite 創(chuàng)建表

SQLite 的 CREATE TABLE 語句
用于在任何給定的數據庫創(chuàng)建一個新表。創(chuàng)建基本表灸拍,涉及到命名表做祝、定義列及每一列的數據類型。

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

它創(chuàng)建了一個 company 表鸡岗,id , name, age, address, salary 五個字段混槐;

primary key 約束唯一標識數據庫表中的每條記錄, 主鍵必須包含唯一的值, 主鍵列不能包含 NULL 值, 每個表有且只能擁有一個主鍵。

autoincrement 會在新記錄插入表中時生成一個唯一的數字, 默認初始值是1轩性,該數字會自動增長纵隔;

not null 約束表示在表中創(chuàng)建紀錄時這些字段不能為 null;

default 約束用于向列中插入默認值;

SQLite 插入數據

插入數據方式有兩種:

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

在終端上分別執(zhí)行如下命令捌刮,插入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閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件晌纫,死亡現場離奇詭異,居然都是意外死亡永丝,警方通過查閱死者的電腦和手機锹漱,發(fā)現死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來慕嚷,“玉大人哥牍,你說我怎么就攤上這事毕泌。” “怎么了嗅辣?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵撼泛,是天一觀的道長。 經常有香客問我澡谭,道長愿题,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任译暂,我火速辦了婚禮抠忘,結果婚禮上,老公的妹妹穿的比我還像新娘外永。我一直安慰自己崎脉,他們只是感情好,可當我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布伯顶。 她就那樣靜靜地躺著囚灼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪祭衩。 梳的紋絲不亂的頭發(fā)上灶体,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天,我揣著相機與錄音掐暮,去河邊找鬼蝎抽。 笑死,一個胖子當著我的面吹牛路克,可吹牛的內容都是我干的樟结。 我是一名探鬼主播,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼精算,長吁一口氣:“原來是場噩夢啊……” “哼瓢宦!你這毒婦竟也來了?” 一聲冷哼從身側響起灰羽,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤驮履,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后廉嚼,有當地人在樹林里發(fā)現了一具尸體玫镐,經...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年怠噪,在試婚紗的時候發(fā)現自己被綠了恐似。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡舰绘,死狀恐怖蹂喻,靈堂內的尸體忽然破棺而出葱椭,到底是詐尸還是另有隱情,我是刑警寧澤口四,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布孵运,位于F島的核電站,受9級特大地震影響蔓彩,放射性物質發(fā)生泄漏治笨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一赤嚼、第九天 我趴在偏房一處隱蔽的房頂上張望旷赖。 院中可真熱鬧,春花似錦更卒、人聲如沸等孵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽俯萌。三九已至,卻和暖如春上枕,著一層夾襖步出監(jiān)牢的瞬間咐熙,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工辨萍, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留棋恼,地道東北人。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓锈玉,卻偏偏與公主長得像爪飘,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子嘲玫,可洞房花燭夜當晚...
    茶點故事閱讀 44,619評論 2 354

推薦閱讀更多精彩內容