PosegreSQL基础回顾(第 4 章 SQL语法)
来源:http://www.postgres.cn/docs/11/4.1.1.?标识符和关键词SQL标识符和关键词必须以一个字母( 系统中一个标识符的长度不能超过? 这里还有第二种形式的标识符:受限标识符或被引号修饰的标识符。它是由双引号( 4.1.2.?常量在PostgreSQL中有三种隐式类型常量:字符串、位串和数字。 为了在一个字符串中包括一个单引号,可以写两个相连的单引号,例如 在SQL中,一个字符串常量是一个由单引号( 两个只由空白及至少一个新行分隔的字符串常量会被连接在一起,并且将作为一个写在一起的字符串常量来对待。例如: SELECT 'foo'
'bar';
等同于:SELECT 'foobar'; 但是:SELECT 'foo' 'bar'; 则不是合法的语法(这种有些奇怪的行为是SQL指定的,PostgreSQL遵循了该标准)。 位串常量看起来像常规字符串常量在开引号之前(中间无空白)加了一个 4.1.3.?操作符一个操作符名是最多 4.1.4.?特殊字符一些不是数字字母的字符有一种不同于作为操作符的特殊含义。这些字符的详细用法可以在描述相应语法元素的地方找到。这一节只是为了告知它们的存在以及总结这些字符的目的。
4.2.2.?位置参数一个位置参数引用被用来指示一个由 SQL 语句外部提供的值。参数被用于 SQL 函数定义和预备查询中。某些客户端库还支持独立于 SQL 命令字符串来指定数据值,在这种情况中参数被用来引用那些线外数据值。一个参数引用的形式是: $number CREATE FUNCTION dept(text) RETURNS dept AS $$ SELECT * FROM dept WHERE name = $1 $$ LANGUAGE SQL; 这里 4.2.7.?聚集表达式一个聚集表达式表示在由一个查询选择的行上应用一个聚集函数。一个聚集函数将多个输入减少到一个单一输出值,例如对输入的求和或平均。? 4.2.8.?窗口函数调用一个窗口函数调用表示在一个查询选择的行的某个部分上应用一个聚集类的函数。和非窗口聚集函数调用不同,这不会被约束为将被选择的行分组为一个单一的输出行 — 在查询输出中每一个行仍保持独立。不过,窗口函数能够根据窗口函数调用的分组声明( 4.2.9.?类型转换一个类型造型指定从一种数据类型到另一种数据类型的转换。PostgreSQL接受两种等价的类型造型语法: CAST ( expression AS type ) expression::type?
如果一个值表达式必须产生的类型没有歧义(例如当它被指派给一个表列),通常可以省略显式类型造型,在这种情况下系统会自动应用一个类型造型。 4.2.10.?排序规则表达式
expr COLLATE collation 这里 4.2.11.?标量子查询一个标量子查询是一种圆括号内的普通 例如,下列语句会寻找每个州中最大的城市人口: SELECT name,(SELECT max(pop) FROM cities WHERE cities.state = states.name)
FROM states;?
?4.2.12.?数组构造器一个数组构造器是一个能构建一个数组值并且将值用于它的成员元素的表达式。一个简单的数组构造器由关键词 SELECT ARRAY[1,2,3+4]; array --------- {1,7} (1 row) 4.2.13.?行构造器一个行构造器是能够构建一个行值(也称作一个组合类型)并用值作为其成员域的表达式。一个行构造器由关键词 SELECT ROW(1,2.5,'this is a test'); ?当在列表中有超过一个表达式时,关键词 4.2.14.?表达式计算规则子表达式的计算顺序没有被定义。特别地,一个操作符或函数的输入不必按照从左至右或其他任何固定顺序进行计算。 此外,如果一个表达式的结果可以通过只计算其一部分来决定,那么其他子表达式可能完全不需要被计算。例如,如果我们写: SELECT true OR somefunc(); 那么 SELECT somefunc() OR true; 注意这和一些编程语言中布尔操作符从左至右的“短路”不同。 4.3.?调用函数?允许带有命名参数的函数被使用位置或命名记号法调用。命名记号法对于有大量参数的函数特别有用,因为它让参数和实际参数之间的关联更明显和可靠。在位置记号法中,书写一个函数调用时,其参数值要按照它们在函数声明中被定义的顺序书写。在命名记号法中,参数根据名称匹配函数参数,并且可以以任何顺序书写。对于每一种记法,还要考虑函数参数类型的效果,这些在第?10.3?节有介绍。 在任意一种记号法中,在函数声明中给出了默认值的参数根本不需要在调用中写出。但是这在命名记号法中特别有用,因为任何参数的组合都可以被忽略。而在位置记号法中参数只能从右往左忽略。 PostgreSQL也支持混合记号法,它组合了位置和命名记号法。在这种情况中,位置参数被首先写出并且命名参数出现在其后。 下列例子将展示所有三种记号法的用法: CREATE FUNCTION concat_lower_or_upper(a text,b text,uppercase boolean DEFAULT false) RETURNS text AS $$ SELECT CASE WHEN $3 THEN UPPER($1 || ' ' || $2) ELSE LOWER($1 || ' ' || $2) END; $$ LANGUAGE SQL IMMUTABLE STRICT; 函数 4.3.2.?使用命名记号在命名记号法中,每一个参数名都用 SELECT concat_lower_or_upper(a => 'Hello',b => 'World');
concat_lower_or_upper
-----------------------
hello world
(1 row)
再次,参数 SELECT concat_lower_or_upper(a => 'Hello',b => 'World',uppercase => true);
concat_lower_or_upper
-----------------------
HELLO WORLD
(1 row)
SELECT concat_lower_or_upper(a => 'Hello',uppercase => true,b => 'World');
concat_lower_or_upper
-----------------------
HELLO WORLD
(1 row)
为了向后兼容性,基于 ":=" 的旧语法仍被支持: SELECT concat_lower_or_upper(a := 'Hello',uppercase := true,b := 'World');
concat_lower_or_upper
-----------------------
HELLO WORLD
(1 row)
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |