看了《SQL进阶教程》之后,感觉很不错,趁618入手了这本《SQL基础教程》,希望有什么可以让人眼前一亮的知识。

  • 将大量数据保存起来,通过计算机加工而成的可以进行高效访问的数据集合称为数据库。
  • DCL(Data Control Language,数据控制语言)用来确认或者取消对数据库中的数据进行的变更。比如:COMMITROLLBACKGRANTREVOKE
  • 列的数据类型是CHAR型,字符串以定长字符串的形式存储在被指定为CHAR型的列中。所谓定长字符串,就是当列中存储的字符串长度达不到最大长度的时候,使用半角空格进行补足。
  • VARCHAR型是可变长字符串
  • 在使用DISTINCT时,NULL也被视为一类数据,NULL存在于多行中时,也会被合并为一条NULL数据。
  • DISTINCT关键字只能用在查询的第一个列名之前。
  • 算术运算符有NULL时,结果都是NULL。比如NULL/0不会发生错误,结果是NULL
  • 比较字符串以字典顺序进行比较。
  • 用于汇总的函数称为聚合函数聚集函数,就是将多行汇总为一行。
  • 不使用GROUP BY子句时,是将表中的所有数据作为一组来对待的。
  • 把聚合键之外的列名书写在SELECT子句之中会出现错误,MYSQL除外。
  • 实际上,只有SELECT子句和HAVING子句,以及ORDER BY子句中能使用COUNT等聚合函数。(执行顺序在GROUP BY之后的)
  • HAVING子句中能够使用的3种要素是:①常数;②聚合函数;③GROUP BY子句中指定的列名(即聚合键)。都是对组来说是唯一值得。
  • SELECT执行的顺序:FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY;这也是为什么ORDER BY可以使用列的别名的原因。
  • 多行INSERT可以同时插入多行数据,但是ORACLE并不支持,ORACLE使用如下实现多行插入:
  • INSERT ALL INTO table1() VALUES() INTO table2() VALUES() SELECT 1 FROM dual;
  • INSERT ALL WHEN condition1 THEN INTO table1 VALUES() WHEN condition2 THEN INTO table2 VALUES() SELECT * FROM table
  • INSERT ALL WHEN condition1 THEN INTO table1 VALUES() ELSE INTO table2 VALUES() SELECT * FROM table
  • 事务就是需要在同一个处理单元中执行的一系列更新处理的集合。
  • MySQL的事务开始语句是START TRANSACTION,ORACLE没有;事务的结束语句都是:COMMITROLLBACK
  • 实际上,几乎所有的数据库产品的事务都无需开始指令。这是因为大部分情况下,事务在数据库连接建立时就已经悄悄开始了,并不需要用户再明确发出开始指令。例如,使用ORACLE时,数据库建立连接以后,第一条SQL执行的同时,事务就已经悄悄开始了。
  • 通常有两种模式:①每条SQL就是一个事务。比如MYSQL。②直到用户执行COMMIT或者ROLLBACK为止算作一个事务。比如ORACLE。所以ORACLE执行了DELETE也可以通过ROLLBACK回滚。
  • 事务的一致性:指的是事务中包含的处理要满足数据库提前设置的约束。
  • 视图不保存实际的数据。实际上视图保存的是SELECT语句。
  • 视图中的数据会随着原表的变化自动更新,视图归根到底是SELECT语句,所谓“参照视图”也就是“执行SELECT语句”的意思。
  • 多重视图会降低SQL的性能,应该避免在视图的基础上创建视图。
  • 定义视图时,不要使用ORDER BY。
  • 视图只有满足以下条件,才能被更新:①SELECT子句中没有使用DISTINCT。②FROM子句中只有一张表。③未使用GROUP BY子句。④未使用HAVING子句。
  • 子查询就是一张一次性视图。
  • 标量子查询必须而且只能返回一行一列的结果。就是返回单一值的查询,所以可以使用=<>等进行比较。
  • CAST(转换前的值 AS 想要转换的数据类型)
  • COALESCE函数会返回可变参数中左侧开始第一个不是NULL的值。
  • 谓词的返回值是真值(TRUE、FALSE、UNKNOWN)。
  • 内联结是交叉联结的一部分,“”也可以理解为“包含在交叉联结结果中的部分”。相反,外联结的“”可以理解为“交叉联结结果之外的部分”。
  • 窗口函数也称作OLAP函数,意思是对数据库数据进行实时分析处理。
  • 能够作为窗口函数使用的函数:①聚合函数(SUM、AVG、COUNT、MAX、MIN)。②RANK、DENSE_RANK、ROW_NUMBER等专用窗口函数
  • PARTITION BY子句并不具备GROUP BY子句的汇总功能。
  • 通过PARTITION BY分组后的记录集合称为窗口。此处的窗口并非“窗户”的意思,而是代表范围。
  • 窗口函数只写在SELECT子句中。在SELECT子句外使用窗口函数是没有意义的。
  • 在DBMS内部,窗口函数是对WHERE子句或者GROUP BY子句处理后的“结果”进行的操作。
  • 窗口函数指定范围:ROWS n PRECENDING(从自身往前n行,加上自己一共n+1行),ROWS n FOLLOWING(从自身往后n行,加上自己一共n+1行),ROWS BETWEEN n PRECENDING AND n FOLLOWING(自身前后n行,加上自己一共2n+1行)。
  • OVER子句中的ORDER BY只是用来决定窗口函数按照什么样的顺序进行计算的,对结果的排列顺序并没有影响。
  • ROLLUP可以同时得出合计和小计。会同时得出①GROUP BY()GROUP BY(colum1)GROUP BY(colum1,colum2)GROUP BY(colum1...column)的汇总。
  • 使用GROUPING函数能够简单地分辨出原始数据中的NULL和超级分组记录中的NULL。
  • CUBE函数是在ROLLUP的基础上增加GROUP BY中的每个单独聚合键汇总结果。

更多推荐

《SQL基础教程》读书小记