Está en la página 1de 12

1

SINTAXIS DEL LENGUAJE SQL/92


En este anexo se va a presentar la sintaxis precisa del conjunto de instrucciones del lenguaje
SQL/92 estudiadas. La notacin que se va a seguir para presentar esta sintaxis es una versin
extendida de BNF1. En BNF, cada elemento sintctico se define mediante un conjunto de reglas de
produccin. Estas reglas definen un elemento en trminos de una frmula formada de caracteres,
tiras de caracteres y elementos sintcticos que pueden ser usados para formar una instancia de dicho
elemento. A continuacin se incluyen los smbolos y reglas de la versin de BNF que se ha usado:
WLUDGHFDUDFWHUHVHQFXUVLYD: define un nombre de un identificador.
tira de caracteres normal en minsculas: define el nombre de un elemento sintctico que no es
un smbolo terminal y que se define en otra regla de produccin.
TIRA DE CARACTERES EN MAYSCULAS: es un smbolo terminal de la gramtica y define una
palabra reservada del lenguaje SQL.
::= El operador de produccin. Se usa en una regla de produccin para separar el elemento
definido y la forma que lo define. El elemento que se define aparece a la izquierda del
operador y la frmula que lo define a la derecha.
[]
Los corchetes cuadrados sirven para indicar elementos opcionales dentro de una
frmula.
{}
Las llaves se usan para agrupar elementos en una frmula. La porcin de frmula
incluida entre llaves debe ser explcitamente especificada.
|
La barra vertical es el operador de alternativa que permite indicar que la porcin de
frmula que sigue a la barra es una alternativa a la porcin de la frmula que le precede. Si la
barra aparece en la frmula sin estar incluida en unos corchetes o llaves indica una alternativa
completa para los elementos definidos en la frmula. Si aparece en una porcin de la frmula
que est entre corchetes o llaves indica alternativas para el contenido del par de corchetes o
llaves ms internos.
Si [\] es un elemento sintctico, OLVWDB[\]es una lista de elementos del tipo [\]separados por
algn tipo de separador (espacio en blanco, salto de lnea, etc.).
Si [\]es un elemento sintctico, FRPDOLVWDB[\] es una lista de elementos del tipo [\]separados
por comas.

(VWDHVOD~QLFDGRFXPHQWDFLyQSHUPLWLGDHQHOH[DPHQGHEDVHVGHGDWRV\QRGHEHOOHYDU
DQRWDFLRQHV

1 Bakus Normal Form o Bakus Naur Form

35,0(5$3$57(64/
'HILQLFLyQGHGDWRV
1) definicin_esquema ::=
CREATE SCHEMA [HVTXHPD] [AUTHORIZATION XVXDULR]

[lista_elemento_esquema]
2) elemento_esquema ::=
definicin_dominio
definicin_vista

|
|

definicin_tabla
|
definicin_restriccin |

definicin_privilegio

3) definicin_dominio ::=
CREATE DOMAIN [AS] tipo_dato
[definicin_valor_por_defecto]
[lista_definicin_restriccin_dominio]
4) definicin_valor_por_defecto ::=

DEFAULT {literal

| funcin_sistema | NULL }

5) definicin_restriccin_dominio ::=
[CONSTRAINT UHVWULFFLyQ] CHECK (expresin_condicional) [cuando_comprobar]
6) cuando_comprobar ::=
[[NOT] DEFERRABLE][INITIALLY {IMMEDIATE | DEFERRED}]
7) definicin_tabla ::=
WDEODBEDVH
comalista_definicin_columna[comalista_definicin_restriccin_tabla]
CREATE TABLE

8) definicin_columna ::=
FROXPQD { tipo_dato | GRPLQLR } [definicin_valor_por_defecto]
[lista_definicin_restriccin_columna]
9) definicin_restriccin_columna ::=
[CONSTRAINT UHVWULFFLyQ]
{NOT NULL
PRIMARY KEY
UNIQUE

|
|
|

REFERENCES tabla [(comalista_FROXPQD)]

[MATCH {FULL | PARTIAL } ]


[ON DELETE accin_referencia]
[ON UPDATE accin_referencia]
CHECK (expresin_condicional) }
[cuando_comprobar]

10) accin_referencia ::=


NO ACTION | CASCADE | SET DEFAULT | SET NULL

