iOS-sqlite數(shù)據(jù)庫常用SQL語句

1.數(shù)據(jù)類型

NULL                   空
INTEGER                整形
REAL                   浮點(diǎn)
TEXT                   文本
BLOB                  二進(jìn)制數(shù)據(jù)

沒有對(duì)應(yīng)的Boolean和Date類型嫂侍,需要轉(zhuǎn)成其他類型

2.運(yùn)算符

2.1算術(shù)運(yùn)算符
+        加    
-        減
*        乘
/        取除
%        取余
2.2比較運(yùn)算符
=          等于    
!=        不等于
<>       不等于
>          大于
<          小于
>=        大于等于
<=         小于等于
2.3邏輯運(yùn)算符
and        并 用于where子句多個(gè)條件同時(shí)存在 
or         或
between    在某個(gè)范圍內(nèi) 银伟,和and 搭配
exists     表中搜索行的存在穴亏。
in         把某個(gè)值與一系列指定列表的值進(jìn)行比較
not in     in的對(duì)立面
like       用來匹配文本和數(shù)字 %:0、1或多個(gè)字符  _單一字符或數(shù)字
glob       用來匹配文本和數(shù)字區(qū)分大小寫  *:0缝彬、1或多個(gè)字符  ?單一字符或數(shù)字
is         與=相似
is null    與null比較
||         連接兩個(gè)不同的字符串,得到一個(gè)新的字符串丑掺。
unique     運(yùn)算符搜索指定表中的每一行,確保唯一性(無重復(fù))述雾。

3.創(chuàng)建表

create table 表名(列名1 type,.....)

3.1.創(chuàng)建表并添加主鍵

create table 表名(列名1 type not null primary key ,列名2 type,.....)

3.2.創(chuàng)建表并自動(dòng)添加主鍵

create table 表名(列名1 INTRGER primary key autoincrement ,列名2 type,.....)
autoincrement 自動(dòng)遞增

3.3.表不存在時(shí)才創(chuàng)建

create table if not exists 表名(列名1 INTRGER primary key autoincrement ,列名2 type,.....)

4.刪除表

drop table 表名

5.插入

insert into 表名 values(值1,值2,值3.....)

注意:values后面應(yīng)該將所有列的值附上街州,否則插入會(huì)失敗

插入一條數(shù)據(jù)給部分列賦值,其余為空玻孟。not null修飾的列必須賦值
insert into 表名(列1,列2....) values(值1,值2.....)

6.查找

6.1查詢表所有列的數(shù)據(jù)

select * from 表名

6.2.查詢表某列的數(shù)據(jù)

select 列1,列2 from 表名

6.3.查詢某列不重復(fù)的值

distinct 與select一起使用唆缴,消除所有重復(fù)記錄

select distinct 列名 from 表名稱

6.4.帶條件查詢

select 列名 from 表名 where 列 = xx

  • like用法
    用來匹配文本和數(shù)字 %:0、1或多個(gè)字符 _單一字符或數(shù)字
    如:查詢sh開頭的結(jié)果
    select * from 表名 where 列名 like 'sh%'
    如:查詢第二位為s的結(jié)果
    select * from 表名 where 列名 like '_s%'
  • glob用法
    與like類似取募,區(qū)分大小寫
    *:0琐谤、1或多個(gè)字符 ?:單一字符或數(shù)字
    如:查詢第二位為S的結(jié)果
    select *from 表名 where 列名 glob '?S*'
  • limit用法
    限制返回?cái)?shù)據(jù)條數(shù),與offset 配合可以從特定的偏移開始返回?cái)?shù)據(jù)
    select *from 表名 limit 數(shù)據(jù)條數(shù) offset 偏移
  • order by 用法
    asc 升序(可選) desc 降序
    升序
    select * from 表名 order by 列名
    降序
    select * from 表名 order by 列名 desc
  • group by 用法
    SQLite 的 group by 子句用于與 select 語句一起使用玩敏,來對(duì)相同的數(shù)據(jù)進(jìn)行分組斗忌。
    在 select 語句中,group by 子句放在 where 子句之后旺聚,放在 order by 子句之前织阳。
    如:select 列 函數(shù)... group by 列 order by 列 desc
  • having 用法
    having 子句允許指定條件來過濾將出現(xiàn)在最終結(jié)果中的分組結(jié)果。與group by 混合使用砰粹。
    select * group by 列 having xxxxx
    如:select * group by name having count(name)<2
  • 函數(shù)用法
    count(列) 數(shù)據(jù)庫列的行數(shù)
    max(列) 某列最大值
    min(列) 某列最大值
    avg(列) 平均值
    sum(列) 某列總和
    abs() 取絕對(duì)值
    upper() 轉(zhuǎn)成大寫
    lower() 轉(zhuǎn)小寫
    length() 返回字符串長度
    如:獲取表的行數(shù)
    select count(*) from 表名

