Chapitre 2. Syntaxe SQL

Table des matières
Mots-clé
Expressions

SQL manipule des ensembles de données. Le langage est composé de différents mots-clé. Les expressions arithmétiques et procédurales sont admises. Nous verrons ces sujets dans ce chapitre; les chapitres suivants détailleront les types, les fonctions et les opérateurs.

Mots-clé

SQL92 définit un langage de mots-clé qui possède un sens spécifique. Certains mots-clé sont réservés ce qui signifie qu'ils doivent apparaître seulement dans un contexte précis. D'autres mots-clé ne sont pas limités ce qui veut dire que dans certains contextes ils ont un sens spécifique mais n'y sont pas strictement liés.

Postgres implémente un sous ensemble étendu des langages SQL2 et SQL3. Certains éléments du langage ne sont pas aussi limités que dans le langage standard, en partie grâce à l'extensibilité des fonctionnalités de Postgres.

Pour plus d'information sur les mots-clé SQL92 et SQL3, voir A Guide to the SQL Standard, C. J. Date and Hugh Darwen, ISBN: 0-201-96426-0, 1997, Addison-Wesley.

Mots-clé réservés

SQL92 et SQL3 ont des mots-clé réservés qui ne sont pas admis comme identifiants ou dans un autre usage que les requêtes SQL. Postgres possède des mots-clé additionnels qui ont des restrictions similaires en particulier, ces mots-clé ne sont pas admis en tant que noms de colonne ou de table, bien que dans certains cas ils sont admis comme label de colonne (i.e. dans les clauses AS).

Tuyau

Une chaîne peut être spécifiée comme identifiant si elle est encadrée par des ("comme ça !").

Voici la liste des mots-clé Postgres réservés qui ne sont ni des mots-clé réservés SQL92 ni SQL3. Ils sont admis pour être presents comme label de colonne, mais non comme identifiants :
ABORT ANALYZE 
BINARY 
CLUSTER CONSTRAINT COPY
DO 
EXPLAIN EXTEND
LISTEN LOAD LOCK 
MOVE 
NEW NONE NOTIFY 
RESET 
SETOF SHOW
UNLISTEN UNTIL 
VACUUM VERBOSE

Les suivants sont des mots-clé réservés Postgres et aussi SQL92 et SQL3 et sont admis pour être present comme label de colonne, mais non comme identifiants :
CASE COALESCE CROSS CURRENT 
ELSE END
FALSE FOREIGN 
GLOBAL GROUP 
LOCAL
NULLIF
ORDER 
POSITION PRECISION 
TABLE THEN TRANSACTION TRUE
WHEN
     
Ci-dessous les mots-clé réservés Postgres qui sont aussi SQL92 et 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 CURRENT_USER CURSOR
DECIMAL 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 NUMERIC
ON OR OUTER
PARTIAL PRIMARY PRIVILEGES PROCEDURE PUBLIC
REFERENCES REVOKE RIGHT ROLLBACK
SELECT SET SUBSTRING
TO TRAILING TRIM 
UNION UNIQUE UPDATE USER USING
VALUES VARCHAR VARYING VIEW
WHERE WITH WORK 

Les suivants sont des mots-clé réservés SQL92 mais non par Postgres, mais qui s'ils sont utilisés comme noms de fonctions sont toujours traduits dans la fonction : lenght
CHAR_LENGTH CHARACTER_LENGTH
     

Les mots-clé réservés suivants sont SQL92 et SQL3 et non Postgres, mais s'ils sont utilisés comme type nom sont toujours traduits en un type natif :
BOOLEAN DOUBLE FLOAT INT INTEGER INTERVAL REAL SMALLINT
     

Voici la liste des mots-clé réservés SQL92 et SQL3 qui ne sont pas des mots-clé réservés Postgres. Ils pourraient cependant le devenir dans le futur.

Note

Certains représentent des fonctions SQL92 définies dans Postgres, mais l'analyseur (parser) ne les considère pas comme mots-clé et ils sont admis dans d'autres contextes.

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

Mots-clé non réservés

SQL92 et SQL3 possèdent des mots-clé non réservés qui ont un sens proscrit dans le langage mais sont admis comme identifiants. Postgres possède des mots-clé additionnels qui admettent un usage similaire non limité. En particulier, ils sont admis comme noms de colonnes et de tables.

Les suivants sont des mots-clé non réservés Postgres qui ne sont ni 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
     

Ci-dessous les mots-clé non réservés Postgres qui sont des mots-clé réservés SQL92 et SQL3 :
ABSOLUTE ACTION
DAY
HOUR
INSENSITIVE 
KEY 
LANGUAGE 
MATCH MINUTE MONTH
NEXT 
OF ONLY OPTION 
PRIOR PRIVILEGES 
READ RELATIVE 
SCROLL SECOND
TIME TIMESTAMP TIMEZONE_HOUR TIMEZONE_MINUTE TRIGGER 
YEAR
ZONE
     

Le suivant est un mot-clé non réservé Postgres et aussi SQL92 et SQL3 :
COMMITTED SERIALIZABLE TYPE
     

Enfin, les mots-clé non réservés SQL92 et SQL3 qui ne sont pas des mots-clé 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