3
11) definicin_restriccin_tabla ::=
[CONSTRAINT UHVWULFFLyQ]
{PRIMARY KEY
UNIQUE (comalista_FROXPQD)
FOREIGN KEY (comalista_columna) REFERENCES tabla [(comalista_FROXPQD)]
[MATCH {FULL | PARTIAL } ]
[ON DELETE accin_referencia]
[ON UPDATE accin_referencia]
CHECK (expresin_condicional) }
[cuando_comprobar]

|
|

12) definicin_vista ::=


YLVWD [(comalista_FROXPQD)]
AS expresin_tabla [WITH CHECK OPTION]
CREATE VIEW

13) definicin_restriccin ::=


UHVWULFFLyQ
CHECK (expresin_condicional)
CREATE ASSERTION

[cuando_comprobar]

14) definicin_privilegio ::=


GRANT {comalista_privilegio | ALL PRIVILEGES }
ON objeto TO {comalista_XVXDULRV_PUBLIC}
[WITH GRANT OPTION]
15) privilegio ::= SELECT
UPDATE [(comalista_FROXPQD)]

|
|

INSERT [(comalista_FROXPQD)]
DELETE

16) objeto ::= DOMAIN GRPLQLR | [TABLE] tabla


17) alteracin_dominio ::=
GRPLQLR
{SET DEFAULT {literal | funcin_sistema | NULL }
ALTER DOMAIN
DROP DEFAULT
ADD definicin_restriccin_dominio
DROP CONSTRAINT UHVWULFFLyQ

|
|
|

18) alteracin_tabla ::=


ALTER TABLE WDEODBEDVH

{ADD [COLUMN] GHILQLFLyQBFROXPQD


ALTER [COLUMN] FROXPQD
{SET DEFAULT {literal | funcin_sistema | NULL } |
DROP DEFAULT}
|
DROP [COLUMN] FROXPQD{RESTRICT | CASCADE} }

19) eliminacin_esquema ::=

DROP SCHEMA HVTXHPD{RESTRICT | CASCADE}

20) eliminacin_dominio ::=

DROP DOMAIN GRPLQLR{RESTRICT | CASCADE}

4
21) eliminacin_tabla_base ::=
22) eliminacin_vista ::=

DROP TABLE WDEODBEDVH{RESTRICT | CASCADE}

DROP VIEW YLVWD{RESTRICT | CASCADE}

23) eliminacin_restriccin_general ::= DROP ASSERTION UHVWULFFLyQ


24) eliminacin_autorizacin ::=
REVOKE [GRANT OPTION FOR]
{ALL | SELECT | INSERT[(comalista_FROXPQD)] |
DELETE | UPDATE [(comalista_FROXPQD)]}
ON objeto TO {comalista_XVXDULRV| PUBLIC }
{RESTRICT | CASCADE}

([SUHVLRQHVGHWDEOD
25) expresin_tabla ::=
expresin_concatenacin_tabla | expresin_no_concatenacin_tabla
26) expresin_concatenacin_tabla ::=
| referencia_tabla [NATURAL] [tipo_concatenacin] JOIN referencia_tabla
[ON expresin_condicional | USING (comalista_FROXPQD) ]
| (expresin_tabla) CROSS JOIN referencia_tabla
| (expresin_concatenacin_tabla)
27) referencia_tabla ::=
tabla [[AS] YDULDEOHBUHFRUULGR]
(expresin_tabla) [[AS] YDULDEOHBUHFRUULGR]
expresin_concatenacin_tabla
28) tipo_concatenacin ::=
INNER
|
FULL [OUTER]
|

LEFT [OUTER]

|
|

RIGHT [OUTER]

UNION

29) expresin_conjuntista_tabla ::=


trmino_conjuntista_tabla
|
expresin_tabla {UNION | EXCEPT } [ALL]
[CORRESPONDING [BY (comalista_FROXPQD)]] trmino_tabla
30) trmino_conjuntista_tabla ::=
tabla_primaria_conjuntista
|
trmino_tabla INTERSECT [ALL]
[CORRESPONDING [BY (comalista_FROXPQD)]] tabla_primaria
31) trmino_tabla ::=
trmino_conjuntista_tabla

expresin_concatenacin_tabla

32) tabla_primaria ::=


