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.
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.
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).
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 |
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.
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 |
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 |