iOS Sqlite3 SQL 语句

作者: 光明程辉 | 来源:发表于2015-11-16 23:46 被阅读2321次

    sqlite3SQL语句的特点


    • 不区分大小写(比如数据库认为user和UsEr是一样的)
      每条语句都必须以分号 “ ; ” 就是分号结尾。

    SQL中的常用关键字有


    • select、insert、update、delete、from、create、where、desc、order、by、group、table、alter、view、index等等
    • 数据库中不可以使用关键字来命名表、字段

    数据定义语句 DDL、DML、DQL


    • DDL:(Data Definition Language)包括create和drop等操作
      在数据库中创建新表或删除表(create table或 drop table)
    • DQL: ( Data Query Language)可以用于查询获得表中的数据
      关键字select是DQL(也是所有SQL)用得最多的操作, 其他DQL常用的关键字有where,order by,group by和having
    • DML: ( Data Manipulation Language)包括insert、update、delete等操作
      上面的3种操作分别用于添加、修改、删除表中的数据

    创表---格式


    • create table 表名 (字段名1 字段类型1, 字段名2 字段类型2, …) ;
      create table if not exists 表名 (字段名1 字段类型1, 字段名2 字段类型2, …) ;
    示例:
    create table t_student (id integer, name text, age inetger, score real) 
    

    字段类型


    • SQLite将数据划分为以下几种存储类型:
      integer : 整型值
      real : 浮点值
      text : 文本字符串
      blob : 二进制数据(比如文件)

    实际上SQLite是无类型的
    就算声明为integer类型,还是能存储字符串文本(主键除外)
    建表时声明啥类型或者不声明类型都可以,也就意味着创表语句可以这么写:
    create table t_student(name, age);

    为了保持良好的编程规范、方便程序员之间的交流,编写建表语句的时候最好加上每个字段的具体类型

    删表---格式


    • drop table 表名 ;
      drop table if exists 表名 ;
    // 示例
    drop table t_student ;
    

    插入数据(insert)---格式


    • 格式: insert into 表名 (字段1, 字段2, …) values (字段1的值, 字段2的值, …) ;
    // 示例
    insert into t_student (name, age) values (‘mj’, 10) ;
    
    • 注意
      数据库中的字符串内容应该用单引号 ’ 括住

    更新数据(update)---格式


    • update 表名 set 字段1 = 字段1的值, 字段2 = 字段2的值, … ;
    // 示例
    update t_student set name = ‘jack’, age = 20 ; 
    
    • 注意
      上面的示例会将t_student表中所有记录的name都改为jack,age都改为20

    删除数据(delete)---格式


    • delete from 表名 ;
    // 示例
    delete from t_student ;
    
    • 注意
      上面的示例会将t_student表中所有记录都删掉

    数据库相对 plist的好处


    • 分页查询指令

    limit 指令用于限制查询出来的结果数量

    • 第一个数值表示从哪条记录开始(起始是0)
    • 第二个数值表示一次取多少条记录,如果要分页显示,通常第二个数值固定不变,表示每页需要显示的记录条数
    • 第一页
      select * from t_person limit 0, 3;
    • 第二页
      select * from t_person limit 3, 3;
    • 第三页
      select * from t_person limit 6, 3;

    查询排序


    • ASC 升序(默认的排序方法)
    • DESC 降序
    • 由左至右排序的优先级依次降低,也就是第一个排序列的优先级是最高的
      SELECT * FROM t_person ORDER BY age ASC, id DESC;

    能够定向地查到具体需要的内容


    • 从数据库查出名字叫做wangwu的记录
      select * from t_person where name = 'wangwu';
    • 从数据库查出名字以wang开头的记录
      select * from t_person where name like 'wangwu%';
    • 从数据库查出名字中包含a的记录,通常用于模糊查询,建议不要搞太多字段组合模糊查询,那样性能会非常差!
      select * from t_person where name like '%a%';

    可以对数据进行统计


    • 取出所有数据的总数目
      select count(*) from t_person;
    • 统计符合条件的记录条数
      select count(*) from t_person where name like 'wang%';
    • 选择指定列的最大值
      select max(age) from t_person;
    • 选择指定列的最小值
      select min(age) from t_person;
    • 计算指定列的平均值
      select avg(age) from t_person;
    • 计算指定列数值的总数
      select sum(age) from t_person;

    更新指令


    • 更新一个字段
      update t_person set name = 'xiaofang' where name = 'wangwu';
    • 更新多个字段,每个字段之间使用,分隔
      update t_person set age = 20, height = 2.0 where name = 'xiaofang';

    1、需要注意的是:使用更新指令时,最好能够准确地知道唯一的一条要更新的记录,否则其他所有满足条件的记录都会被修改。

    2、自动增长是由服务器来控制的。


    关系

    为什么要有关系
    1. 数据“冗余”,所谓数据冗余,就是存储了多余的数据
    2. 在数据库中的关系有:
    • 一对一
    • 一对多
    • 多对一

    通常,一对多和多对一关系存储在时,就需要使用多个表表示。

    关于left jion和jion的选择

    left join


    1)如果要查询左边表中的所有符合条件的数据,使用left jion

    1. 通常查询出来的结果会多,因为右边表不存在的记录,同样可能会被查询出来,查询出来之后,右边表不存在的记录,全部为NULL

    join


    1)如果要两个表中同时存在的符合条件的数据,使用jion

    1. 通常查询出来的结果会比左连接少,因为右边表不存在的记录,不会显示出来
    通常在使用时,左边的表是主要信息表,右边的表是辅助修饰的信息表,其内容可有可无,因此,在实际应用中,left jion使用的比较频繁!如果用join的话,有可能会“丢(有些存在的数据不显示)”数据

    在使用连接查询多个表时,如果有重名的字段,可以使用 as 的方法,给字段起一个别名,示例代码如下:

    select s.name, s.age, s.phone, b.name as bookname, b.price from t_student s
    join t_book b on b.id = s.book_id

    相关文章

      网友评论

      本文标题:iOS Sqlite3 SQL 语句

      本文链接:https://www.haomeiwen.com/subject/vngkhttx.html