Sintaxis SQL

Una descripción de la sintaxis general de SQL.

SQL manipula un conjunto de datos. El lenguaje esta compuesto por varias palabras clave. Se permite expresiones aritméticas y procedimentales. Nosotros trataremos estos temas en este capítulo; en los sucesivos capítulos incluiremos detalles de los tipos de datos, funciones, y operadores.

Palabras Clave

SQL92 define Palabras Clave para el lenguaje que tienen un significado especifico. Algunas palabras están reservadas, lo cual indica que su aparición esta restringida sólo en ciertos contextos. Otras Palabras clave no están restringidas, , lo cual indica que en ciertos contextos tienen un significado especifico pero no es obligatorio.

Postgres implementa un subconjunto extendido de los lenguajes SQL92 y SQL3 lenguajes.Algunos elementos del lenguaje no están tan restringidos en esta implementación como en el lenguajes estándar, en parte debido a las características extendidas de Postgres.

Información sobre las palabras clave de SQL92 y SQL3 son derivadas de Date and Darwen, 1997.

Palabras clave reservadas

SQL92 y SQL3 tienen Palabras clave reservadas las cuales no están permitidas ni como identificador ni para cualquier uso distinto de señales fundamentales en declaraciones SQL . Postgres tiene palabras clave adicionales con las mismas restricciones. En particular, estas palabras clave no están permitidas para nombre de tablas o campos, aunque en algunos casos están permitidas para ser etiquetas de columna (pe. en la cláusula AS).

Sugerencia

Cualquier cadena puede ser especificada como un identificador si va entre doble comillas ("como esa"). Se debe tener cuidado desde tanto un identificador será sensible a las mayúsculas / minúsculas y contendrá espacios en blanco u otro caracteres especiales.

Las siguientes palabras reservadas de Postgres no son palabras reservadas de SQL92 ni de SQL3 Estas están permitidas para ser etiquetas de columna, pero no identificadores:

ABORT ANALYZE 
BINARY 
CLUSTER CONSTRAINT COPY
DO 
EXPLAIN EXTEND
LISTEN LOAD LOCK 
MOVE 
NEW NONE NOTIFY 
RESET 
SETOF SHOW
UNLISTEN UNTIL 
VACUUM VERBOSE
     

Las siguientes palabras reservadas de Postgres son también palabras reservadas de SQL92 o SQL3 y está permitido que estén presente como etiqueta de columna pero no como identificador:

CASE COALESCE CROSS CURRENT CURRENT_USER 
DEC DECIMAL 
ELSE END
FALSE FOREIGN 
GLOBAL GROUP 
LOCAL
NULLIF NUMERIC 
ORDER 
POSITION PRECISION 
SESSION_USER 
TABLE THEN TRANSACTION TRUE
USER 
WHEN
     
Las siguientes palabras reservadas de Postgres también son palabras reservadas de SQL92 o SQL3 :
ADD ALL ALTER AND ANY AS ASC
BEGIN BETWEEN BOTH BY
CASCADE CAST CHAR CHARACTER CHECK CLOSE
 COLLATE COLUMN COMMIT CONSTRAINT CREATE
 CURRENT_DATE CURRENT_TIME CURRENT_TIMESTAMP 
 CURSOR
DECLARE DEFAULT DELETE DESC DISTINCT DROP
EXECUTE EXISTS EXTRACT
FETCH FLOAT FOR FROM FULL
GRANT 
HAVING
IN INNER INSERT INTERVAL INTO IS
JOIN 
LEADING LEFT LIKE LOCAL
NAMES NATIONAL NATURAL NCHAR NO NOT NULL 
ON OR OUTER
PARTIAL PRIMARY PRIVILEGES PROCEDURE PUBLIC
REFERENCES REVOKE RIGHT ROLLBACK
SELECT SET SUBSTRING
TO TRAILING TRIM 
UNION UNIQUE UPDATE USING
VALUES VARCHAR VARYING VIEW
WHERE WITH WORK 
     

Las siguientes palabras reservadas de SQL92 no son palabras clave reservadas de Postgres pero si se usan como nombre de función se traducen siempre por la función length:

CHAR_LENGTH CHARACTER_LENGTH
     

Las siguientes palabras reservadas de SQL92 o SQL3no son palabras clave reservadas dePostgres pero si se usan como nombre de tipo se traducen siempre en un tipo alternativo/nativo:

BOOLEAN DOUBLE FLOAT INT INTEGER INTERVAL REAL SMALLINT
     

Las siguientes palabras clave reservadas tanto de SQL92 o SQL3 no son palabras clave en Postgres. Esto hace que su uso no sea valido en Postgresen el momento de la escritura (v6.5) pero serán palabras reservadas en el futuro:

