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


    SQL复习

    几个关键词
    1. 主键

      • 在关系表中,任意两条记录不能重复(这里的不能重复不是指两条记录不完全相同,而是能够通过某个字段唯一区分出不同的记录),这个字段被称为主键
      • 选取主键的一个基本原则是,不使用任何业务相关的字段作为主键,一般把这个字段命名为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. 索引

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

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

      • 索引的优点是提高了查询效率,缺点是在插入,更新和删除记录时,需要同时修改索引,因此索引越多,速度相对也越慢

      • 对于主键,关系数据库会自动对其创建主键索引,使用主键索引的效率是最高的,因为主键会保证绝对唯一

    查询数据
    1. 基本查询

      • //查询某个表中的所有行
        //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;
        
        
  • 相关阅读:
    VS2013使用scanf、gets及字符串函数编译报错error C4996: 'scanf': This function or variable may be unsafe. 原因及解决方案
    关于vs2013与office系列软件一起安装出现bug的情况描述以及解决办法——打开vs2013鼠标不动/动不了
    武汉华师驾校学车笔记_纪实
    vs2013由修改模式改为输入模式。
    解析:求最大公约数的“辗转相除法原理”
    关于scanf与scanf_s的区别,以及用scanf编译出错并且提示找不到可执行文件.exe的解决办法。
    [C编译器]在VS中编译调试C程序
    使用vs编译程序选择新建”空项目“与”win32控制台应用程序“的区别。
    AngularJS+Ionic开发-1.搭建开发环境
    PetaPoco源代码学习--3.Sql类
  • 原文地址:https://www.cnblogs.com/chenprice/p/12913828.html
Copyright © 2020-2023  润新知