一、iOS開發(fā): SQLite入門

DDL語句(數(shù)據(jù)定義語句)

一、創(chuàng)建表格
  • 創(chuàng)建表格: create table 表名(字段1 字段類型 字段約束, 字段2 字段類型 字段約束, ......);
  • 字段類型 和 字段約束可以不寫, 但是一般都會將字段類型寫上, 用于提示開發(fā)者應(yīng)該存儲的字段類型
  • 例如 <a>create table t_stu(id integer primary key autoincrement, name text);</a>
  • 注意: 當(dāng)調(diào)用上面藍(lán)色的一段話后, 會創(chuàng)建一個(gè)表名為 t_stu 的sqlite表, 但是重復(fù)執(zhí)行的時(shí)候, 就會報(bào)表格已經(jīng)存在的錯(cuò)誤, 我們在執(zhí)行語句的時(shí)候可以沒有效果, 但是一定不能有錯(cuò)誤
  • 添加不存在才創(chuàng)建的語句是 <a>create table if not exists t_stu(id integer primary key autoincrement, name text);</a>
  • 意思就是: 如果t_stu表格不存在, 就創(chuàng)建一個(gè)t_stu表格, 如果存在, 就不在重復(fù)創(chuàng)建
二、刪除表格
  • 刪除表格: drop table 表名;
  • 例如: <a>drop table t_stu</a>
  • 意思是刪除 表名為 t_stu的這個(gè)sqlite表
  • 防止重復(fù)刪除的錯(cuò)誤語句: <a>drop table if exists t_stu;</a>
三、修改表格
  • DDL語句中修改表格的語句只能實(shí)現(xiàn)部分功能: <a>修改表名</a>, <a>新增字段</a>
  • 修改表名: alter table 舊表名 rename to 新表名;
    • <a>alter table t_stu rename to t_student;</a>
    • 將 t_stu表 名字改為 t_student
  • 新增屬性: alter table t_student add column 字段名 字段類型 字段約束;
    • <a>alter table t_student add column address text not null default 地址;</a>
    • 給 t_student表 添加一個(gè) address字段, 類型text, 約束不能為空, 且默認(rèn)值為 地址

sqlite中存儲類 的 數(shù)據(jù)類型(字段類型)

  • null: 值是一個(gè) NULL 值。
  • integer: 值是一個(gè)帶符號的整數(shù),根據(jù)值的大小存儲在 1、2、3、4、6 或 8 字節(jié)中。
  • real: 值是一個(gè)浮點(diǎn)值,存儲為 8 字節(jié)的 IEEE 浮點(diǎn)數(shù)字。
  • text: 值是一個(gè)文本字符串,使用數(shù)據(jù)庫編碼(UTF-8、UTF-16BE 或 UTF-16LE)存儲。
  • blob: 值是一個(gè) blob 數(shù)據(jù),完全根據(jù)它的輸入存儲。

sqlite中的常用約束

  • not null - 非空
  • unique - 唯一
  • primary ket - 主鍵
  • foreign key - 外鍵
  • check - 條件檢查
  • default - 默認(rèn)
  • autoincrement - 自動增加 (需要數(shù)據(jù)類型為integer)

DML語句(數(shù)據(jù)操作語句)

一、插入語句
  • insert into 表名 (字段1, 字段2, ...) values (字段1的值, 字段2的值, ...);
  • 例句: <a>insert into t_stu (name, age, score, num) values ('張三', 18, 60, 'jx0001');</a>
  • 注意: 插入數(shù)據(jù)時(shí), text類型一定要使用單引號
二、更新語句
  • update 表名 set 字段1 = 字段1的值, 字段2 = 字段2的值, ...
  • 例句: <a>update t_stu set name = '王小二', age = 19;</a>
  • 注意: 這一句執(zhí)行后, 表中所有行的name和age對應(yīng)的數(shù)據(jù)都會修改, 如果需要只改某一行的語句, 需要添加條件語句
二、刪除語句: 操作記錄, 即刪除整行
  • delete from 表名;
  • 例句: <a>delete from t_stu;</a>
  • 注意: 上面這句, 會刪除t_stu表中所有數(shù)據(jù), 如果想要?jiǎng)h除指定行, 需要添加條件語句

條件語句

一、示例
  • 現(xiàn)有sqlite表如下, 在這個(gè)基礎(chǔ)上進(jìn)行指定數(shù)據(jù)的操作:


    現(xiàn)有數(shù)據(jù)
  • 執(zhí)行修改語句<a>update t_stu set name = '錢七', age = 21 where num = 'jx0002';</a>, 效果如下:


    修改后
    • 其中的<a>where num = 'jx0002'</a>就是條件語句: 指定num = 'jx0002'的語句
  • 執(zhí)行刪除語句: <a>delete from t_stu where age < 19 and score < 70;</a>, 效果如下:


    刪除后
    • 刪除 age < 19 并且 score < 70 的數(shù)據(jù)
  • 可以修改一個(gè)字段的值 等于 另一個(gè)字段的值: <a>update t_stu set score = age;</a>


    score = age
二、條件語句的常見格式
  • where 字段 = 某個(gè)值; (不能用==)
  • where 字段 is 某個(gè)值; (is 相當(dāng)于 =)
  • where 字段 != 某個(gè)值;
  • where 字段 is not 某個(gè)值; (is not 相當(dāng)于 !=)
  • where 字段 > 某個(gè)值;
  • where 字段 < 某個(gè)值;
  • where 字段1 = 某個(gè)值 and 字段2 = 某個(gè)值; (and 相當(dāng)于C語言中的 &&)
  • where 字段1 = 某個(gè)值 or 字段2 = 某個(gè)值; (or 相當(dāng)于C語言中的 ||)

