乐趣区

关于node.js:mysql基础知识-持续更新

mysql 表 查问语句

DQL:查问语句

排序查问

  • 语法:order by 子句
  • 排序形式:

    • ASC : 升序,默认的
    • DESC : 降序。
  • 留神:

    • 如果有多个排序条件,则以后边得条件值一样时,才会判断第二条件

      SELECT * from userinfo ORDER BY age ASC,id DESC;

聚合函数:

将一列数据作为一个整体,进行纵向计算

  1. count:计算个数

    select count(age) from userinfo; -- 返回个数  这种形式是不会把 null 计算在内得
    select count(ifnull(age,0)) from userinfo; -- 判断是否是 null 是的话 按 0 来计算
    select count(8) from userinfo;-- 查问记录(不举荐)
  2. max:计算最大值

    select Max(age) from userinfo; -- 计算表中年龄最大得 
  3. min:计算最小值

    select Min(age) from userinfo; -- 计算表中年龄最小的 
  4. sum:计算和

    select sum(age) from userinfo; -- 计算表中所有年龄之和 
  5. avg:计算平均值

    select avg(age) from userinfo; -- 计算表中平均年龄 

分组查问:

  1. 语法:group by 分组字段;
  2. 留神:

    • 分组之后查问的字段:分组字段,聚合函数
    • where 和 having 的区别?

      1. where 在分组之前进行限定,如不符合条件,则不参加分组。having 在分组之后进行限定,如果不满足后果,则不会被查问进去;
      2. where 条件前面是不能够跟着聚合函数的,having 能够进行聚合函数的判断
      3. 实现语句

        -- 依据性别来进行分组,并且查出每个组的平均年龄
        select sex,avg(age) from userinfo group by sex; 
        -- 依据性别来进行分组,查出每个组的平均年龄,并且查出参加平均年龄的人数
        select sex,avg(age),count(age) from userinfo group by sex;
        -- 依据性别来进行分组,查出每个组的平均年龄,并且查出参加平均年龄的人数 并且过滤掉大于 20 岁的人
        select sex,avg(age),count(age) from userinfo where age>20 group by sex;
        -- 同上 并且过滤参加人数小于 2 的组
        select sex,avg(age),count(age) from userinfo where age>20 group by sex having count(age)<2;    

分页查问:

  1. 语法:limit 开始的索引,每页查问条数
  2. 公式:(开始的索引 -1)* 每页查问条数

    select * from userinfo limit 0,3; -- 第一页
    select * from userinfo limit 3,3; -- 第二页
    select * from userinfo limit 6,3; -- 第三页 
  3. limit 只实用于 MySql; 每个数据库都有自有的分页形式

束缚:

  • 概念:对表中的数据进行限定,保障表中数据的正确性,有效性和完整性;

  • 分类:

    • 主键束缚:primary key
    • 非空束缚:not null
    • 惟一束缚:unique
    • 外键束缚
  • 非空束缚

    • 创立表时增加束缚

      CREATE TABLE userinfo(
              id:INT,
              name:VARCHAR(20) not null  -- name 为非空字段
      )
    • 创立表实现后在给表中字段增加非空字段

      ALTER TABLE userinfo MODIFY NAME VARCHAR(20) NOT NULL;
    • 删除非空字段

      ALTER TABLE userinfo MODIFY NAME VARCHAR(20);
  • 惟一束缚:unique,值不能反复

    • 创立表时,增加惟一束缚

      CREATE TABLE userinfo(
          id INT,
          name:VARCHAR(20) UNIQUE
      )
    • 创立实现后增加惟一束缚 (留神:惟一束缚字段能够有多个 null)

      ALTER TABLE userinfo MODIFY NAME VARCHAR(20) UNIQUE;
    • 删除惟一束缚

      ALTER TABLE userinfo MODIFY NAME VARCHAR(20)  -- 这种写法时谬误的
      ALTER TABLE userinfo DROP INDEX name  -- 这个是正确的 
  • 主键束缚 primary key

    • 留神

      • 含意:非空且惟一
      • 一张表只能有一个主键
      • 主键就是表中记录的惟一标识
    • 在创立表时增加主键束缚

      CREATE TABLE userinfo(
         id INT PRIMARY KEY, -- 增加主键  
         name VARCHAR(20)  
      )
    • 创立表实现后增加主键

      ALTER TABLE userinfo MODIFY id INT PRIMARY KEY;
    • 删除主键

      ALTER TABLE userinfo MODIFY id int;  -- 这种写法时谬误的
      ALTER TABLE userinfo DROP primary key;  -- 这个是正确的 
    • 主动增长

      • 概念:如果某一列是 int 类型的,应用 auto_increment 能够实现主动增长

        CREATE TABLE userinfo(
           id INT PRIMARY KEY AUTO_INCREMENT,  -- 增加主动增长
           name VARCHAR(20)  
        )
        -- 留神:主动增长只跟上一条有关系 例如 上一条是 100 下一条就是 101
        -- 删除主动增长
        ALTER TABLE userinfo MODIFY id int;
        ALTER TABLE userinfo MODIFY id int auto_increment;
  • 外键束缚 foreign key, 让表与表产生关系,从而保证数据的正确性

    • 语法

      create table userinfo (
          ....
          外键列,constraint 外键名称 foreign key (外键列名称) references 主表名称 (主表列名称也就是主键名称)
      )
    • 删除外键

      alter table userinfo drop foreign key 外键列名称 
    • 创立表之后增加外键

      alter table userinfo add constraint 外键名称 foreign key (外键列名称) references 主表名称 (主表列名称也就是主键名称)
    • 级联操作

退出移动版