写在前面:最近又看了下数据库,先是看了之前看的《MySQL必知必会》,还是感觉书的逻辑混乱,看的有点混沌,所以又拿起了之前的《SQL基础教程》,以前是为了使用先看了前三章,现在又补了四到七章,所以前三章的总结更为全面一些,后面四章可能就水一点啦哈哈,在此分两拨把这本书的思维导图和总结发布出来吧

第一章 数据库和SQL

1.数据库(DB)

通过计算机加工而成的可以进行高效访问的数据集合称为数据库(Database,DB)

  • 1.1 数据库管理系统(DBMS)

    用来管理数据库的计算机称为数据库管理系统(Database Management System,DBMS)

    • 1.1.1 层次数据库(HDB)

      最古老的,通过将数据以层级结构(树形结构)的方式表示出来(Hierarchical Database)

    • 1.1.2 关系数据库(RDB)

      应用最广的,使用由行和列组成的二维表来管理数据(Relational Database)。
      使用专门的SQL(Structured Query Language,结构化查询语言)对数据进行操作。

      • (1)Oracle Database:甲骨文公司
      • (2)SQL Server:微软公司
      • (3)DB2 : IBM:IBM公司
      • (4)PostgreSQL:开源
      • (5)MySQL:开源
    • 1.1.3 面向对象数据库(OODB)、SML数据库(XMLDB)、键值存储系统(KVS)

2.数据库的结构

  • 2.1 RDBMS的常见系统结构—客户端 / 服务器类型(C/S类型)

    • 2.1.1 服务器

      接收其他程序发出的请求,并对该请求进行相应处理的程序(软件)。类似于委托方

    • 2.1.2 客户端

      向服务器发出请求的程序(软件)(SQL语句),或者是安装了该程序的设备(计算机)称之为客户端。类似于受托方。

  • 2.2 表的结构

    • 2.2.1 列(字段)

      列的约束相当严格,定义为输入什么只能输入对应的

    • 2.2.2 行(记录)

    • 2.2.3 单元格

      一个单元格中只能输入一个数据

3. SQL概要

  • 3.1 标准SQL

    国际标准化组织所制订的SQL标准

  • 3.2 SQL语句及其种类

    使用关键字、表名和列名等组成一条语句

    • (1)数据定义语言DDL

      Data Definiton Language,用来创建或删除储存数据用的数据库以及数据库中的表等对象。

      • CREATE:创建数据库和表等对象
      • DROP:删除数据库和表等对象
      • ALTER:修改数据库和表等对象的结构
    • (2)数据操作语言DML

      Data Manipulation Language,用来查询或者变更表中的记录。

      • SELECT:查询表中的数据
      • INSERT:向表中插入新数据
      • UPDATA:更新表中的数据
      • DELETE:删除表中的数据
    • (3)数据控制语言DCL

      Data Control Language,用来确认或者取消数据控库中对数据进行的变更。以及修改RDBMS用户的权限。

      • COMMIT:确认在数据库中的数据进行的变更
      • ROLLBACK:取消在数据库中的数据进行的变更
      • GRANT:赋予用户操作权限
      • REVOKE:取消用户的操作权限
  • 3.3 SQL的基本书写规则

    • 3.3.1 SQL的基本书写规则

      • (1)法则1-5 SQL语句要以分号(;)结尾
      • (2)SQL语句不区分关键字大小写
      • (3)常数(字符串、日期或者数字)的书写方式固定
      • (4)法则1-8 单词需要用半角空格或者换行符来分隔

4.表的创建

  • 4.1 数据库的创建

    • CREATE DATABASE <数据库名称>
  • 4.2 表的创建

    • CREAT TABEL <表名>
      (<列名> <数据类型> <该列所需约束>,
      <该表所需的约束1>,<该表所需的约束2>);
  • 4.3 命名规则

    • 只能使用半角英文字母、数字、下划线(_)作为数据库、表和列的名称
  • 4.4 数据类型的指定

    • 所有的列都必须指定数据类型,具体分为数字型、字符型和日期型

      • INTEGER型

        • 指定存储整数的列的数据类型(数字型),不能存小数
      • CHAR型

        • 指定存储字符串的列的数据类型(字符型)
          其中为定长字符串,即设置长度后会自动填充
      • VARCHAR型

        • 存储字符串的列的数据类型(字符串类型)
          其中为可变长字符串,不会自动填充
      • DATE型

        • 存储日期(年月日)的列的数据类型(日期型)
  • 4.5 约束的设置

    • 对列中存储的数据进行限制或者追加条件的功能,
      例如:NOT NULL 表示必须输入,不输入会出错:
      product_id CHAR(4) NOT NULL
    • 主键约束:PRIMARY KEY (product_id)
      其中键为在指定特定数据时使用的列的组合;
      主键即为可以特定一行数据的列。

