增删改查
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语句就会出错。
事务
事务从何时开始:
- 每条SQL语句就是一个事务
- 直到用户执行COMMIT或者ROLLBACK为止算作一个事务
ACID特性:
持久性、隔离性、原子性、一致性
视图
试图其实就是一组select语句,对原数据库进行查询来实现数据库中某组数据的固定访问
定义视图时不能使用order by的
一些更新视图的条件:
- SELECT子句中未使用DISTINCT
- FROM子句中只有一张表
- 未使用GROUP BY子句
- 未使用HAVING子句
上述这些限制主要是限制数据聚合的,但是书中描述的错误来源于需要保持数据的一致性,所以当你使用原项中的部分列数据填充表时无法填充其他列的数据,而反之是不是只有在所有列都填充的情况下才可以更新视图呢?
postgre中将视图作为只读是不是更加符合视图本身的定义呢?
关联子查询中的where到底是如何链接两个表的
在select中使用聚合函数时,是对其分组进行聚合,需要使用group by分组,但是如果只进行聚合查询也可以
函数谓词
各个数据库中有关获取时间的方式天差地别
替换字符串函数是通过匹配内容替换的
谓词和函数的区别是返回值为真值
in和not in无法选取null元素
in和exist谓词哪里不同
简单CASE就是将需要判断的列名提到case后面,将常量放在when后
集合运算
除法运算
SQL高级处理
只有select语句的最后order by才是排序,窗口函数后的orderby只是指定窗口函数执行的顺序
ROLLUP实现的聚合效果到底是到哪一步为止
CUBE是对聚合键进行组合后的每一个结果进行集合,包括整张表