Nota

Algunas de estas palabras clave representan funciones en SQL92. Estas funciones están definidas en Postgres,pero el interprete no considera los nombre como palabras clave y las permite en otros contextos.

ALLOCATE ARE ASSERTION AT AUTHORIZATION AVG 
BIT BIT_LENGTH
CASCADED CATALOG COLLATION CONNECT CONNECTION
 CONTINUE CONVERT CORRESPONDING COUNT
DATE DEALLOCATE DEC DESCRIBE DESCRIPTOR
 DIAGNOSTICS DISCONNECT DOMAIN 
ESCAPE EXCEPT EXCEPTION EXEC EXTERNAL 
FIRST FOUND
GET GO GOTO 
IDENTITY INDICATOR INPUT INTERSECT
LAST LOWER 
MAX MIN MODULE 
OCTET_LENGTH OPEN OUTPUT OVERLAPS 
PREPARE PRESERVE 
ROWS
SCHEMA SECTION SESSION SIZE SOME 
 SQL SQLCODE SQLERROR SQLSTATE SUM SYSTEM_USER
TEMPORARY TRANSLATE TRANSLATION 
UNKNOWN UPPER USAGE
VALUE 
WHENEVER WRITE
     

Palabras clave no-reservadas

SQL92 y SQL3 tienen Palabras clave no-reservadas which have a prescribed meaning in the language but which are also allowed as identifiers. Postgres que tienen un significado preestablecida en el lenguaje pero también se puede utilizar como identificadores. Postgres tiene palabras clave adicionales con la misma restricción de uso. En particular, estas palabras clave se pueden usar como nombre de columnas o tablas.

Las siguientes palabras clave no-reservadas de Postgres no son palabras clave no-reservadas de SQL92 ni SQL3 :

ACCESS AFTER AGGREGATE 
BACKWARD BEFORE 
CACHE CREATEDB CREATEUSER CYCLE
DATABASE DELIMITERS 
EACH ENCODING EXCLUSIVE
FORWARD FUNCTION 
HANDLER
INCREMENT INDEX INHERITS INSENSITIVE INSTEAD ISNULL
LANCOMPILER LOCATION 
MAXVALUE MINVALUE MODE
NOCREATEDB NOCREATEUSER NOTHING NOTNULL 
OIDS OPERATOR 
PASSWORD PROCEDURAL
RECIPE RENAME RETURNS ROW RULE
SEQUENCE SERIAL SHARE START STATEMENT STDIN STDOUT 
TRUSTED 
VALID VERSION
     

Las siguientes palabras clave no-reservadas de Postgres son palabras clave reservadas de SQL92 o SQL3 :

ABSOLUTE ACTION
CONSTRAINTS
DAY DEFERRABLE DEFERRED 
HOUR
IMMEDIATE INITIALLY INSENSITIVE ISOLATION 
KEY 
LANGUAGE LEVEL 
MATCH MINUTE MONTH
NEXT 
OF ONLY OPTION 
PENDANT PRIOR PRIVILEGES 
READ RELATIVE RESTRICT 
SCROLL SECOND
TIME TIMESTAMP TIMEZONE_HOUR TIMEZONE_MINUTE TRIGGER 
YEAR
ZONE
     

Las siguientes palabras clave no-reservadas de Postgres también son palabras clave no-reservadasde SQL92 o SQL3 :

COMMITTED SERIALIZABLE TYPE
     

Las siguientes palabras clave no-reservadas tanto de SQL92 o SQL3 no son palabras clave de ninguna clase en Postgres:

ADA
C CATALOG_NAME CHARACTER_SET_CATALOG CHARACTER_SET_NAME 
 CHARACTER_SET_SCHEMA CLASS_ORIGIN COBOL COLLATION_CATALOG
 COLLATION_NAME COLLATION_SCHEMA COLUMN_NAME
 COMMAND_FUNCTION CONDITION_NUMBER
 CONNECTION_NAME CONSTRAINT_CATALOG CONSTRAINT_NAME
 CONSTRAINT_SCHEMA CURSOR_NAME
DATA DATE_TIME_INTERVAL_CODE DATE_TIME_INTERVAL_PRECISION
 DYNAMIC_FUNCTION
FORTRAN
LENGTH
MESSAGE_LENGTH MESSAGE_OCTET_LENGTH MORE MUMPS
NAME NULLABLE NUMBER
PAD PASCAL PLI
REPEATABLE RETURNED_LENGTH RETURNED_OCTET_LENGTH
 RETURNED_SQLSTATE ROW_COUNT
SCALE SCHEMA_NAME SERVER_NAME SPACE SUBCLASS_ORIGIN
TABLE_NAME
UNCOMMITTED UNNAMED