DQL(數(shù)據(jù)查詢語句)

一、基本操作
  • 基本語句: select 字段名 from 表名;
    • 例如 <a>select * from t_stu;</a>

    • *是通配符, 表示所有的字段


      基本查詢
    • 查詢指定字段: <a>select name, age from t_stu;</a>


      查詢指定字段
    • 根據(jù)條件去查詢 <a>select * from t_stu where age > 19;</a>


      根據(jù)條件去查詢
二、統(tǒng)計(jì)查詢
  • count(字段名): 值不為null的 該字段的個(gè)數(shù), 字段名使用通配符值, 指的是數(shù)據(jù)行數(shù)

  • avg(字段名): 表中指定字段的平均數(shù), 如果是字符串, 默認(rèn)改值以0計(jì)算

  • sum(字段名): 表中指定字段的和

  • max(字段名): 表中指定字段中最大的那個(gè)值

  • min(字段名): 表中指定字段中最小的那個(gè)值

  • 執(zhí)行語句<a>select count(age) from t_stu;</a>


    age字段有值的個(gè)數(shù)
三、排序查詢
  • 格式 select 字段名 from 表名 order by 字段名 DESC;
  • ASC: 升序 DESC: 將序 $s默認(rèn)是ASC
  • 例句: <a>select score from t_stu order by age DESC;</a>效果如下:


    查詢score字段的值, 并根據(jù)age字段的值進(jìn)行降序排序
    • 查詢t_stu表中的所有score字段的值, 并根據(jù)age的值降序排列
  • 例句: <a>select * from t_stu order by age ASC, score DESC;</a>
  • 查詢表中所有的字段值, 并根據(jù)age的值進(jìn)行升序排列, 如果age有相同的值, 那么這些值根據(jù)score的值進(jìn)行降序排列


    效果
四、分頁查詢
  • 格式: select 字段名 from t_stu limit 起點(diǎn)下標(biāo), 長度;

  • 例句: <a>select * from t_stu limit 0, 3;</a>

  • 現(xiàn)有數(shù)據(jù)如下:


    現(xiàn)有數(shù)據(jù)
  • 執(zhí)行<a>select * from t_stu limit 0, 3;</a>結(jié)果:


    select * from t_stu limit 0, 3;
  • 執(zhí)行<a>select * from t_stu limit 2, 2;</a>結(jié)果:


    select * from t_stu limit 2, 2;
  • 排序查詢: <a>select * from t_stu order by score asc limit 2, 3;</a>


    賽選并排序
    • 根據(jù)score從小到大排序后, 在取下標(biāo)2為起點(diǎn)的3條數(shù)據(jù)
  • 省略寫法 <a>select * from t_stu limit 3;</a>

  • 默認(rèn)下標(biāo)為0開始, 取三條數(shù)據(jù)


    默認(rèn)下標(biāo)為0開始, 取三條數(shù)據(jù)
五、多表查詢
  • 現(xiàn)有t_user表 和 t_duanzi表, 如下圖:


    t_user

    t_duanzi
  • 現(xiàn)在同時(shí)查詢兩個(gè)表:

  • <a>select * from t_user, t_duanzi;</a>


    同時(shí)查詢
  • 根據(jù)t_user的id 和 t_duanzi的userId相等時(shí)進(jìn)行查詢


    t_user的id 和 t_duanzi的userId相等
六、表名和字段名的別名
  • 查詢指定字段:

    • <a>select t_user.id, t_user.name, t_duanzi.id, t_duanzi.name, content from t_user, t_duanzi where t_user.id = t_duanzi.userId;</a>
    • 上面語句中兩個(gè)表去自己的字段時(shí), 需要使用點(diǎn)語法, 如果表名很長就會顯得很麻煩, 可以使用替換的方式, 在查詢時(shí)將表名換一個(gè)名字
    • 表名的地方使用 as 來更換表名
    • <a>select u.id, u.name, d.id, d.name, content from t_user as u, t_duanzi as d where u.id = d.userId;</a>


      查詢結(jié)果
  • 查詢時(shí), 不僅僅表名可以修改, 字段也可以修改

    • <a>select u.id as uid, u.name as u_name, d.id as did, d.name as d_name, content from t_user as u, t_duanzi as d where u.id = d.userId;</a>
    • 效果如下:


      修改字段名
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、iOS應(yīng)用數(shù)據(jù)存儲的常用方式: 1> XML屬性列表(plist)歸檔2> Preference(偏好設(shè)置)3...
    DB001閱讀 1,676評論 0 5
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,642評論 18 399
  • 50個(gè)常用的sql語句Student(S#,Sname,Sage,Ssex) 學(xué)生表Course(C#,Cname...
    哈哈海閱讀 1,334評論 0 7
  • 一. Java基礎(chǔ)部分.................................................
    wy_sure閱讀 4,011評論 0 11
  • 這兩天的課程來說,昨天的課程是最受益匪淺!同樣的一件事情,每個(gè)人的觀點(diǎn)是不一樣的,但是事實(shí)我覺得就是一些明確的數(shù)據(jù)...
    素10閱讀 205評論 0 4

友情鏈接更多精彩內(nèi)容