SQL基础教程

作者
MICK
阅读状态
已读
书籍类型
已读页数
总计页数
开始时间
结束时间
阅读进度
封面
个人评分
Property

增删改查

SQL中的三值逻辑
NULL(UNKNOWN)、真、假
count(*)统计NULL,其他聚合函数对列操作时不统计
不能对NULL使用比较运算符,对NULL使用任何算数运算符结果都为NULL
where是对行进行筛选,而having是对group
from→where→groupby→select
select→from→where→groupby→having??
where和having执行速度
group必须是select中的聚合键
ordered可以不是select中的聚合键
当省略列名插入时如果是设置了NOT NULL的列,INSERT语句就会出错。

事务

事务从何时开始:
  1. 每条SQL语句就是一个事务
  1. 直到用户执行COMMIT或者ROLLBACK为止算作一个事务
ACID特性:
持久性、隔离性、原子性、一致性

视图

试图其实就是一组select语句,对原数据库进行查询来实现数据库中某组数据的固定访问
定义视图时不能使用order by的
一些更新视图的条件:
  1. SELECT子句中未使用DISTINCT
  1. FROM子句中只有一张表
  1. 未使用GROUP BY子句
  1. 未使用HAVING子句
上述这些限制主要是限制数据聚合的,但是书中描述的错误来源于需要保持数据的一致性,所以当你使用原项中的部分列数据填充表时无法填充其他列的数据,而反之是不是只有在所有列都填充的情况下才可以更新视图呢?
postgre中将视图作为只读是不是更加符合视图本身的定义呢?
关联子查询中的where到底是如何链接两个表的
在select中使用聚合函数时,是对其分组进行聚合,需要使用group by分组,但是如果只进行聚合查询也可以

函数谓词

各个数据库中有关获取时间的方式天差地别
替换字符串函数是通过匹配内容替换的
谓词和函数的区别是返回值为真值
in和not in无法选取null元素
in和exist谓词哪里不同
简单CASE就是将需要判断的列名提到case后面,将常量放在when后

集合运算

除法运算

SQL高级处理

只有select语句的最后order by才是排序,窗口函数后的orderby只是指定窗口函数执行的顺序
ROLLUP实现的聚合效果到底是到哪一步为止
CUBE是对聚合键进行组合后的每一个结果进行集合,包括整张表