數(shù)據(jù)庫的SQL語句還都是在大學(xué)學(xué)習(xí)的呢,記得當(dāng)時(shí)將數(shù)據(jù)庫語句背的滾瓜爛熟的,這兩年在搞iOS開發(fā),對本地化存儲使用了數(shù)據(jù)庫語句,無非就是一些使用FMDB增、刪、改、查,直到一個(gè)哥們面試回來問我一些問題,我才意識到,模糊查詢、排序等復(fù)雜一點(diǎn)的都在畢業(yè)的時(shí)候還給老師了。現(xiàn)在把它簡單的整理一下。
一、基礎(chǔ)篇
1、創(chuàng)建數(shù)據(jù)表
創(chuàng)建"USER_MEMBER"表,包含兩個(gè)字段"USER_ID、NAME"
CREATE TABLE IF NOT EXISTS USER_MEMBER(USER_ID TEXT , NAME,TEXT ,AGE TEXT)
2、基本增、刪、改、查。
<1>增(數(shù)據(jù)表新增字段)
INSERT INTO USER_MEMBER(USER_ID,NAME,AGE)values(?,?,?)
<2>刪除 (刪除表中用戶ID為001的數(shù)據(jù))
DELETE FROM USER_MEMBER WHERE USER_ID = '001'
<3>改 ?(將表中用戶ID為001的人,年齡修改為25歲)
UPDATE USER_MEMBER SET AGE = '25' WHERE USER_ID = '001'
<4>查 ?(查詢表中年齡為25,名字為李志強(qiáng)的所有用戶)
SELECT * FROM USER_MEMBER WHERE AGE = '25' AND NAME = '李志強(qiáng)'
二、增強(qiáng)篇 ?模糊查詢 (主要是LIKE關(guān)鍵字 及通配符的使用)。
1、% :表示任意0個(gè)或多個(gè)字符,可匹配任意類型和長度的字符。
<1>查詢表中所有姓 '李' 的用戶
?SELECT * FROM USER_MEMBER WHERE NAME LIKE '李%'
<2>查詢表中NAME所有以 '強(qiáng)' 結(jié)尾的所有用戶
SELECT * FROM USER_MEMBER WHERE NAME LIKE '%強(qiáng)'
<3>查找NAME中包含 '強(qiáng)' 的用戶 (例:“李志強(qiáng)”,“李強(qiáng)”, “強(qiáng)哥”)
SELECT * FROM USER_MEMBER WHERE NAME LIKE '%強(qiáng)%'
<4>查找NAME中既有 '李' 、又有 '強(qiáng)' 的用戶。(例:“李志強(qiáng)”,@“強(qiáng)志李”,@“強(qiáng)李志”)。
SELECT * FROM USER_MEMBER WHERE NAME LIKE '%李%' AND NAME LIKE '%強(qiáng)%'
2、_ : 表示任意單個(gè)字符,匹配單個(gè)任意字符,它常用來限制表達(dá)式的字符長度語句。
<1>、查詢表中第二個(gè)字符為“志”的用戶
SELECT * FROM USER_MEMBER WHERE NAME LIKE '_志_'
<2>、查找第三個(gè)字符為'強(qiáng)'的用戶。
SELECT * FROM USER_MEMBER WHERE NAME LIKE '_ _強(qiáng)';
3、擴(kuò)展:網(wǎng)上還有一種正則表達(dá)式的方法
<1>、[ ]指定一個(gè)字符、字符串或范圍,要求所匹配對象為它們中的任一個(gè)。
SELECT * FROM [user] WHERE u_name LIKE '[張李王]三'
將找出“張三”、“李三”、“王三”(而不是“張李王三”);
如: [ ] 內(nèi)有一系列字符(01234、abcde之類的)則可略寫為“0-4”、“a-e”
SELECT * FROM [user] WHERE u_name LIKE '老[1-9]'
將找出“老1”、“老2”、……、“老9”;
<2>、[^ ] :其取值和 [] 相同,但它要求所匹配對象為指定字符以外的任一個(gè)字符。
比如: SELECT * FROM [user] WHERE u_name LIKE '[^張李王]三'
將找出不姓“張”、“李”、“王”的“趙三”、“孫三”等;
SELECT * FROM [user] WHERE u_name LIKE '老[^1-4]';
將排除“老1”到“老4”,尋找“老5”、“老6”、……
三、實(shí)用篇(排序)
我在優(yōu)化IM功能點(diǎn)時(shí)遇到過這樣一個(gè)問題,查看全部群成員(最多可達(dá)3000人),如果全部放倒內(nèi)存中排序非常耗費(fèi)性能,所以在在數(shù)據(jù)庫中取的話直接排序好之后再拿出來。
1、查詢USER_MEMBER表所有數(shù)據(jù),按照ID逆序、NAME升旭(a-z)排列,(UPPER,不區(qū)分大小寫)。
SELECT * FROM USER_MEMBER ?ORDER BY USER_ID DESC, ?UPPER(NAME).
2、隨機(jī)查找表中10條數(shù)據(jù)
SELECT * FROM USER_MEMBER? ORDER BY? RAND() LIMIT 10
3、實(shí)用sql語句查詢出省名以“湖”開頭,右邊為“436001”所在的市區(qū)
SELECT *FROM CITYS WHERE PROVINCE_NAME LIKE ‘湖%’ AND POST_CODE = 436001;
文章在后續(xù)還會推出數(shù)據(jù)庫升級、事物操作數(shù)據(jù)庫等,歡迎大家點(diǎn)評。