7.修改

update 表 set 列 = xx ... where 條件

  • 條件見查詢

8.刪除

8.1.按條件刪除表中的數(shù)據(jù)

delete form 表 where 條件

  • 條件見查詢

8.2.刪除表中所有數(shù)據(jù)唧躲,保留列信息

truncate table 表
但這種方法無法將遞增數(shù)歸零。如果要將遞增數(shù)歸零,可以使用以下方法:
delete from sqlite_sequence where name = '表名'

8.3.刪除表包括列信息

drop table 表

8.4.刪除數(shù)據(jù)庫

drop database 數(shù)據(jù)庫名

9其他

9.1約束

not null 非空
default 設(shè)置默認(rèn)值
unique 防止記錄兩個(gè)相同的值
primary key 主鍵弄痹,約束唯一標(biāo)識(shí)數(shù)據(jù)庫表中的每個(gè)記錄饭入。在一個(gè)表中可以有多個(gè) UNIQUE 列,但只能有一個(gè)主鍵
check 檢查值
如:
create table 表 (ID integer primary key not null , age integer check(age>=0),idcode integer unique not null)

9.2.Join

SQL 定義了三種主要類型的連接:

  • 交叉連接 - CROSS JOIN
  • 內(nèi)連接 - INNER JOIN
  • 外連接 - OUTER JOIN
    1)交叉連接:把第一個(gè)表的每一行與第二個(gè)表的每一行進(jìn)行匹配肛真。如果兩個(gè)輸入表分別有 x 和 y 行谐丢,則結(jié)果表有 x*y 行
    select ... from 表1 cross join 表2
    2)內(nèi)連接:內(nèi)連接根據(jù)連接謂詞結(jié)合兩個(gè)表(table1 和 table2)的列值來創(chuàng)建一個(gè)新的結(jié)果表。查詢會(huì)把 table1 中的每一行與 table2 中的每一行進(jìn)行比較蚓让,找到所有滿足連接謂詞的行的匹配對(duì)乾忱。當(dāng)滿足連接謂詞時(shí),A 和 B 行的每個(gè)匹配對(duì)的列值會(huì)合并成一個(gè)結(jié)果行历极。INNER 關(guān)鍵字是可選的窄瘟。
    select ... from table1 join table2 on 條件
    3)外連接
    外連接是內(nèi)連接的擴(kuò)展。SQLite 只支持 左外連接(LEFT OUTER JOIN)趟卸,左外連接在內(nèi)連接的基礎(chǔ)上會(huì)將table1中任何未連接的行合并進(jìn)來蹄葱,外連接的列使用 NULL 值,將它們附加到結(jié)果表中衰腌。
    select ... from table1 left outer join on 條件

9.3alter

在 SQLite 中新蟆,除了重命名表和在已有的表中添加列,ALTER TABLE 命令不支持其他操作右蕊。
1)表重命名
alter table 表名 rename to 表名
2)新增列
alter table 表名 add column 列名 類型 描述

9.4unions

1)SQLite的 unions 子句/運(yùn)算符用于合并兩個(gè)或多個(gè) selete 語句的結(jié)果琼稻,不返回任何重復(fù)的行。為了使用 unions饶囚,每個(gè) selete 被選擇的列數(shù)必須是相同的帕翻,相同數(shù)目的列表達(dá)式,相同的數(shù)據(jù)類型萝风,并確保它們有相同的順序嘀掸,但它們不必具有相同的長度。
select 列 from 表 union select 列 from 表
2)union all 運(yùn)算符用于結(jié)合兩個(gè) selete 語句的結(jié)果规惰,包括重復(fù)行睬塌。
select 列 from 表 union all select 列 from 表

9.5子查詢

