mirror of
				https://github.com/postgres/postgres.git
				synced 2025-10-29 22:49:41 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			350 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			350 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| .\" This is -*-nroff-*-
 | ||
| .\" XXX standard disclaimer belongs here....
 | ||
| .\" $Header: /cvsroot/pgsql/doc/man/Attic/sql.l,v 1.1.1.1 1996/08/18 22:14:28 scrappy Exp $
 | ||
| .TH INTRODUCTION SQL 11/5/95 Postgres95 Postgres95
 | ||
| .SH "Section 4 \(em SQL Commands (COMMANDS)"
 | ||
| .SH "General Information"
 | ||
| .SH DESCRIPTION
 | ||
| The following is a description of the general syntax of SQL.
 | ||
| Individual SQL statements and commands are treated separately in the
 | ||
| document; this section describes the syntactic classes from which the
 | ||
| constituent parts of SQL statements are drawn.
 | ||
| .SH Comments
 | ||
| A
 | ||
| .IR comment
 | ||
| is an arbitrary sequence of characters following double dashes up to the end
 | ||
| of the line e.g:
 | ||
| .nf
 | ||
| -- This is a comment
 | ||
| .fi
 | ||
| .SH "Names"
 | ||
| .IR Names
 | ||
| in SQL are sequences of not more than NAMEDATALEN alphanumeric characters,
 | ||
| starting with an alphabetic character.  By default, NAMEDATALEN is set
 | ||
| to 16, but at the time the system is built, NAMEDATALEN can be changed
 | ||
| by changing the #ifdef in src/backend/include/postgres.h.  Underscore
 | ||