5.表的删除和更新

  • 5.1 表的删除

    • 语法:DROP TABLE <表名>
  • 5.2 表(列)定义的更新(ALTER TABLE语句)

    • 语法:添加列的ALTER TABLE语句
      ALTER TABLE <表名> ADD COLUMN <列的定义>;
    • 语法:删除列的ALTER TABLE语句
      ALTER TABEL <表名> DROP COLUMN <列名>;
  • 5.3 表(行)定义的更新

    • BEGIN TRANSACTION;
      INSERT INTO <表名> VALUES (数据);
      COMMIT;

      • 其中的BEGIN TRANSACTION为插入行的指令语句,COMMIT为确认执行插入行的语句。
        在MySQL中,开始为START TRANSACTION,而Oracle和DB2中无需这指令语句

第二章 查询基础

1. SELECT语句基础

匹配查询或查询

  • 1.1 列的查询

    • 1.1.1 语法:SELECT <列名>,…
      FROM <表名>;
    • 1.1.2 子句:组成SQL语句的组成要素,如上两个子句
    • 1.1.3 顺序:查询结果中列的顺序和SELECT子句中的顺序相同
  • 1.2 查询出表中所有的列

    • SELECT *
      FROM <表名>
    • 使用星号后,就无法设定列的显示顺序了
  • 1.3 为列设定别名

    • 1.3.1 语法:SELECT product_id AS id,
      product name AS name
      FROM Product;
    • 1.3.2 特殊格式:可以在双引号中使用各种语言
  • 1.4 常数的查询

    • 1.4.1 常数分类:字符串常数(‘商品’);数字常数(38);日期常数(‘2009-02-24’)
    • 1.4.2 使用AS关键字设置常数
      SELECT ‘商品’ AS string, 38 AS number, ‘2009-02-24’ AS date, product_id, product_name
      FROM Product
  • 1.5 从结果中删除重复行

    • 1.5.1 常规的重复行搜索
      SELECT DISTINCT product_type
      FROM Product; //删除type里的重复数据
    • 1.5.2 对NULL的特殊情况
      SELECT DISTINCT <列名>
      FROM <表名>;
      //存在NULL的数据会被执行成为一行
    • 1.5.3 对多行/列运算合并同行/列的数据
      SELECT DISTINCT <列名1>, <列名2>
      FROM <表名>;
    • 1.5.4 规则:DISTINCT关键字只能用在第一个列名之前
  • 1.6 根据WHERE语句来选择记录

    • 1.1.1 WHERE:指定查询数据的条件
      SELECT <列名>,…
      FROM <表名>,…
      WHERE <条件表达式>;
    • 1.1.2 规则:
      可以不选取作为查询条件的列;
      SQL中子句的书写顺序是固定的,不能随意更改。
  • 1.7 注释

    • 1.7.1 单行注释:–
    • 1.7.2 多行注释:/* */

2. 算术运算符和比较运算符

  • 2.1 算术运算符

    • 2.1.1 语法
      SELECT product_name, sale_price,
      sale_price * 2 AS “sale_price * 2”
      FROM Product;
    • 2.1.2 规则:
      运算是以进行运算的对象为行/列来对应执行;
      SQL语句中可以使用四则运算和括号
  • 2.2 注意NULL

    • 所有包含NULL的计算,结果肯定都是NULL
  • 2.3 比较运算符

    • 其使用方式就是标准的比较运算符,除了不等于 为特殊符号’<>’(可以类比于正常运算符!=)
  • 2.4 字符串比较

  • 2.5 NULL字符的比较

3.逻辑运算符

  • 3.1 NOT运算符

    • 用来表示非的意思,如!和~,但是最好不要用于比较语句
  • 3.2 AND和OR运算符

    • 3.2.1 AND即|,表示或者
    • 3.2.2 OR即&,表示并且
    • 3.2.3 文氏图:将集合(事物的聚集)的关系通过更加容易理解的图形进行可视化展示
  • 3.3 通过括号强化处理

    • 用法与传统语言类似
  • 3.4 逻辑运算符和真值

    • AND运算符的逻辑计算为逻辑积,OR的为逻辑和
  • 3.5 含有NULL时的真值

    • SQL中的逻辑为三值逻辑,即含有NULL时逻辑将变成不确定型(UNKNOWKM)

第三章 聚合和排序