tabla_primaria_conjuntista

expresin_concatenacin_tabla

33) tabla_primaria_conjuntista ::=


TABLE tabla
expresin_SELECT

|
|

constructor_tabla
(expresin_conjuntista_tabla)

34) constructor_tabla ::=

VALUES comalista_constructor_fila

35) constructor_fila ::=

expresin_escalar | (comalista_expresin_escalar) | (expresin_tabla)

36) expresin_SELECT ::=


SELECT [ALL | DISTINCT] comalista_item_seleccionado
FROM comalista_referencia_tabla
[WHERE expresin_condicional]
[GROUP BY comalista_referencia_columna [HAVING expresin_condicional]]

37) item_seleccionado ::=


expresin_escalar [AS] FROXPQD

[variable_recorrido.]*

$FWXDOL]DFLyQGHGDWRV
38) insercin ::=
INSERT INTO tabla {

[(comalista_FROXPQD)] expresin_tabla | DEFAULT VALUES }

39) actualizacin ::=


UPDATE tabla SET comalista_asignacin
[WHERE expresin_condicional]
40) asignacin ::=

FROXPQD= {expresin_escalar | DEFAULT | NULL }

41) eliminacin ::=

DELETE FROM tabla [WHERE expresin_condicional]

([SUHVLRQHVFRQGLFLRQDOHV
42) expresin_condicional ::=
trmino_condicional |

expresin_condicional OR trmino_condicional

43) trmino_condicional ::=


factor_condicional
|

trmino_condicional AND factor_condicional

44) factor_condicional ::= [NOT] comprobacin_condicional


45) comprobacin_condicional ::= condicin_primaria [IS [NOT] {TRUE | FALSE} ]
46) condicin_primaria ::= condicin_simple | (expresin_condicional)
47) condicin_simple ::=
condicin_comparacin | condicin_between |

condicin_like

| condicin_in

6
comprobacin_nulo
condicin_unique

condicin_match |

condicin_all_any | condicin_exists |

48) condicin_comparacin ::=

constructor_fila predicado_comparacin constructor_fila

49) predicado_comparacin ::=

= | < | <= | > | >= | <>

50) condicin_between ::= constructor_fila [NOT] BETWEEN constructor_fila


AND constructor_fila
51) condicin_like ::= expresin_tira_caracteres [NOT] LIKE patrn [ESCAPE escape]
52) condicin_in ::=
constructor_file [NOT] IN (expresin_tabla) |
expresin_escalar [NOT] IN (comalista_espresin_escalar)
53) compracin_nulo ::=

constructor_fila IS [NOT] NULL

54) condicin_match ::=


constructor_fila MATCH [UNIQUE] [PARTIAL | FULL] (expresin_tabla)
55) condicin_all_any ::=
constructor_fila predicado_comparacin {ALL | ANY | SOME}(expresin_tabla)
56) ) condicin_exists ::= EXISTS (expresin_tabla)
57) condicin_unique ::= UNIQUE (expresin_tabla)

([SUHVLRQHVHVFDODUHV
58) expresin_escalar ::=

expresin_numrica
expresin_tira_caracteres

|
|

59) expresin_numrica ::= trmino_numrico


|
expresin_numrica {+ | -} trmino_numrico
60) trmino_numrico ::= factor_numrico
trmino_numrico {* | /} factor_numrico
61) factor_numrico ::=

[+ | -] numero_primario

62) numero_primario ::=


referencia_columna
|
literal
|
referencia_funcin_escalar |
referencia_funcin_agregada |
(expresin_tabla)
|
(expresin_numrica)
COUNT(*)
63) referencia_funcin_agregada ::=
| {AVG | MAX | MIN | SUM | COUNT } ([ALL | DISTINCT] expresin_escalar)

64) expresin_tira_caracteres ::= concatenacin_tira_caracteres


tira_caracteres_primaria

65) concatenacin_tira_caracteres ::=


expresin_tira_caracteres ||2 tira_caracteres_primaria
66) tira_caracteres_primaria ::=
referencia_columna
|
funcin_usuario
|
referencia_funcin_agregada |
(expresin_tira_caracteres)

literal
|
referencia_funcin_escalar |
(expresin_tabla)
|

