aboutsummaryrefslogtreecommitdiff
path: root/doc/src/sgml/syntax.sgml
diff options
context:
space:
mode:
Diffstat (limited to 'doc/src/sgml/syntax.sgml')
-rw-r--r--doc/src/sgml/syntax.sgml145
1 files changed, 106 insertions, 39 deletions
diff --git a/doc/src/sgml/syntax.sgml b/doc/src/sgml/syntax.sgml
index 8372fa6b348..aa05367d163 100644
--- a/doc/src/sgml/syntax.sgml
+++ b/doc/src/sgml/syntax.sgml
@@ -1,5 +1,5 @@
<!--
-$Header: /cvsroot/pgsql/doc/src/sgml/syntax.sgml,v 1.83 2003/08/19 06:06:48 tgl Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/syntax.sgml,v 1.84 2003/08/31 17:32:20 petere Exp $
-->
<chapter id="sql-syntax">
@@ -26,6 +26,10 @@ $Header: /cvsroot/pgsql/doc/src/sgml/syntax.sgml,v 1.83 2003/08/19 06:06:48 tgl
<sect1 id="sql-syntax-lexical">
<title>Lexical Structure</title>
+ <indexterm>
+ <primary>token</primary>
+ </indexterm>
+
<para>
SQL input consists of a sequence of
<firstterm>commands</firstterm>. A command is composed of a
@@ -80,12 +84,18 @@ INSERT INTO MY_TABLE VALUES (3, 'hi there');
<title>Identifiers and Key Words</title>
<indexterm zone="sql-syntax-identifiers">
- <primary>identifiers</primary>
+ <primary>identifier</primary>
+ <secondary>syntax of</secondary>
</indexterm>
<indexterm zone="sql-syntax-identifiers">
- <primary>key words</primary>
- <secondary>syntax</secondary>
+ <primary>name</primary>
+ <secondary>syntax of</secondary>
+ </indexterm>
+
+ <indexterm zone="sql-syntax-identifiers">
+ <primary>key word</primary>
+ <secondary>syntax of</secondary>
</indexterm>
<para>
@@ -121,6 +131,7 @@ INSERT INTO MY_TABLE VALUES (3, 'hi there');
</para>
<para>
+ <indexterm><primary>identifier</primary><secondary>length</secondary></indexterm>
The system uses no more than <symbol>NAMEDATALEN</symbol>-1
characters of an identifier; longer names can be written in
commands, but they will be truncated. By default,
@@ -133,7 +144,7 @@ INSERT INTO MY_TABLE VALUES (3, 'hi there');
<para>
<indexterm>
<primary>case sensitivity</primary>
- <secondary>SQL commands</secondary>
+ <secondary>of SQL commands</secondary>
</indexterm>
Identifier and key word names are case insensitive. Therefore
<programlisting>
@@ -152,7 +163,7 @@ UPDATE my_table SET a = 5;
<para>
<indexterm>
- <primary>quotes</primary>
+ <primary>quotation marks</primary>
<secondary>and identifiers</secondary>
</indexterm>
There is a second kind of identifier: the <firstterm>delimited
@@ -207,7 +218,7 @@ UPDATE "my_table" SET "a" = 5;
<title>Constants</title>
<indexterm zone="sql-syntax-constants">
- <primary>constants</primary>
+ <primary>constant</primary>
</indexterm>
<para>
@@ -224,13 +235,13 @@ UPDATE "my_table" SET "a" = 5;
<title>String Constants</title>
<indexterm zone="sql-syntax-strings">
- <primary>character strings</primary>
- <secondary>constants</secondary>
+ <primary>character string</primary>
+ <secondary>constant</secondary>
</indexterm>
<para>
<indexterm>
- <primary>quotes</primary>
+ <primary>quotation marks</primary>
<secondary>escaping</secondary>
</indexterm>
A string constant in SQL is an arbitrary sequence of characters
@@ -286,8 +297,8 @@ SELECT 'foo' 'bar';
<title>Bit-String Constants</title>
<indexterm zone="sql-syntax-bit-strings">
- <primary>bit strings</primary>
- <secondary>constants</secondary>
+ <primary>bit string</primary>
+ <secondary>constant</secondary>
</indexterm>
<para>
@@ -316,8 +327,8 @@ SELECT 'foo' 'bar';
<title>Numeric Constants</title>
<indexterm>
- <primary>numeric</primary>
- <secondary>constants</secondary>
+ <primary>number</primary>
+ <secondary>constant</secondary>
</indexterm>
<para>
@@ -351,6 +362,9 @@ SELECT 'foo' 'bar';
</para>
<para>
+ <indexterm><primary>integer</primary></indexterm>
+ <indexterm><primary>bigint</primary></indexterm>
+ <indexterm><primary>numeric</primary></indexterm>
A numeric constant that contains neither a decimal point nor an
exponent is initially presumed to be type <type>integer</> if its
value fits in type <type>integer</> (32 bits); otherwise it is
@@ -363,13 +377,13 @@ SELECT 'foo' 'bar';
<para>
The initially assigned data type of a numeric constant is just a
- starting point for the type resolution algorithms. In most
- cases the constant will be automatically coerced to the most
- appropriate type depending on context. When necessary, you
- can force a numeric value to be interpreted as a specific
- data type by casting it. For example, you can force a numeric
- value to be treated as type <type>real</> (<type>float4</>)
- by writing
+ starting point for the type resolution algorithms. In most cases
+ the constant will be automatically coerced to the most
+ appropriate type depending on context. When necessary, you can
+ force a numeric value to be interpreted as a specific data type
+ by casting it.<indexterm><primary>type cast</primary></indexterm>
+ For example, you can force a numeric value to be treated as type
+ <type>real</> (<type>float4</>) by writing
<programlisting>
REAL '1.23' -- string style
@@ -382,8 +396,8 @@ REAL '1.23' -- string style
<title>Constants of Other Types</title>
<indexterm>
- <primary>data types</primary>
- <secondary>constants</secondary>
+ <primary>data type</primary>
+ <secondary>constant</secondary>
</indexterm>
<para>
@@ -431,8 +445,8 @@ CAST ( '<replaceable>string</replaceable>' AS <replaceable>type</replaceable> )
<title>Array constants</title>
<indexterm>
- <primary>arrays</primary>
- <secondary>constants</secondary>
+ <primary>array</primary>
+ <secondary>constant</secondary>
</indexterm>
<para>
@@ -468,7 +482,7 @@ CAST ( '<replaceable>string</replaceable>' AS <replaceable>type</replaceable> )
<title>Operators</title>
<indexterm zone="sql-syntax-operators">
- <primary>operators</primary>
+ <primary>operator</primary>
<secondary>syntax</secondary>
</indexterm>
@@ -600,8 +614,8 @@ CAST ( '<replaceable>string</replaceable>' AS <replaceable>type</replaceable> )
<title>Comments</title>
<indexterm zone="sql-syntax-comments">
- <primary>comments</primary>
- <secondary>in SQL</secondary>
+ <primary>comment</primary>
+ <secondary sortas="SQL">in SQL</secondary>
</indexterm>
<para>
@@ -636,7 +650,7 @@ CAST ( '<replaceable>string</replaceable>' AS <replaceable>type</replaceable> )
<title>Lexical Precedence</title>
<indexterm zone="sql-precedence">
- <primary>operators</primary>
+ <primary>operator</primary>
<secondary>precedence</secondary>
</indexterm>
@@ -828,6 +842,20 @@ SELECT 3 OPERATOR(pg_catalog.+) 4;
<sect1 id="sql-expressions">
<title>Value Expressions</title>
+ <indexterm zone="sql-expressions">
+ <primary>expression</primary>
+ <secondary>syntax</secondary>
+ </indexterm>
+
+ <indexterm zone="sql-expressions">
+ <primary>value expression</primary>
+ </indexterm>
+
+ <indexterm>
+ <primary>scalar</primary>
+ <see>expression</see>
+ </indexterm>
+
<para>
Value expressions are used in a variety of contexts, such
as in the target list of the <command>SELECT</command> command, as
@@ -903,7 +931,9 @@ SELECT 3 OPERATOR(pg_catalog.+) 4;
<listitem>
<para>
- Another value expression in parentheses, useful to group subexpressions and override precedence.
+ Another value expression in parentheses, useful to group
+ subexpressions and override
+ precedence.<indexterm><primary>parenthesis</></>
</para>
</listitem>
</itemizedlist>
@@ -927,6 +957,10 @@ SELECT 3 OPERATOR(pg_catalog.+) 4;
<sect2>
<title>Column References</title>
+ <indexterm>
+ <primary>column reference</primary>
+ </indexterm>
+
<para>
A column can be referenced in the form
<synopsis>
@@ -962,6 +996,15 @@ SELECT 3 OPERATOR(pg_catalog.+) 4;
<sect2>
<title>Positional Parameters</title>
+ <indexterm>
+ <primary>parameter</primary>
+ <secondary>syntax</secondary>
+ </indexterm>
+
+ <indexterm>
+ <primary>$</primary>
+ </indexterm>
+
<para>
A positional parameter reference is used to indicate a value
that is supplied externally to an SQL statement. Parameters are
@@ -993,6 +1036,11 @@ CREATE FUNCTION dept(text) RETURNS dept
<sect2>
<title>Operator Invocations</title>
+ <indexterm>
+ <primary>operator</primary>
+ <secondary>invocation</secondary>
+ </indexterm>
+
<para>
There are three possible syntaxes for an operator invocation:
<simplelist>
@@ -1017,6 +1065,11 @@ CREATE FUNCTION dept(text) RETURNS dept
<sect2>
<title>Function Calls</title>
+ <indexterm>
+ <primary>function</primary>
+ <secondary>invocation</secondary>
+ </indexterm>
+
<para>
The syntax for a function call is the name of a function
(possibly qualified with a schema name), followed by its argument list
@@ -1044,7 +1097,8 @@ sqrt(2)
<title>Aggregate Expressions</title>
<indexterm zone="syntax-aggregates">
- <primary>aggregate functions</primary>
+ <primary>aggregate function</primary>
+ <secondary>invocation</secondary>
</indexterm>
<para>
@@ -1123,10 +1177,14 @@ sqrt(2)
<sect2 id="sql-syntax-type-casts">
<title>Type Casts</title>
- <indexterm>
- <primary>data types</primary>
- <secondary>type casts</secondary>
- </indexterm>
+ <indexterm>
+ <primary>data type</primary>
+ <secondary>type cast</secondary>
+ </indexterm>
+
+ <indexterm>
+ <primary>type cast</primary>
+ </indexterm>
<para>
A type cast specifies a conversion from one data type to another.
@@ -1193,6 +1251,10 @@ CAST ( <replaceable>expression</replaceable> AS <replaceable>type</replaceable>
<sect2 id="sql-syntax-scalar-subqueries">
<title>Scalar Subqueries</title>
+ <indexterm>
+ <primary>subquery</primary>
+ </indexterm>
+
<para>
A scalar subquery is an ordinary
<command>SELECT</command> query in parentheses that returns exactly one
@@ -1221,10 +1283,10 @@ SELECT name, (SELECT max(pop) FROM cities WHERE cities.state = states.name)
<sect2 id="sql-syntax-array-constructors">
<title>Array Constructors</title>
- <indexterm>
- <primary>arrays</primary>
- <secondary>constructors</secondary>
- </indexterm>
+ <indexterm>
+ <primary>array</primary>
+ <secondary>constructor</secondary>
+ </indexterm>
<para>
An <firstterm>array constructor</> is an expression that builds an
@@ -1316,6 +1378,11 @@ SELECT ARRAY(SELECT oid FROM pg_proc WHERE proname LIKE 'bytea%');
<sect2 id="syntax-express-eval">
<title>Expression Evaluation Rules</title>
+ <indexterm>
+ <primary>expression</primary>
+ <secondary>order of evaluation</secondary>
+ </indexterm>
+
<para>
The order of evaluation of subexpressions is not defined. In
particular, the inputs of an operator or function are not necessarily