3.1 对表进行聚合查询

  • 3.1.1 聚合函数

    • 用于汇总的函数被称为聚合函数或者聚集函数 COUNT,SUM,AVG,MAX,MIN
    • 所谓的聚合,就是将多行汇总为一行。不能被用于WHERE语句中
  • 3.1.2 计算表中数据的行数

    • SELECT COUNT(*)
      FROM Product;
    • 此处的输入(*)为参数/parameter,输出值为返回值
  • 3.1.3 计算NULL之外的数据的行数

    • 对于COUNT函数来说,参数列不同计算的结果也会不同,如:
      SELECT COUNT(purchase_price),COUNT(*)
      FROM Product;
      这里计算的所有行数和进货价格的行数不同
  • 3.1.4 计算合计值

    • SELECT SUM(purchase_price)
      FROM Product;
  • 3.1.5 计算平均值

    • SELECT AVG(purchase_price)
      FROM Product;
  • 3.1.6 计算最大值和最小值

    • SELECT MAX(purchase_price),MIN(sale_price),MAX(regist_data),MIN(regist_data)
      FROM Product;
  • 3.1.7 使用聚合函数删除重复值(DINSTINCT)

    • SELECT COUNT(DISTINCT product_type)
      FROM Product;
    • SELECT SUM(DISTINCT sale_price), SUM(sale_price)
      FROM Product; //结果不同,因为售价中重复数据

3.2 对表进行分组

  • 3.2.1 GROUP BY子句

    • SELECT <列名1>,<列名2>,<列名3>,…
      FROM <表名>
      GROUP BT <列名1>,<列名2>,<列名3>,…;
    • SELECT product_type, COUNT(*)
      FROM Product
      GROUP BY product_type;
    • GROUP BY子句中指定的列为聚合键或者分组列
    • 子句的书写顺序(暂定):
      1.SELECT→2.FROM→3.WHERE→4.GROUP BY
  • 3.2.2 聚合键中包含NULL时的情况

    • SELECT purchase_price, COUNT(*)
      FROM Product
      GROUP BY purchase_price;
      //会将NULL行也单独算进来的
  • 3.2.3 使用WHERE子句时GROUP BY的执行结果

    • SELECT <列名1>,<列名2>,<列名3>,…
      FROM <表名>
      WHERE
      GROUP BY <列名1>,<列名2>,<列名3>,…;
    • GROUP BY和WHERE并用时SELECT语句的执行顺序如下:(与书写顺序不同)
      FROM(表名)→WHERE(限制条件)→GROUP BY(分组)→SELECT(查询)
  • 3.2.4 与聚合函数和GROUP BY子句有关的常见错误

    • (1)在SELECT子句中书写了多余的列:
      把聚合键之外的列名书写在SELECT子句之中了
    • (2)在GROUP BY子句中写了列的别名:
      对于PGSQL和MYSQL都没有问题
    • (3)GROUP BY子句的结果排序:
      完全随机,全是偶然情况
    • (4)在WHERE子句中使用聚合函数:
      WHERE表示对表的限制条件,而不是对于组的

3.3 为聚合结果指定条件

  • 聚合函数可以在SELECT子句、HAVING子句和ORDER BY子句中使用

  • 3.3.1 HAVING子句

    • SELECT <列名1>,<列名1>,<列名1>,…
      FROM <列名1>
      GROUP BY <列名1>,<列名1>,<列名1>,…
      HAVING <分组结果对应的条件>
    • 使用HAVING子句时要写在GROUP BY子句之后,执行顺序如下:
      SELECT→FROM→WHERE→GROUP BY→HAVING
  • 3.3.2 HAVING子句的构成要素

    • 常数,聚合函数,GROUP BY子句中指定的列名(即聚合键)
    • HAVING可以理解为GROUP BY分组之后,对于组的SELECT语句
  • 3.3.3 HAVING与WHERE子句

    • WHERE子句即指定行所对应的条件;
      HAVING子句即指定组所对应的条件

3.4 对查询结果进行排序

  • 3.4.1 ORDER BY子句

    • SELECT <列名1>,<列名2>,<列名3>,…
      FROM <表名>
      ORDER BY <排序基准列>,<排序基准列>,…
    • ORDER BY子句中书写的列的名称为排序键,子句的书写顺序如下:
      1.SELECT子句→2.FROM子句→3.WHERE子句→4.GROUP BY子句→
      5.HAVING子句→6.ORDER BY子句
  • 3.4.2 指定升序或降序

    • ORDER BY <排序基准列>,<排序基准列> ASC/DESC
      其中ASC为上升的,DESC为下降的,表示升序和降序
    • ASC和DESC是以列为单位指定的,所以可以指定有的列升序,有的列降序
  • 3.4.3 指定多个排序键

    • 有多个排序基准列时,规则是优先使用左侧的键,如果该列存在相同值的话,再接着参考右侧的值
  • 3.4.4 NULL的顺序

    • NULL的排序根据DBMS的不同,会汇集在开头或者末尾。PGSQL的规则为NULL为最小数
  • 3.4.5 在排序键中使用别名

    • 排序键中使用别名是可行的,原因在于执行顺序:
      FROM→WHERE→GROUP BY→HAVING→SELECT→ORDER BY
  • 3.4.6 ORDER BY子句中可以使用的列

  • 3.4.7 不要使用列编号

一到三章思维导图

更多推荐

【SQL基础教程】【一至三章】总结归纳与思维导图