SQL知识点整理(未完待续)

SQL复习

几个关键词
  1. 主键sql

    • 在关系表中,任意两条记录不能重复(这里的不能重复不是指两条记录不彻底相同,而是可以经过某个字段惟一区分出不一样的记录),这个字段被称为主键
    • 选取主键的一个基本原则是,不使用任何业务相关的字段做为主键,通常把这个字段命名为id(常见的有自增整数类型,全局惟一GUID类型)
    • 联合主键:经过多个字段惟一标识记录,两个或更多的字段都设置为主键,对于联合主键,容许一列有重复,只要不是全部主键列都重复便可
  2. 外键数据库

    • 若是一个字段(关键字)在一个关系中是主关键字,那么这个关键字被称为另外一个关系的外键,外键表示了两个关系之间的相关关系。数据结构

    • //外键约束的名称fk_class_id能够任意,FOREIGN KEY(class_id)指定了class_id做为外键,REFERENCES classes(id)指定了这个外键将关联到classes表的id列
      ALTER TABLE students
      ADD CONSTRAINT fk_class_id
      FOREIGN KEY (class_id)
      REFERENCES classes(id)
  3. 索引code

    • 索引是关系数据库中对某一列或多个列的值进行预排序的数据结构,经过使用索引,可让数据库系统没必要扫描整个表,而是直接定位到符合条件的记录排序

    • //建立了一个名为id_score的,使用列score的索引,索引的名称是任意的,若是索引有多列,能够在括号里依次写上
      ALTER TABLE students
      ADD INDEX id_score(score)/(name,score)
    • 索引的效率取决于索引列的值是否散列索引

    • 索引的优势是提升了查询效率,缺点是在插入,更新和删除记录时,须要同时修改索引,所以索引越多,速度相对也越慢字符串

    • 对于主键,关系数据库会自动对其建立主键索引,使用主键索引的效率是最高的,由于主键会保证绝对惟一it

查询数据
  1. 基本查询class

    • //查询某个表中的全部行
      //SELECT是关键字,表示将要执行一个查询,*表示全部列,FROM表示将要从哪一个表查询
      SELECT * FROM students
  2. 条件查询效率

    • SELECT * FROM students WHERE score>=50
      //通常形式
      SELECT * FROM <表名> WHERE <条件表达式>
    • where关键字后面的就是条件,score是列名,该列存储了学生的成绩,score>=50筛选除了指定条件的记录

    • AND,表示多个条件同时知足

      SELECT * FROM students WHERE score=55 AND gender = 'M'
    • OR,表示只须要知足一个条件

      SELECT * FROM students WHERE score=55 OR gende='M'
    • NOT,表示不符合该条件的记录

      SELECT * FROM students WHERE NOT score>=55
    • 要组合三个或者更多的条件能够使用( )来表示

      select * from students where not (score>=80 and  class_id=1)
    • 若是不加括号,条件运算按照NOT,AND,OR的优先级进行,加上括号能够改变优先级

    • 经常使用的条件表达式

      使用=判断相等 score=80 name='abc'
      使用>判断大于	score>80 name>'abc'	字符串比较根据ASCII码,中文比较根据数据库设置
      使用>=判断大于等于 score>=80
      使用<判断小于	score<80
      使用<=判断小于等于 score<=80
      使用<>或!=判断不相等 score <>/!=80
      使用LIKE判断类似 name LIKE 'ab%' %表示任意字符
  3. 投影查询

    • SELECT id, score points, name FROM students WHERE gender = 'M';
    • 使用SELECT * 表示查询表的全部列,使用SELECT 列1,列2,列3,则仅能够返回指定列,这种操做称为投影,select语句能够对结果集的列进行重命名

  4. 排序

    • 通常查询结果一般是按照id,也就是主键进行排序,若是要根据其余条件排序,能够使用ORDER BY关键字,默认是从低到高进行排序

      SELECT id, name, gender, score FROM students ORDER BY score
    • 加上DESC关键字能够降序

      SELECT id, name, gender, score FROM students ORDER BY score DESC;
    • 若是排序列有相同的数据须要进一步排序,能够继续添加列名

      //先按score列降序,若是有重复的则按照gender进行排序
      SELECT id, name, gender, score FROM students ORDER BY score DESC, gender;
  5. 分页

    • 分页其实是从结果集中截取出从第M+1条开始的N条数据

      //M是偏移量,向后移动M位,因此从M+1开始取数据
      SELECT id, name, gender, score FROM students 
      ORDER BY score
      limit N offset M
    • Offset是可选的,默认为0,limit超出范围也不会报错,随着M愈来愈大查询效率也会愈来愈低

  6. 聚合查询

    • 用来统计被查询数据的数据量

      SELECT COUNT(*) FROM students;
      //也能够给COUNT(*)设置一个别名
      SELECT COUNT(*) num FROM students;
    • 使用聚合查询一样也能加上条件查询语句

    • AVG、MAX、MIN表示查询出的数据中的平均值、最大值、最小值

    • 若是聚合查询的WHERE条件没有匹配到任何行,COUNT()会返回0,而SUM()AVG()MAX()MIN()会返回NULL

  7. GROUP BY(分组聚合)

    • //查询每一个class_id对应人数(每一个班级的人数)
      SELECT class_id, COUNT(*) num FROM students GROUP BY class_id;
    • //查询每一个班级男生女生的人数
      SELECT class_id, gender, COUNT(*) num FROM students GROUP BY class_id, gender;
相关文章
相关标签/搜索