jueves, 8 de abril de 2010

Sintaxis SQL

Palabras claves
Son Palabras que para el lenguaje 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.

  • Palabras claves Reservadas

Postgres tiene palabras clave reservadas, las cuales no están permitidas ni como identificador ni para cualquier otro uso distinto a las declaraciones SQL. 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).

  1. Las siguientes son palabras reservadas de Postgres. 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
    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
  2. Las siguientes son palabras reservadas de Postgres.

    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
  • Palabras No Reservadas

Postgres tiene palabras clave no-reservadas que tienen un significado preestablecido en el lenguaje, pero también se puede utilizar como identificador. En particular, estas palabras clave se pueden usar como nombre de columnas o tablas.

Las siguientes son palabras clave no-reservadas de Postgres:

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
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
COMMITTED SERIALIZABLE TYPE

  • CONSTANTES

Hay tres tres tipos implícitos de constantes usadas por Postgres:
1. Cadenas.
2. Enteros
3. Números de coma flotante.
4. Constantes de tipo array.

Las Constantes también pueden ser especificadas con un tipo explícito, el cual puede tener una representación más adecuada y un manejo más eficiente.

  • Constantes tipo Cadenas

Las cadenas son secuencias arbitrarias de caracteres ASCII limitadas por comillas simples (" ' ", pe. 'Esto es una cadena')
En Postgres las comillas simples deben estar precedidas por una contra barra ("\", pe.. 'Dianne\'s horse').

  • Constantes tipo Entero

Las constantes tipo entero son una colección de dígitos ASCII sin punto decimal.

  • Constantes tipo Punto Flotante

Floating point constants consta de una parte entera , un punto decimal, y una parte decimal o la notación científica con el siguiente formato:
Donde dig es uno o más dígitos. Usted puede incluir como mínimo un dig después del periodo y después de [+-] si esas opciones. Un exponente sin mantisa tiene una mantisa insertada a 1. No debe haber ningún carácter extra incluido en la cadena.

  • Constantes Postgres de tipos definido por el usuario

Una constante de un tipo arbitrario puede ser usando utilizando alguna de las siguientes notaciones:type 'string''string'::typeCAST'string'AStype.

El valor de dentro de la cadena se pasa como entrada a rutina de conversión para el tipo llamado type. El resultado es una constante del tipo indicado. La tipología puede omitirse si no hay ambigüedad sobre el tipo de constate que debe ser, en este caso este está automáticamente forzado.

  • Constantes de tipo Array

Las constantes de tipo Array de cualquier tipo Postgres, incluidos otras arrays, constantes de cadena, etc. El formato general de cualquier constante array es el siguiente:
{val1delimval2delim}

Donde delim es el delimitador para el tipo almacenado en la clase pg_type. (Para los tipos preconstruidos, es el carácter coma. Un ejemplo de constante de tipo array es:
{{1,2,3},{4,5,6},{7,8,9}}

Esta constante es de dos dimensiones, una array de 3 por 3 consiste en tres subarrays de enteros.
Un elemento de una array individual puede y debe estar entre marcas delimitadoras siempre que sea posible para evitar problemas de ambigüedad con respecto a espacios en blanco iniciales.

  • Comentarios

Un Comentario es una secuencia arbitraria de carácteres precedido por un doble guión hasta final de linea. También está soportado la doble barra pe.:
-- This is a standard SQL comment
// And this is another supported comment style, like C++

También soportamos el bloque de comentarios al estilo C pe.:
/* multi
line
comment
*/

  • Nombres

El nombre en SQL es una secuencia de caracteres alfanuméricos menor que NAMEDATALEN, comenzando por un carácter alfanumérico. Por defecto, NAMEDATALEN esta definido a 32, pero en el momento que montar el sistema, NAMEDATALEN puede cambiarse cambiando el #define en src/backend/include/postgres.h. Subrayado ("_") esta considerado como un carácter alfabético.
En algunos contextos, los nombre pueden contener otros caracteres si están entrecomillados por doble comillas. Por ejemplo, nombres de tablas o campos pueden contener otros caracteres no validos como los espacios, ampersand (&), etc. usando esta técnica.