| (\*(lq_\*(rq) is considered an alphabetic character. 
 | ||
| .SH "Keywords"
 | ||
| The following identifiers are reserved for use as
 | ||
| .IR keywords
 | ||
| and may not be used otherwise:
 | ||
| .PP
 | ||
| .ft B
 | ||
| .nf
 | ||
| .if n .ta 5 +15 +15 +15
 | ||
| .if t .ta 0.5i +1.5i +1.5i +1.5i
 | ||
| .fi
 | ||
| .ft
 | ||
| .ft B
 | ||
| .nf
 | ||
| .if n .ta 5 +15 +15 +15
 | ||
| .if t .ta 0.5i +1.5i +1.5i +1.5i
 | ||
| .fi
 | ||
| .ft
 | ||
| .PP
 | ||
| In addition, all Postgres classes have several predefined attributes used
 | ||
| by the system. 
 | ||
| .SH "Constants"
 | ||
| There are six types of
 | ||
| .IR constants
 | ||
| for use in SQL.  They are described below.
 | ||
| .SH "String Constants"
 | ||
| .IR Strings
 | ||
| in SQL are arbitrary sequences of ASCII characters bounded by single
 | ||
| quotes (' '). Uppercase alphabetics within strings are accepted
 | ||
| literally.  Non-printing characters may be embedded within strings by
 | ||
| prepending them with a backslash, e.g., `\en'. Also, in order to embed
 | ||
| quotes within strings, it is necessary to prefix them with `\e' .  The
 | ||
| same convention applies to `\e' itself.  Because of the limitations on
 | ||
| instance sizes, string constants are currently limited to a length of
 | ||
| a little less than 8192 bytes.  Larger objects may be created using the
 | ||
| Postgres Large Object interface.
 | ||
| .SH "Integer Constants"
 | ||
| .IR "Integer constants"
 | ||
| in SQL are collection of ASCII digits with no decimal point.  Legal
 | ||
| values range from \(mi2147483647 to +2147483647.  This will vary
 | ||
| depending on the operating system and host machine.
 | ||
| .SH "Floating Point Constants"
 | ||
| .IR "Floating point constants"
 | ||
| consist of an integer part, a decimal point, and a fraction part or
 | ||
| scientific notation of the following format:
 | ||
| .nf
 | ||
| {<dig>} .{<dig>} [e [+-] {<dig>}]
 | ||
| .fi
 | ||
| Where <dig> is a digit.  You must include at least one <dig> after the
 | ||
| period and after the [+-] if you use those options.  An exponent with
 | ||
| a missing mantissa has a mantissa of 1 inserted.  There may be no
 | ||
| extra characters embedded in the string.  
 | ||
| Floating point constaints are of type float4.
 | ||
| .SH "Constants of Postgres User-Defined Types"
 | ||
| A constant of an
 | ||
| .IR arbitrary
 | ||
| type can be entered using the notation:
 | ||
| .nf
 | ||
| 'string'::type-name
 | ||
| .fi
 | ||
| or
 | ||
| .nf
 | ||
| CAST 'string' AS type-name
 | ||
| .fi
 | ||
| The value inside the string is passed to the input
 | ||
| conversion routine for the type called type-name. The result is a
 | ||
| constant of the indicated type.  The explicit typecast may be omitted
 | ||
| if there is no ambiguity as to the type the constant must be, in which
 | ||
| case it is automatically coerced.
 | ||
| .SH "Array constants"
 | ||
| .IR "Array constants"
 | ||
| are arrays of any Postgres type, including other arrays, string
 | ||
| constants, etc.  The general format of an array constant is the
 | ||
| following:
 | ||
| .nf
 | ||
| {<val1><delim><val2><delim>}
 | ||
| .fi
 | ||
| Where
 | ||
| .IR "<delim>"
 | ||
| is the delimiter for the type stored in the \*(lqpg_type\*(rq class.
 | ||
| (For built-in types, this is the comma character, \*(lq,\*(rq.)  An
 | ||
| example of an array constant is
 | ||
| .nf
 | ||
| {{1,2,3},{4,5,6},{7,8,9}}
 | ||
| .fi
 | ||
| This constant is a two-dimensional, 3 by 3 array consisting of three
 | ||
| sub-arrays of integers.
 | ||
| .PP
 | ||
| Individual array elements can and should be placed between quotation
 | ||
| marks whenever possible to avoid ambiguity problems with respect to
 | ||
| leading white space.
 | ||
| .\"  Elements of single-element arrays (e.g.,
 | ||
| .\" \*(lq{"1"}\*(rq) must be quoted.
 | ||
| .PP
 | ||
| .SH "FIELDS AND COLUMNS"
 | ||
| .SH "Fields"
 | ||
| A 
 | ||
| .IR field
 | ||
| is either an attribute of a given class or one of the following:
 | ||
| .nf
 | ||
| oid
 | ||
| tmin
 | ||
| tmax
 | ||
| xmin
 | ||
| xmax
 | ||
| cmin
 | ||
| cmax
 | ||
| .fi
 | ||
| .PP
 | ||
| .IR Oid
 | ||
| stands for the unique identifier of an instance which is added by
 | ||
| Postgres to all instances automatically. Oids are not reused and are 32
 | ||
| bit quantities.
 | ||
| .PP
 | ||
| .IR "Tmin, tmax, xmin, cmin, xmax"
 | ||
| and
 | ||
| .IR cmax
 | ||
| stand respectively for the time that the instance was inserted, the
 | ||
| time the instance was deleted, the identity of the inserting
 | ||
| transaction, the command identifier within the transaction, the
 | ||
| identity of the deleting transaction and its associated deleting
 | ||
| command.  For further information on these fields consult [STON87].
 | ||
| Times are represented internally as instances of the \*(lqabstime\*(rq
 | ||
| data type.  Transaction identifiers are 32 bit quantities which are
 | ||
| assigned sequentially starting at 512.  Command identifiers are 16 bit
 | ||
| objects; hence, it is an error to have more than 65535 SQL commands
 | ||
| within one transaction.
 | ||
| .SH "Columns"
 | ||
| A
 | ||
| .IR column
 | ||
| is a construct of the form:
 | ||
| .nf
 | ||
| Instance-variable{.composite_field}.field `['number`]'
 | ||
| .fi
 | ||
| .IR Instance-variable 
 | ||
| identifies a particular class and can be thought of as standing for
 | ||
| the instances of that class.  An instance variable is either a class
 | ||
| name, a surrogate for a class defined by means of a
 | ||
| .IR from
 | ||
| clause, or the keyword 
 | ||
| .BR new
 | ||
| or 
 | ||
| .BR current.
 | ||
| New and current can only appear in the action portion of a rule, while
 | ||
| other instance variables can be used in any SQL statement.
 | ||
| .IR Composite_field
 | ||
| is a field of of one of the Postgres composite types indicated in the 
 | ||
| .IR information (l)
 | ||
| section, while successive composite fields address attributes in the
 | ||
| class(s) to which the composite field evaluates.  Lastly,
 | ||
| .IR field
 | ||
| is a normal (base type) field in the class(s) last addressed.  If
 | ||
| .IR field 
 | ||
| is of type array, then the optional
 | ||
| .IR number 
 | ||
| designator indicates a specific element in the array.  If no number is
 | ||
| indicated, then all array elements are returned.
 | ||
| .SH "Operators"
 | ||
| Any built-in system, or user-defined operator may be used in SQL.
 | ||
| For the list of built-in and system operators consult
 | ||
| .BR "introduction" "(3)."
 | ||
| For a list of user-defined operators consult your system administrator
 | ||
| or run a query on the pg_operator class.  Parentheses may be used for
 | ||
| arbitrary grouping of operators.
 | ||
| .SH "Expressions (a_expr)"
 | ||
| An
 | ||
| .IR expression
 | ||
| is one of the following:
 | ||
| .nf
 | ||
| ( a_expr )
 | ||
| constant
 | ||
| attribute
 | ||
| a_expr binary_operator a_expr
 | ||
| a_expr right_unary_operator
 | ||
| left_unary_operator a_expr
 | ||
| parameter
 | ||
| functional expressions 
 | ||
| aggregate expressions
 | ||
| .fi
 | ||
| We have already discussed constants and attributes.  The two kinds of
 | ||
| operator expressions indicate respectively binary and left_unary
 | ||
| expressions.  The following sections discuss the remaining options.
 | ||
| .SH "Parameters"
 | ||
| A 
 | ||
| .IR parameter
 | ||
| is used to indicate a parameter in a SQL function.  Typically this
 | ||
| is used in SQL function definition statement.  The form of a
 | ||
| parameter is:
 | ||
| .nf
 | ||
| \'$' number
 | ||
| .fi
 | ||
| For example, consider the definition of a function, DEPT, as
 | ||
| .nf
 | ||
| create function DEPT (char16) 
 | ||
| 	returns dept
 | ||
| 	as 'select * from 
 | ||
| 	    dept where name=$1'
 | ||
| 	language 'sql'
 | ||
| .fi
 | ||
| .SH "Functional Expressions"
 | ||
| A
 | ||
| .IR "functional expression"
 | ||
| is the name of a legal SQL function, followed by its argument list
 | ||
| enclosed in parentheses, e.g.:
 | ||
| .nf
 | ||
| fn-name (a_expr{ , a_expr})
 | ||
| .fi
 | ||
| For example, the following computes the square root of an employee
 | ||
| salary.
 | ||
| .nf
 | ||
| sqrt(emp.salary)
 | ||
| .fi
 | ||
| .SH "Aggregate Expression"
 | ||
| An
 | ||
| .IR "aggregate expression"
 | ||
| represents a simple aggregate (i.e., one that computes a single value)
 | ||
| or an aggregate function (i.e., one that computes a set of values).
 | ||
| The syntax is the following:
 | ||
| .nf
 | ||
| aggregate.name (attribute)
 | ||
| .fi
 | ||
| Here, 
 | ||
| .IR aggregate_name 
 | ||
| must be a previously defined aggregate.
 | ||
| .SH "Target_list"
 | ||
| A
 | ||
| .IR "target list"
 | ||
| is a parenthesized, comma-separated list of one or more elements, each
 | ||
| of which must be of the form:
 | ||
| .nf
 | ||
| a_expr[AS result_attname]
 | ||
| .fi
 | ||
| Here, result_attname is the name of the attribute to be created (or an
 | ||
| already existing attribute name in the case of update statements.)  If
 | ||
| .IR result_attname
 | ||
| is not present, then 
 | ||
| .IR a_expr
 | ||
| must contain only one attribute name which is assumed to be the name
 | ||
| of the result field.  In Postgres default naming is only used if
 | ||
| .IR a_expr
 | ||
| is an attribute.
 | ||
| .SH<53><48> "Qualification"
 | ||
| A 
 | ||
| .IR qualification 
 | ||
| consists of any number of clauses connected by the logical operators:
 | ||
| .nf
 | ||
| not
 | ||
| and
 | ||
| or
 | ||
| .fi
 | ||
| A clause is an 
 | ||
| .IR a_expr
 | ||
| that evaluates to a Boolean over a set of instances.
 | ||
| .SH "From List"
 | ||
| The 
 | ||
| .IR "from list"
 | ||
| is a comma-separated list of 
 | ||
| .IR "from expressions" .
 | ||
| .PP
 | ||
| Each 
 | ||
| .IR "from expression"
 | ||
| is of the form:
 | ||
| .nf
 | ||
| [class_reference] instance_variable
 | ||
| 	{, [class_ref] instance_variable...}
 | ||
| .fi
 | ||
| where 
 | ||
| .IR class_reference
 | ||
| is of the form
 | ||
| .nf
 | ||
| class_name [time_expression] [*]
 | ||
| .fi
 | ||
| The 
 | ||
| .IR "from expression"
 | ||
| defines one or more instance variables to range over the class
 | ||
| indicated in 
 | ||
| .IR class_reference .
 | ||
| Adding a 
 | ||
| .IR time_expression
 | ||
| will indicate that a historical class is desired.  One can also request 
 | ||
| the instance variable to range over all classes that are beneath the
 | ||
| indicated class in the inheritance hierarchy by postpending the
 | ||
| designator \*(lq*\*(rq.
 | ||
| .SH<53><48> "Time Expressions"
 | ||
| A
 | ||
| .IR "time expression"
 | ||
| is in one of two forms:
 | ||
| .nf
 | ||
|  ['date']
 | ||
|  ['date-1', 'date-2']
 | ||
| .fi
 | ||
| The first case requires instances that are valid at the indicated
 | ||
| time.  The second case requires instances that are valid at some time
 | ||
| within the date range specified.  If no time expression is indicated,
 | ||
| the default is \*(lqnow\*(rq.
 | ||
| .PP
 | ||
| In each case, the date is a character string of the form
 | ||
| .nf
 | ||
| [MON-FRI] 'MMM DD [HH:MM:SS] YYYY' [Timezone]
 | ||
| .fi
 | ||
| where MMM is the month (Jan \- Dec), DD is a legal day number in the
 | ||
| specified month, HH:MM:SS is an optional time in that day (24-hour
 | ||
| clock), and YYYY is the year.  If the time of day HH:MM:SS is not
 | ||
| specified, it defaults to midnight at the start of the specified day.
 | ||
| As of Version 3.0, times are no longer read and written using
 | ||
| Greenwich Mean Time; the input and output routines default to the
 | ||
| local time zone.
 | ||
| .PP
 | ||
| For example,
 | ||
| .nf
 | ||
| ['Jan 1 1990']
 | ||
| ['Mar 3 00:00:00 1980', 'Mar 3 23:59:59 1981r']
 | ||
| .fi
 | ||
| are valid time specifications.
 | ||
| .PP
 | ||
| Note that this syntax is slightly different than that used by the 
 | ||
| time-range type.
 | ||
| .SH "SEE ALSO"
 | ||
| insert(l),
 | ||
| delete(l),
 | ||
| execute(l),
 | ||
| update(l),
 | ||
| select(l),
 | ||
| monitor(1).
 |