字查詢的結(jié)果可以作為另一個(gè)語句的輸入
以下是子查詢必須遵循的幾個(gè)規(guī)則:
1)子查詢必須用括號(hào)括起來。
2)子查詢?cè)?SELECT 子句中只能有一個(gè)列歇万,除非在主查詢中有多列揩晴,與子查詢的所選列進(jìn)行比較。
3)ORDER BY 不能用在子查詢中贪磺,雖然主查詢可以使用 ORDER BY硫兰。可以在子查詢中使用 GROUP BY寒锚,功能與 ORDER BY 相同劫映。
4)子查詢返回多于一行违孝,只能與多值運(yùn)算符一起使用,如 IN 運(yùn)算符泳赋。
BETWEEN 運(yùn)算符不能與子查詢一起使用雌桑,但是,BETWEEN 可在子查詢內(nèi)使用摹蘑。
如:
select 列 from 表 where id in (select id from 表 條件)

9.6索引

索引有助于加快 SELECT 查詢和 WHERE 子句筹燕,但它會(huì)減慢使用 UPDATE 和 INSERT 語句時(shí)的數(shù)據(jù)輸入轧飞。索引可以創(chuàng)建或刪除衅鹿,但不會(huì)影響數(shù)據(jù)。
1)添加單列索引
create unique index 索引名 on 表名(列名)
2)添加組合索引
create index 索引名 on 表名(列名,列名...)
3)隱私索引
隱式索引是在創(chuàng)建對(duì)象時(shí)过咬,由數(shù)據(jù)庫服務(wù)器自動(dòng)創(chuàng)建的索引大渤。索引自動(dòng)創(chuàng)建為主鍵約束和唯一約束。
4)刪除索引
drop index 索引名

9.7觸發(fā)器

1.SQLite 的觸發(fā)器(Trigger)可以指定在特定的數(shù)據(jù)庫表發(fā)生 DELETE掸绞、INSERT 或 UPDATE 時(shí)觸發(fā)泵三,或在一個(gè)或多個(gè)指定表的列發(fā)生更新時(shí)觸發(fā)。
2.如果提供 WHEN 子句衔掸,則只針對(duì) WHEN 子句為真的指定行執(zhí)行 SQL 語句烫幕。如果沒有提供 WHEN 子句,則針對(duì)所有行執(zhí)行 SQL 語句敞映。
3.BEFORE 或 AFTER 關(guān)鍵字決定何時(shí)執(zhí)行觸發(fā)器動(dòng)作

  • 創(chuàng)建觸發(fā)器
    1)語句執(zhí)行前觸發(fā)
    creat trigger 觸發(fā)器名 before update of 表名
    1)語句執(zhí)行后觸發(fā)觸發(fā)
    creat trigger 觸發(fā)器名 after update of 表名

9.8事務(wù)

事務(wù)(Transaction)是指一個(gè)或多個(gè)更改數(shù)據(jù)庫的擴(kuò)展较曼。例如,如果您正在創(chuàng)建一個(gè)記錄或者更新一個(gè)記錄或者從表中刪除一個(gè)記錄振愿,那么您正在該表上執(zhí)行事務(wù)捷犹。重要的是要控制事務(wù)以確保數(shù)據(jù)的完整性和處理數(shù)據(jù)庫錯(cuò)誤。

  • 開始事務(wù)
    begin transaction
  • commit
    end transaction
  • rollback
    rollback

9.9日期

  1. 日期 (以 YYYY-MM-DD 格式返回日期)
    date(timestring,modifier...)
    2)時(shí)間 (以 HH:MM:SS 格式返回時(shí)間冕末。)
    time(timestring, modifier, modifier, ...)
    3)日期時(shí)間 (以 YYYY-MM-DD HH:MM:SS 格式返回萍歉。)
    datetime(timestring, modifier, ...)
    4)指定格式時(shí)間
    strftime(format, timestring, modifier, ...)
    timestring說明
    1 YYYY-MM-DD
    2 YYYY-MM-DD HH:MM
    3 YYYY-MM-DD HH:MM:SS.SSS
    4 MM-DD-YYYY HH:MM
    5 HH:MM
    6 YYYY-MM-DDTHH:MM
    7 HH:MM:SS
    8 YYYYMMDD HHMMSS
    9 now
    如 2019-01-01
    modifier說明
    1 NNN days
    2 NNN hours
    3 NNN minutes
    4 NNN.NNNN seconds
    5 NNN months
    6 NNN years
    7 start of month
    8 start of year
    9 start of day
    10 weekday N
    11 unixepoch
    12 localtime
    13 utc
    如 -1 days 標(biāo)識(shí)一天前
    format說明
    1 %d 一月中的第幾天,01-31
    2 %f 帶小數(shù)部分的秒档桃,SS.SSS
    3 %H 小時(shí)枪孩,00-23
    4 %j 一年中的第幾天,001-366
    5 %J 儒略日數(shù)藻肄,DDDD.DDDD
    6 %m 月蔑舞,00-12
    7 %M 分,00-59
    8 %s 從 1970-01-01 算起的秒數(shù)
    9 %S 秒仅炊,00-59
    10 %w 一周中的第幾天斗幼,0-6 (0 is Sunday)
    11 %W 一年中的第幾周,01-53
    12 %Y 年抚垄,YYYY
    13 %% % symbol
    如 %Y%m%d 20190101

