postgres
查看版本
SELECT version();
SHOW server_version;
SQL语言
-- 窗口函数
SELECT salary, sum(salary) OVER (ORDER BY salary) FROM empsalary;
SELECT sum(salary) OVER w, avg(salary) OVER w
FROM empsalary
WINDOW w AS (PARTITION BY depname ORDER BY salary DESC);
-- 事务
BEGIN;
SAVEPOINT my_savepoint;
ROLLBACK TO my_savepoint;
COMMIT;
-- 继承目前还不支持约束和外键
CREATE TABLE capitals (
state char(2) UNIQUE NOT NULL
) INHERITS (cities);
SELECT name, elevation FROM ONLY cities
SQL语法
词法结构
标识符
- 引用标识符:“my_table”(支持空格和双引号)
- 未引用标识符总是折叠成小写
常量
字符串常量
SELECT 'a''s'; --单引号
SELECT 'a' 's'; --错误
SELECT 'a'
's'; --被连接在一起
--美元引用字符串中,单引号可以在不被转义的情况下使用
$$Dianne's horse$$
$SomeTag$Dianne's horse$SomeTag$
位串常量
- B’1001’ X’1FF’
数字常量
- integer->bigint->numeric
其他类型常量
type ‘string’ --无法转换数组类型
‘string’::type
CAST ( ‘string’ AS type )
值表达式
- 位置参数$number
聚合表达式
- 只能出现在SELECT或HAVING中
- SELECT string_agg(ALL a,‘,’);–默认ALL
- SELECT string_agg(DISTINCT a,‘,’);
- SELECT count(*);
- 大部分聚合函数忽略空值
CREATE TABLE t AS SELECT generate_series(1,20);
SELECT percentile_disc(ARRAY[0.5,1]) WITHIN GROUP (ORDER BY val) FROM t
- [ FILTER ( WHERE filter_clause ) ]
SELECT
count(*) AS unfiltered,
count(*) FILTER (WHERE i < 5) AS filtered
FROM generate_series(1,10) AS s(i);
窗口函数
- 只能出现在SELECT或ORDER BY中
类型转换
- CAST ( expression AS type )
- expression::type
- typename ( expression ) – 不建议使用
排序规则
- COLLATE 重载一个表达式的排序规则
标量子查询
- 返回一行一列,可以从周围的查询中引用变量,这些变量将在子查询中视作常量
- SELECT name, (SELECT max(pop) FROM cities WHERE cities.state = states.name) FROM states;
数组构造器
- SELECT ARRAY[1,2,3];
- SELECT ARRAY(SELECT val FROM t);
- 数组的每个成员必须拥有相同数据类型
- 多维数组维度必须相同
行构造器
- SELECT ROW(1,2.5,‘this is a test’);
- ROW是可选的
- 可以使用t.*的语法
- 可以比较两个行值,也可以使用IS NULL,IS NOT NULL测试行是否为空
表达式计算规则
- 没有任何固定顺序
- 换成CASE语句,也无法阻止常量子表达式的提早计算,无法阻止聚合函数的计算