postgresql

Reference:

SQL 基础教程读书笔记

p14

SQL 语句种类:

  1. DDL(Data Definition Language, 数据定义语言) CTEATE; DROP; ALTER.
  2. DML(Data Munipulation Language, 数据操作语言) SELECT; INSERT; UPDATE; DELETE.
  3. DCL(Data Control Language, 数据控制语言) COMMIT; ROLLBACK; GRANT; REVOKE.

p21

数据库名称,表名和列名都只能用半角英文,半角数字,下划线.

p22

SQL 最基本的数据类型:

p24 约束


p44 注释

p65 三值逻辑,特殊对待 NULL


p69

5 个常用函数: COUNT, SUM, AVG, MAX, MIN.

p74 聚合函数会将 NULL 排除在外,除了 COUNT(*)

p79

使用聚合函数和 GROUP BY 子句时注意以下四点:

p89

WHERE 子句用来指定行记录的条件,HAVING 用来指定组的条件.

p95

WHERE 子句和 HAVING 子句的执行速度,WHERE 子句快.

p101

使用 HAVING 子句时 SELECT 语句的顺序: FROM-WHERE-GROUP BY-HAVING-SELECT-ORDER BY


p107

INSERT INTO TABLE_NAME (列名,列名,...) VALUES(值1, 值2...)

对表中所有列插入时可省略表名后面的列清单.

在 VALUE 子句中指定 DEFAULT 关键字来显式插入默认值;省略语句中的列名,就会自动 设定为该列的默认值(没有默认值时会设定为 NULL).

p117

DROP TABLE TABLE_NAME 将表完全删除 DELET FROM TABLE_NAME 会留下表,而删除表中的全部数据 DELETE FROM TABLE_NAME WHERE <...>

p120

TRUNCATE TABLE_NAME 删除全部数据,不能使用 WHERE 子句,速度比 DELETE 快.

p121

UPDATE TABLE_NAME SET <列名> = <表达式> WHERE <条件>; 同时更新多列时,可以在 UPDATE 语句中的 SET 子句中,使用逗号分隔更新对象的多个列.

p126

事务是需要在同一个处理单元中执行的一系列更新处理的集合. 事务处理的终止命令包括 COMMIT(提交处理)和 ROLLBACK(取消处理). DBMS 事务具有原子性(Atomicity),一致性(Consistency),隔离性(Isolation), 持久性(Durability), ACID

p127

事务语法

BEGIN TRANSACTION
...
...DML
...
COMMIT/ROLLBACK

p137

从 SQL 角度说,视图和表是相同的.两者的区别在于表中保存的是真实的数据,视图中的 保存的是 SELECT 语句.

p138

视图的优点: 1.视图无需保存数据,节省存储设备的空间 2.可以将频繁使用的 SELECT 语句 保存成视图.

p139

CREATE VIEW VIEW_NAME(视图列名1 视图列名2 ...)
AS
<SELECT 语句>

p142

多重视图(from VIEW_NAME),多重视图会降低 SQL 性能.

p142

视图的限制:1. 定义视图不能使用 ORDER BY 2. 对视图进行更新.

视图可以更新的条件:

  1. SELECT 语句中未使用 DISTINCT
  2. FROM 子句中只有一张表
  3. 未使用 GROUP BY
  4. 未使用 HAVING

p145

由于 postgresql 中视图初始设定为只读,需要使用代码来允许更新操作,mysql 中不用.

CREATE OR REPALCE RULE insert_rule
AS ON INSERT
TO VIEW_NAME DO INSTEAD
INSERT INTO TABLE_NAME (
    new.列名,
    new.列名,
    ...);

p147

使用 DROP VIEW VIEW_NAME CASCADE; 来删除以视图为基础创建出来的多重视图.

p148

子查询就是一次性的视图,但是在 SELECT 语句执行完毕之后就会消失。

标量子查询就是只能返回一行一列的子查询

p156 关联子查询, 关联子查询的的结合条件要写在子查询中.


p165

p186

谓词:需要满足特定条件的函数(返回值是真值),有

LIKE   % 0字符以上的任意字符串 _  任意一个字符串
BETWEEN
IS NULL, IS NOT NULL
IN 可以使用子查询作为参数; 子查询的返回值或指定值中不能包含 NULL,否则结果通常为空.
EXITST. 通常指定关联子查询作为 EXIST 的参数,通常会使用 SELECT *

p202

CASE 表达式中的 ELSE 子句最好不要省略;END 不能省略

CASE WHEN <判断表达式> THEN <表达式>
     WHEN <判断表达式> THEN <表达式>
     ...
     ELSE <表达式>
END

p213

集合运算: UNION, INTERSECT, EXCEPT. 使用 ALL 保留重复项.

集合运算注意事项: 作为运算对象的列数相同;列的类型一致;可以使用任何 SELECT 语句, ORDER BY 只能在最后使用一次.

p222

UNION 结果是纵向变长,JOIN 是横向变长.


p245

窗口函数也陈为 OLAP 函数(OnLine Analytical Processing).

p246

<窗口函数> OVER ([PARTITION BY <列清单>] ORDER BY <排序用清单>)

窗口函数大体可以分为: 能够作为窗口函数的聚合函数(SUM, AVG, COUNT, MAX, MIN) RANK(1 1 1 4), DENSE_RANK(1 1 1 2), ROW_NUMBER(1 2 3 4) 等专用窗口函数.

p252

只能在 SELECT 语句中使用.

使用窗口函数使用的聚合函数, 累计

p254

框架 PRECEDING FOLLOWING

p260

GROUPING 运算符