0LVFHOiQHD
67) tabla ::= WDEODBEDVH| YLVWD
68) patrn ::= expresin_tira_caracteres
69) escape ::= expresin_tira_caracteres
70) funcin_sistema ::=

funcin_usuario | funcin_tiempo

71) funcin_usuario ::=


USER
CURRENT_USER
SESSION_USER

|
|
|

SYSTEM_USER

72) funcin_tiempo ::=


CURRENT_DATE
|
CURRENT_TIME
|
CURRENT_TIMESTAMP

2 || es el operador concatenacin de tiras de caracteres

Para facilitar el manejo de la sintaxis, a continuacin se listan todas las categoras sintcticas de
SQL92 que se han definido ordenadas alfabticamente indicando, con el nmero que las acompaa,
en qu orden se puede encontrar su definicin.
accin_referencia
actualizacin
alteracin_dominio
alteracin_tabla
asignacin
compracin_nulo
comprobacin_condicional
cuando_comprobar
concatenacin_tira_caracteres
condicin_all_any
condicin_between
condicin_comparacin
condicin_exists
condicin_in
condicin_like
condicin_match
condicin_primaria
condicin_simple
condicin_unique
constructor_fila
constructor_tabla
definicin_columna
definicin_dominio
definicin_esquema
definicin_privilegio
definicin_restriccin
definicin_restriccin_columna
definicin_restriccin_dominio
definicin_restriccin_tabla
definicin_tabla
definicin_valor_por_defecto
definicin_vista
elemento_esquema
eliminacin
eliminacin_autorizacin
eliminacin_dominio
eliminacin_esquema
eliminacin_restriccin_general
eliminacin_tabla_base
eliminacin_vista

10)
39)
17)
18)
40)
53)
45)
6)
65)
55)
50)
48)
56)
52)
51)
54)
46)
47)
57)
35)
34)
8)
3)
1)
14)
13)
9)
5)
11)
7)
4)
12)
2)
41)
24)
20)
19)
23)
21)
22)

9
escape
expresin_concatenacin_tabla
expresin_condicional
expresin_conjuntista_tabla
expresin_escalar
expresin_numrica
expresin_SELECT
expresin_tabla
expresin_tira_caracteres
factor_condicional
factor_numrico
funcin_sistema
funcin_tiempo
funcin_usuario
insercin
item_seleccionado
numero_primario
objeto
patrn
predicado_comparacin
privilegio
referencia_funcin_agregada
referencia_tabla
tabla
tabla_primaria
tabla_primaria_conjuntista
trmino_condicional
trmino_conjuntista_tabla
trmino_numrico
trmino_tabla
tipo_concatenacin
tira_caracteres_primaria

69)
26)
42)
29)
58)
59)
36)
25)
64)
44)
61)
70)
72)
71)
38)
37)
62)
16)
68)
49)
15)
63)
27)
67)
32)
33)
43)
30)
60)
31)
28)
66)

10

6(*81'$3$57(64/'(25$&/(
A continuacin se presenta la sintaxis de aquellas instrucciones de Oracle 8 que no coinciden con
SQL/92:
&RQFDWHQDFLyQH[WHUQDen ORACLE8:
La sentencia en SQL/92:
SELECT [ALL | DISTINCT] comalista_item_seleccionado
FROM t1 /()7287(5-2,1 t2 21 t1.A RS t2.B AND .......
es equivalente en ORACLE8 a:
SELECT [ALL | DISTINCT] comalista_item_seleccionado
FROM t1, t2
WHERE t1.A RS t2.B  AND ...

'HILQLFLyQGHUHODFLyQEiVLFD
1) Definicin_relacin_bsica::= CREATE TABLE nom_relacin
(comalista_HOHPHQWRBUHODFLyQBEiVLFD
2) elemento_relacin_bsica::= GHILQLFLyQBDWULEXWR
|UHVWULFFLyQBUHODFLyQ
3) definicin_atributo ::= nom_atributo WLSRBGDWRV
[DEFAULT (expresin)]
[OLVWDBUHVWULFFLyQBDWULEXWR]
4) tipo_datos ::=
| CHAR (longitud)
| VARCHAR (longitud)
| NUMBER [(precisin[, escala])]
| DATE
5) restriccin_atributo::= [CONSTRAINT nombre_restriccin]
{[NOT] NULL
| UNIQUE
| PRIMARY KEY
| REFERENCES nom_relacin* [(nom_atributo*)]
[ON DELETE CASCADE]
| CHECK (FRQGLFLyQ) }
[FXDQGRBFRPSUREDU]
6) restriccin_relacin ::=
[CONSTRAINT nombre_restriccin]
{ UNIQUE (comalista_nom_atributo)
| PRIMARY KEY (comalista_nom_atributo)
| FOREIGN KEY (comalista_nom_atributo)
REFERENCES nom_relacin* [(comalista_nom_atributo*)]
[ON DELETE CASCADE]
| CHECK (FRQGLFLyQ)}
[FXDQGRBFRPSUREDU]
7) cuando_comprobar
[[NOT] DEFERRABLE][INITIALLY {INMEDIATE | DEFERRED}]

