美文网首页
SQLite语句

SQLite语句

作者: 6ffd6634d577 | 来源:发表于2016-04-23 22:36 被阅读191次

    SQLite 命令

    • 我们在IOS应用程序中无法使用图形化界面操作数据库。在程序运行过程中操作数据库中的数据需要通过SQL语句
    • 什么是SQL
    • SQL(structured query language):结构化查询语言
    • SQL是对数据库中的数据进行定义和操作的语言
    • SQL语言简洁,语法简单,好学好用
    • 什么是SQL语句
    • 使用SQL语言编写出来的句子\代码,就是SQL语句
    • 在程序运行过程中,要想操作(增删改查)数据库中的数据,必须使用SQL语句

    SQL语句的种类

    1. DDL(Data Definition Language) - 数据定义语句

    命令 |描述 |
    :--------- | : |
    CREATE |创建一个新的表,一个表的视图,或者数据库中的其他对象|
    ALTER |修改数据库中的某个已有的数据库对象,比如一个表 |
    DROP |删除整个表,或者表的视图,或者数据库中的其他对象 |

    • 不需要记忆,可以直接从客户端软件复制/粘贴

    • 创建表 格式: CREATE TABLE IF NOT EXISTS 表名 (字段名1 字段类型1, 字段名2 字段类型2, …);

    /*
      创建数据表
      DDL CREATE
      CREATE TABLE    --创建数据表
      T_Student        --数据表名称
      (
      id                --字段名称
          INTEGER        --字段类型
          NOT NULL    --字段约束, NOT NULL表示字段的值不能为空
          PRIMARY KEY    --表示主键
          AUTOINCREMENT    --自动增长
      ,                --多个字段之间用,分开
      name            --字段名称
          TEXT        --字段的类型
      ...
      )
      ;                --表示一段sql语句结束
      注意:
          1.数据表名称和字段名称可以用""引起来,也可以不用
          2.DDL语句不需要熟练的被下来.开发的时候可以在Navicat里面创建好表,在把DDL复制过来
          3.数据表已经存在,还创建表会报'数据表已经存在'的错误,需要加IF NOT EXISTS 表示数据表不存在才创建
    */
    CREATE TABLE IF NOT EXISTS T_Student (
       id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
       name text,
       age integer,
       height real,
       score real
    );
    CREATE TABLE IF NOT EXISTS T_Person (
       id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
       name text,
       age integer,
       height real
    );
    
    • 删除表 格式: DROP TABLE IF EXISTS 表名
    /*
      DDL删除表
    
      DROP TABLE T_Student    --删除T_Student这张表
    */
    DROP TABLE T_Person;
    
    2. DML(Data Manipulation Language) - 数据操作语句

    命令 |描述
    :------- |
    INSERT |新增数据
    UPDATE |修改数据
    DELETE |删除数据

    • 插入数据 格式: INSERT INTO 表名 (字段1, 字段2, …) VALUES (字段1的值, 字段2的值, …);
    /*
      DML插入数据
      INSERT INTO        --表示插入数据
      T_Person        --插入数据的数据表名称
      (name, age, height)        --表示要设置哪些字段的值
      VALUES
      ('zhangsan', 18, 1.65)    --每个字段对应的值
    
      注意:
          1.字段名和字段值要对应
          2.sqlite其实是没有数据类型的,DDL语句中的类型只是给我们程序员看的
          3.字符串需要用‘’
    */
    INSERT INTO T_Person (name, age, height) VALUES ('lisi1', 15, 1.70);
    INSERT INTO T_Person (name, age, height) VALUES ('lisi2', 15, 1.70);
    INSERT INTO T_Person (name, age, height) VALUES ('lisi3', 18, 1.80);
    INSERT INTO T_Person (name, age, height) VALUES ('lisi4', 17, 1.78);
    
    • 更新数据 格式 UPDATE 表名 SET 字段1 = 字段1的值, 字段2 = 字段2的值, … ;
    /*
      DML更新数据
    
      UPDATE T_Person        --更新T_Person中的数据
      SET
      字段名称=字段的值;        --更新的字段名=字段值
      ...                    --更多的字段
      WHERE                --设置更新条件
      字段名称=字段的值
    
      注意:
          1.如果不设置更新数据的条件,默认会更新所有数据
    */
    UPDATE T_Person SET name = 'wangle', height = 180 WHERE id = 3;
    
    • 删除数据 格式 DELETE FROM 表名
    /*
      DML删除数据
    
      DELETE FROM    T_Person    --删除T_Person中的数据
      WHERE            --设置删除数据的条件
      id=14            --表示删除id=14的这条记录
    */
    DELETE FROM T_Person WHERE id = 6;
    
    条件语句
    • 如果只想 更新、 者删 或 查询 除某些固定的记录,那就必须在SQL 语句 后面 加上一些条件
    • 条件语句的常见格式
    • WHERE 字段 = 某个值 ; // 不能用两个 =
    • WHERE 字段 is 某个值 ; // is 相当于 =
    • WHERE 字段 != 某个值 ;
    • WHERE 字段 is not 某个值 ; // is not 相当于 !=
    • WHERE 字段 > 某个值 ;
    • WHERE 字段1 = 某个值 and 字段2 > 某个值 ; // and相当于C语言中的 &&
    • WHERE 字段1 = 某个值 or 字段2 = 某个值 ; // or 相当于C语言中的 ||
    3. DQL(Data Query Language) - 数据查询语句

    命令 |描述
    :-------- |
    SELECT |查询数据

    • 需要掌握一些简单的查询指令

    • 查询数据 格式 SELECT 字段1, 字段2, … FROM 表名;

    -- 查询指定字段
    -- 查询所有字段
    -- 查询 age < 20 的记录的 name, age 字段
    -- 查询 age < 20 的记录的所有字段
    -- 查询记录总数
    -- 查询 age < 18 的记录总数
    -- 查询最大 age
    -- 查询最小 age
    -- 查询所有记录的所有字段,根据 age 排序(默认升序排序,ASC)
    -- 查询所有记录的所有字段,根据 age 降序排序(DESC)
    -- 使用多个字段排序,先按age降序排序,当age相同时再根据height降序排序
    -- 返回指定的记录
    /*
      LIMIT 常用于分页, 比如一页显示3条数据
    */
    -- 取出年龄最大的3条记录
    -- 查询时给字段取别名
    
    • 示例:
    /*
        SELECT        --查询
        name,    --需要的字段
        age,    --需要的字段
        FROM 表名;    --从哪张表里查找
    */
    SELECT name, age FROM T_Person;
    
    -- 查询 age < 20 的人名
    SELECT name FROM T_Person WHERE age < 20;
    
    -- * 查询所有的字段
    SELECT * FROM T_Person;
    
    -- 查询 age > 20 记录的所有字段
    SELECT * FROM T_Person WHERE age > 20;
    
    -- 查询记录总数
    SELECT count(*) FROM T_Person;
    
    -- 查询age < 18 的记录总数
    SELECT count(*) FROM T_Person WHERE age < 18;
    
    -- 查询最大的年龄
    SELECT MAX(age) FROM T_Person;
    
    -- 查询最小的年龄
    SELECT MIN(age) FROM T_Person;
    
    -- ORDER BY age 根据age排序,默认排序升序(ASC)
    SELECT * FROM T_Person ORDER BY age;
    
    -- 根据age降序排序(DESC)
    SELECT * FROM T_Person ORDER BY age DESC;
    
    -- 使用多个字段排序,先按age降序排序,当age相同时再根据height降序排序
    SELECT * FROM T_Person ORDER BY age DESC, height DESC;
    
    -- LIMIT 返回指定的记录数
    -- 前面的数值: 跳过的记录条数
    -- 后面的数值: 返回的记录条数
    SELECT * FROM T_Person LIMIT 2, 3;
    
    /*
        LIMIT 常用于分页, 比如一页显示3条数据
        第一页: LIMIT 0, 3    --取最前面的3条数据
        第二页: LIMIT 3, 3    --跳过前面3条取3条数据
        第三页: LIMIT 6, 3    --跳过前面6条取3条数据
        第n页:  LIMIT (n - 1) * 3, 3
    
        注意: LIMIT 0,3; 前面的数值为0时,可以省略 0, LIMIT 3;
    */
    SELECT * FROM T_Person LIMIT 0, 3;
    SELECT * FROM T_Person LIMIT 3, 3;
    SELECT * FROM T_Person LIMIT 6, 3;
    SELECT * FROM T_Person LIMIT 9, 3;
    
    --LIMIT 0,3; 前面的数值为0时,可以省略 0, LIMIT 3;
    SELECT * FROM T_Person LIMIT 3;
    
    /*
        取出年龄最大的3条记录
            1.按年龄降序排序,年龄大的在前面
            3.取出前3条记录.
    */
    SELECT * FROM T_Person ORDER BY age DESC LIMIT 3;
    
    • 查询时给字段取别名
    /*
      别名格式:
      字段名 AS 别名. 可以省略 AS 关键字
    */
    SELECT id, name AS Stu_Name, height Stu_Height FROM T_Person LIMIT 20;
    
    排序
    • 在 DQL 后面添加 ORDER BY 字段名
    • SELECT * FROM 表名 ORDER BY 字段名;
    • 多个字段进行排序
    • SELECT * FROM 表名 ORDER BY 字段名1, 字段名2;
    • ASC 表示 升序, DESC 表示 降序,默认 升序
    SQL语句的特点
    • 不区分大小写(比如数据库认为 user 和 UsEr 是一样的)
    • 每条语句建议以分号 ; 结尾( ; 用于区分多条 SQL语句)
    • SQL 中的常用关键字有 select、insert、update、delete、from、create、where、desc、order、by、group、table、alter、view、index 等等
    • 数据库中不可以使用 关键字 来命名 表、字段

    简单约束

    • 建表时可以给特定的字段设置一些约束条件,常见的约束有
    • NOT NULL :规定字段的值不能为null
    • UNIQUE :规定字段的值必须唯一
    • DEFAULT :指定字段的默认值 (建议:尽量给字段设定严格的约束,以保证数据的规范性)
    示例
    • CREATE TABLE T_Person (id integer, name text NOT NULL UNIQUE, age integer NOT NULL DEFAULT 1) ;
    • name 字段不能为 NULL,并且唯一
    • age 字段不能为 NULL,并且默认为1

    主键约束

    • 如果 T_Person 表中就 name 和 age 两个字段,而且有些记录的 name 和 age 字段的值都一样时,那么就没法区分这些数据,造成数据库的记录不唯一,这样就不方便管理数据
    • 良好的数据库编程规范应该要保证每条记录的 唯一性,为此,增加 主键约束
    • 每张表都必须有一个主键,用来标识记录的唯一性
    • 主键(Primary Key,简称PK)用来 唯一 地标识某 一条记录
    • 例如t_student可以增加一个id字段作为主键,相当于人的身份证

    外键约束

    • 利用 外键约束 可以用来 建立表与表之间 的联系
    • 外键的一般情况是:一张表的某个字段,引用着另一张表的主键字段
    • 新建一个外键
      CREATE TABLE T_Student (id integer primary key autoincrement, name text, age integer, class_id integer, constraint fk_student_class foreign key (class_id) references t_class (id));
    • T_Student 表中有一个叫做 fk_t_student_class_id_t_class_id的 外键
    • 这个外键的作用是用 T_Student 表中的 class_id 字段引用 T_Class 表的 id 字段

    表连接查询

    • 什么是表连接查询?需要联合多张表才能查到想要的数据
    • 表连接的类型
    • 内连接:inner join 或者 join (显示的是左右表都有完整字段值的记录)
    • 左外连接:left outer join (保证左表数据的完整性)
    • 示例
    • 查询 iOS08 班的所有学生
    • SELECT s.name,s.age FROM t_student s, t_class c where s.class_id = c.id AND c.name = ‘0316iOS’;

    相关文章

      网友评论

          本文标题: SQLite语句

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