最近把常用的一些SQL語句進(jìn)行了總結(jié)蜕窿,有不對(duì)的地方還望指出谋逻。謝謝

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市桐经,隨后出現(xiàn)的幾起案子毁兆,更是在濱河造成了極大的恐慌,老刑警劉巖阴挣,帶你破解...
    沈念sama閱讀 219,039評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件气堕,死亡現(xiàn)場離奇詭異,居然都是意外死亡畔咧,警方通過查閱死者的電腦和手機(jī)茎芭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來誓沸,“玉大人梅桩,你說我怎么就攤上這事“菟恚” “怎么了宿百?”我有些...
    開封第一講書人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長洪添。 經(jīng)常有香客問我垦页,道長,這世上最難降的妖魔是什么干奢? 我笑而不...
    開封第一講書人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任痊焊,我火速辦了婚禮,結(jié)果婚禮上律胀,老公的妹妹穿的比我還像新娘宋光。我一直安慰自己,他們只是感情好炭菌,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開白布罪佳。 她就那樣靜靜地躺著,像睡著了一般黑低。 火紅的嫁衣襯著肌膚如雪赘艳。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,692評(píng)論 1 305
  • 那天克握,我揣著相機(jī)與錄音蕾管,去河邊找鬼。 笑死菩暗,一個(gè)胖子當(dāng)著我的面吹牛掰曾,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播停团,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼旷坦,長吁一口氣:“原來是場噩夢啊……” “哼掏熬!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起秒梅,我...
    開封第一講書人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤旗芬,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后捆蜀,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體疮丛,經(jīng)...
    沈念sama閱讀 45,782評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評(píng)論 3 337
  • 正文 我和宋清朗相戀三年辆它,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了誊薄。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,102評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡娩井,死狀恐怖暇屋,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情洞辣,我是刑警寧澤,帶...
    沈念sama閱讀 35,790評(píng)論 5 346
  • 正文 年R本政府宣布昙衅,位于F島的核電站扬霜,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏而涉。R本人自食惡果不足惜著瓶,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望啼县。 院中可真熱鬧材原,春花似錦、人聲如沸季眷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽子刮。三九已至威酒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間挺峡,已是汗流浹背葵孤。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留橱赠,地道東北人尤仍。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像狭姨,于是被迫代替她去往敵國和親宰啦。 傳聞我的和親對(duì)象是個(gè)殘疾皇子鲤嫡,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 50個(gè)常用的sql語句Student(S#,Sname,Sage,Ssex) 學(xué)生表Course(C#,Cname...
    哈哈海閱讀 1,232評(píng)論 0 7
  • 50個(gè)常用的sql語句 Student(S#,Sname,Sage,Ssex) 學(xué)生表 Course(C#,Cna...
    最美的太陽WW閱讀 3,188評(píng)論 0 23
  • SQL SELECT 語句 一、查詢SQL SELECT 語法 (1)SELECT 列名稱 FROM 表名稱 (2...
    有錢且幸福閱讀 5,450評(píng)論 0 33
  • 我結(jié)合所學(xué)绑莺,結(jié)合我自己的情況暖眼,設(shè)計(jì)出一套自己的訓(xùn)練系統(tǒng)——虎妞訓(xùn)練法。 一纺裁、 開始每日對(duì)系統(tǒng)的一些重要的不能執(zhí)行到...
    水之韻味閱讀 337評(píng)論 0 0
  • 和孩子們初步閱讀The Egg Hunt,閱讀故事诫肠,描述圖片中感興趣的地方。 除了樹和花朵欺缘,還可以放在圖中的哪兒呢...
    閱樂Zoe閱讀 2,695評(píng)論 0 1