11
8) modificacin_relacin ::= ALTER TABLE nombre_relacin
{ADD (FRPDOLVWDBHOHPHQWRBUHODFLyQBEiVLFD)
| MODIFY (FRPDOLVWDBGHILQLFLyQBDWULEXWR)
| {DROP
| [VALIDATE | NOVALIDATE] ENABLE
| DISABLE }
(UHVWULFFLyQ) }
9) restriccin ::= {PRIMARY [CASCADE]
| UNIQUE (comalista_nombre_atributo) [CASCADE]
| CONSTRAINT nombre_restriccin }
10) definicin_vista ::= CREATE [OR REPLACE] VIEW QRPEUHBYLVWD
[(comalista_nombre_atributo)] AS VHQWHQFLDB6(/(&7
 [WITH CHECK OPTION]
11) definicin_operacin_grant ::= GRANT FRPDOLVWDBSULYLOHJLRVBVLVWHPD
TO {PUBLIC | comalista_usuario}
[WITH ADMIN OPTION]
12) definicin_regla
{CREATE | REPLACE} TRIGGER nombre_regla
{BEFORE | AFTER | INSTEAD OF} evento [GLV\XQFLyQBHYHQWRV]
ON {nombre_relacin | nombre_vista}
[ [REFERENCING OLD AS nombre_referencia [NEW AS nombre_referencia] ]
[FOR EACH {ROW | STATEMENT} [WHEN ( FRQGLFLyQ ] ]
EORTXH 3/64/
13) disyuncin_eventos := OR HYHQWR [GLV\XQFLyQBHYHQWRV]
14) evento:= INSERT | DELETE | UPDATE [OF comalista_nombre_atributo]

$QH[R/HQJXDMH3/64/

(VWUXFWXUDGHXQEORTXH3/64/
DECLARE Seccin de declaracin de variables;
BEGIN Sentencias del bloque; END
6HFFLyQGHGHFODUDFLyQGHYDULDEOHV
QRPEUHBYDULDEOH tipo_dato
tipo_dato::= {NUMBER CHAR( ) DATE }
6HQWHQFLDVGHOEORTXH3/64/
secuencia_de_sentencias::= sentencia [;secuencia_de_sentencias]
,) condicin 7+(1 secuencia_de_sentencias
[; (/6( secuencia_de_sentencias]; (1',)
:+,/( condicin /223 secuencia_de sentencias ;
(1'/223
)25FRQWDGRU,1 PtQLPR .. Pi[LPR/223secuencia_de_sentencias ; (1'/223
- Asignacin: QRPEUHBYDULDEOH  H[SUHVLyQ
- Sentencias SQL: INSERT, DELETE, UPDATE, SELECT... INTO...
Manejo de errores:RAISE_APPLICATION_ERROR (QURBHUURU, ' PHQVDMH
)
Sentencias de entrada-salida: dbms_output.put_line ('PHQVDMH').

12
Para facilitar el manejo de la sintaxis, a continuacin se listan todas las categoras sintcticas de
Oracle 8 que se han definido ordenadas alfabticamente indicando, con el nmero que las
acompaa, en qu orden se puede encontrar su definicin.
cuando_comprobar 7
definicin_atributo 3
definicin_operacin_grant 11
definicin_regla 12
definicin_relacin_bsica 1
definicin_vista 10
disyuncin_eventos 13
elemento_relacin_bsica 2
evento 14
modificacin_relacin 8
restriccin 9
restriccin_atributo 5
restriccin_relacin 6
tipo_datos 4

También podría gustarte