Está en la página 1de 21

Pg.

1 de 21


Departamento de Lenguajes y Sistemas Informticos
E.T.S. Ingeniera Informtica. Universidad de Sevilla

Avda Reina Mercedes s/n. 41012 Sevilla
Tlf/Fax 954 557 139 E-mail lsi@lsi.us.es Web www.lsi.us.es


E.T.S. Ingeniera
Informtica





















Bases de Datos

SQL







Sevilla, octubre 2007
V 2007.10.1
Bases de Datos
Sevilla, octubre 2007, V 2007.10.1
SQL

Pg. 2 de 21


1 SQL (STRUCTURED QUERY LANGUAGE).........................................3
1.1 OBJETIVOS Y ALCANCE DE SQL ..............................................................................3
1.2 EVOLUCIN DEL MODELO RELACIONAL.................................................................4
2 DEFINICIN DE DATOS EN SQL (DDL) ...........................................4
2.1 DOMINIOS SQL2.................................................................................................4
2.2 CREATE TABLE..................................................................................................5
3 CONSULTAS SIMPLES............................................................................5
3.1 CONSULTAS DE VARIAS TABLAS....................................................................6
3.2 EXISTS ..................................................................................................................6
3.3 IN...........................................................................................................................6
3.4 ANY, ALL ..............................................................................................................7
3.5 BETWEEN............................................................................................................8
3.6 LIMITACIN DE LA LISTA DE RESULTADOS..............................................8
3.7 SUBCADENAS (LIKE) .........................................................................................9
3.8 ORDENACIN (ORDER BY).............................................................................9
4 CONSULTAS AVANZADAS................................................................... 10
4.1 JOIN NATURAL Y OUTER JOIN..................................................................... 10
4.2 FUNCIONES AGREGADAS.............................................................................. 11
4.3 GROUP BY.......................................................................................................... 12
4.4 EJEMPLO............................................................................................................ 13
5 ACTUALIZACIN DE DATOS............................................................. 14
5.1 INSERT............................................................................................................... 14
5.2 DELETE.............................................................................................................. 14
5.3 UPDATE.............................................................................................................. 14
6 VISTAS...................................................................................................... 14
7 SINTAXIS SQL-2 ..................................................................................... 15
7.1 INTRODUCCIN.................................................................................................... 15
7.2 LENGUAJE DE DEFINICIN DE DATOS (DDL) ..................................................... 15
7.3 LENGUAJE DE MANIPULACIN DE DATOS (DML)................................................ 17

Bases de Datos
Sevilla, octubre 2007, V 2007.10.1
SQL

Pg. 3 de 21

1 SQL (Structured Query Language)
1.1 Objetivos y alcance de SQL
a) SQL es un lenguaje estndar(ISO) para definicin manipulacin en SGBD relacionales.
b) El DML de SQL es un lenguaje de especificacin; es decir, las expresiones definen el resultado
esperado, dejando que el SGBD se encargue de resolver el mejor mtodo para ejecutar dicha
especificacin(optimizacin de la consulta); estos mtodos generados por el subsistema de proceso
de consultas se denominan planes
1
de acceso o planes de ejecucin de la consulta.
c) La gramtica DML est basada en el clculo relacional orientado a tuplas.
d) Permite:
Definicin de tablas y vistas.
Especificar un modelo de seguridad de acceso a los datos (definicin de usuarios, niveles de
autorizacin o acceso a los datos).
Definir restricciones de integridad declarativa.
Especificar transacciones.
El DML de SQL puede ser utilizado en lenguajes de programacin de propsito general
como C o Pascal o bien en lenguajes especficos del fabricante (p.ej. PL/SQL en
ORACLE, TRANSACT SQL en MS-SQL Server)..

1
Un plan de ejecucin de una consulta es un programa a bajo nivel, generado por el subsistema de proceso de consultas
del SGBD relacional. Este plan de acceso contiene el mtodo de acceso a los datos en funcin de la situacin del
esquema de la base de datos(esquema interno, donde figuran detalles de ndices, direccionamiento, etc.) y su volumetra
(volmenes de datos de las tablas en la base de datos)..
Bases de Datos
Sevilla, octubre 2007, V 2007.10.1
SQL

Pg. 4 de 21

1.2 Evolucin del modelo relacional
1968 - 1970

Surge el modelo


1970 . . .

Desarrollos tericos



1973 - 1978

Prototipos (Ingres, sistema R, etc. . .)


P
R
E
R
E
L
A
C
I
O
N
A
L
1978

QBE

1979

Oracle

1980

Ingres

1981

SQL


1982

DB2

1986

SQL/ ANS
1987

SQL ISO (9075)
1989

SQL Addendum
1989

Manifiesto de los SGBO
R
E
L
A
C
I
O
N
A
L
1990

Modelo Relacional Versin 2
1990

Manifiesto de los SGBO- 3G
1992

SQL 92
1995

3
er
Manifiesto
P
O
S
T
R
E
L
A
C
I
O
N
A
L

1999

SQL 3

2 Definicin de datos en SQL (DDL)
2.1 DOMINIOS SQL2
En SQL2 es posible declarar un dominio y usar su nombre.

CREATE DOMAIN <nombre_dominio> AS <tipo_datos>;

Entre los tipos de datos disponibles para atributos estn los numricos, cadena de caracteres,
cadena de bit, fecha y hora.

a) Los tipos de datos numricos incluyen nmeros enteros de diversos tamaos (INTEGER
o INT, y SMALLINT) y nmeros reales de diversas precisiones (FLOAT, REAL,
DOUBLE PRECISION). Podemos declarar nmeros con formato empleando
DECIMAL(i,j) ( o DEC(i,j) NUMERIC(i,j)), donde i (precisin) es el nmero total de
dgitos decimales y j (escala) el nmero de dgitos que aparecen despus del punto decimal.
b) Los tipos de cadena de caracteres tienen longitud fija (CHAR(n) o CHARACTER(n) o
variable VARCHAR (n) o CHAR VARYING (n) o CHARACTER VARYING (n).
Bases de Datos
Sevilla, octubre 2007, V 2007.10.1
SQL

Pg. 5 de 21

c) Los tipos de datos de cadena de bit tienen longitud fija n (BIT(n)) o (BIT VARYING (n)).
d) SQL2 cuenta con nuevos tipos de datos para fecha y hora DATE y TIME.
Ej.
CREATE DOMAIN importes AS DECIMAL(9,4);
2.2 CREATE TABLE
La estructura de datos soportada por SQL es la tabla como soporte a la definicin de una relacin
del modelo RM/B.

La instruccin CREATE TABLE sirve para especificar una nueva tabla

CREATE DOMAIN codigos AS VARCHAR(4) NOT NULL;
CREATE DOMAIN nombres AS VARCHAR(20);
CREATE DOMAIN cantidades AS INTEGER;

CREATE TABLE productos (
Pid codigos,
Pdes nombres,
Ppeso cantidades,
Pprecio cantidades,
PRIMARY KEY (pid) );
3 Consultas simples
La sentencia bsica para recuperar informacin en SQL es la sentencia SELECT.
SELECT <lista de atributos>
FROM <lista de tablas>
WHERE <condicin>

Productos






a) Descripcin y cdigo de piezas de todas las piezas existentes.

SELECT pdesc, pid
FROM Productos;




pdesc pid
Televisor M1 P1
Televisor M2 P2
Televisor M3 P3
Mini TK67 P10
Mini TK68 P11
b) Piezas (todos los atributos) de peso mayor o igual a 30.
SELECT *
FROM Productos
WHERE ppeso 30;

pid pdesc ppeso pprecio
P2 Televisor M2 30 78000
P3 Televisor M3 35 97000

pid pdesc ppeso pprecio
P1 Televisor M1 27 56000
P2 Televisor M2 30 78000
P3 Televisor M3 35 97000
P10 Mini TK67 12 112000
P11 Mini TK68 10 142000
Bases de Datos
Sevilla, octubre 2007, V 2007.10.1
SQL

Pg. 6 de 21

3.1 CONSULTAS DE VARIAS TABLAS
a) Cdigos de los almacenes que tienen existencias del producto Televisor M2 y cantidad
que tienen en stock.

AExistencias
Aid pid acant
A2 P1 156
A2 P2 1234
A2 P3 69
A2 P10 120
A2 P11 345
A3 P3 5000
A4 P1 200
A4 P2 956
A4 P3 134
A4 P10 120
A4 P11 542



Almacenes
aid adir aloc
A2 C/. Baja, 4 Alcal de Guadaira
A3 Poligono Calonge, N12/a Sevilla
A4 P.I. Armilla, A-45 Granada

Productos
pid pdesc ppeso pprecio
P1 Televisor M1 27 56000
P2 Televisor M2 30 78000
P3 Televisor M3 35 97000
P10 Mini TK67 12 112000
P11 Mini TK68 10 142000


SELECT AE.aid, acant
FROM AExistencias AE, Productos P
WHERE AE.pid = P.pid
AND pdesc = Televisor M2;

AE.aid acant
A2 1234
A4 956

3.2 EXISTS
La funcin EXISTS sirve para comprobar si el resultado de una consulta anidada contiene
tuplas.
Rescribiendo la expresin anterior:
a) Cdigos de los almacenes que tienen existencias del producto Televisor M2 y cantidad
que tienen en stock.

SELECT aid, acant
FROM AExistencias AE
WHERE EXISTS ( SELECT *
FROM Productos P
WHERE P.pid = AE.pid
AND pdesc = Televisor M2 ) ;

b) Cdigos de los almacenes que no tienen existencias de productos.
SELECT aid
FROM Almacenes A
WHERE NOT EXISTS ( SELECT * FROM Aexistencias AE
WHERE AE.aid = A.aid ) ;

3.3 IN
El operador de comparacin IN permite comparar un valor individual v (generalmente un
nombre de atributo) con un conjunto de valores V (generalmente una consulta anidada).
Devuelve TRUE si v es uno de los elementos de V.
Bases de Datos
Sevilla, octubre 2007, V 2007.10.1
SQL

Pg. 7 de 21

Es posible rescribirla la consulta anterior utilizando el operador de comparacin IN.
a) Cdigos de los almacenes que tienen existencias del producto Televisor M2 y cantidad
que tienen en stock.

SELECT aid, acant
FROM AExistencias
WHERE pid IN ( SELECT pid
FROM Productos
WHERE pdesc = Televisor M2 ) ;

Tambin es posible utilizar IN con un conjunto explcito de valores:

b) Cdigo y peso de los productos cuyo peso sea 10, 12 o 27

SELECT ppid, ppeso
FROM Productos
WHERE ppeso IN (10, 12, 27) ;

ppid ppeso
P1 27
P10 12
P11 10
3.4 ANY, ALL
Permiten comparar un valor individual v (nombre de atributo) con un conjunto de valores V
(consulta anidada).
El operador =ANY devuelve TRUE si el valor de v es igual a algn valor del conjunto V. Es
equivalente a IN.

a) Cdigos de los almacenes que tienen existencias del producto Televisor M2 y cantidad
que tienen en stock.

SELECT aid, acant
FROM AExistencias
WHERE pid =ANY ( SELECT pid
FROM Productos
WHERE pdesc = Televisor M2 ) ;


El operador =ALL devuelve TRUE si el valor de v es igual a todos los valores del conjunto
V.
Otros operadores que se pueden utilizar con ANY y con ALL son >, >=, <, <= y <>.

El operador >ALL devuelve TRUE si el valor de v es mayor que todos los valores del
conjunto V.

b) Descripcin de los productos de precio superior a todos los productos que tiene el
almacen A2.

SELECT pdesc
FROM Productos
WHERE pprecio > ALL ( SELECT pprecio
FROM Productos P, Aexistencias AE
WHERE P.pid = AE.pid AND aid = A2 ) ;

Bases de Datos
Sevilla, octubre 2007, V 2007.10.1
SQL

Pg. 8 de 21

3.5 BETWEEN
c) Cdigo y peso de los productos cuyo peso est entre 10 y 27.

SELECT ppid, ppeso
FROM Productos
WHERE ppeso
BETWEEN 10 AND 27;
ppid ppeso
P1 27
P10 12
P11 10
3.6 LIMITACIN DE LA LISTA DE RESULTADOS
Para limitar los resultados de una consulta se pueden utilizar las palabras clave DISTINCT y
TOP.

DISTINCT. Elimina las tuplas repetidas del resultado de una consulta.

a) Cdigo y localidad de los almacenes que tienen algn producto en existencia.
AExistencias
aid pid acant
A2 P1 156
A2 P2 1234
A2 P3 69
A2 P10 120
A2 P11 345
A3 P3 5000
A4 P1 200
A4 P2 956
A4 P3 134
A4 P10 120
A4 P11 542








Almacenes
aid Adir aloc
A2 C/. Baja, 4 Alcal de Guadaira
A3 Poligono Calonge, N12/a Sevilla
A4 P.I. Armilla, A-45 Granada


SELECT DISTINCT A.aid, aloc
FROM AExistencias AE, Almacenes A
WHERE AE.aid = A.aid;

aid Aloc
A2 Alcal de Guadaira
A3 Sevilla
A4 Granada


TOP
2
. Limita el nmero de filas.
SELECT TOP N <lista de atributos> limita el nmero de filas a mostrar a N.

b) En la consulta anterior obtener slo las dos primeras filas.

SELECT DISTINCT TOP 2 A.aid, aloc
FROM AExistencias AE, Almacenes A
WHERE AE.aid = A.aid;

aid Aloc
A2 Alcal de Guadaira
A3 Sevilla



2
TOP no es estndar. No se puede utilizar en WinRDBi
Bases de Datos
Sevilla, octubre 2007, V 2007.10.1
SQL

Pg. 9 de 21

3.7 SUBCADENAS (LIKE)
Para comparar cadenas de caracteres se utiliza el operador de comparacin LIKE.
Las cadenas parciales se especifican mediante los caracteres reservados % y -.

a) Cdigos de piezas cuya descripcin empieza por Televisor
Productos
Pid pdesc ppeso pprecio
P1 Televisor M1 27 56000
P2 Televisor M2 30 78000
P3 Televisor M3 35 97000
P10 Mini TK67 12 112000
P11 Mini TK68 10 142000

SELECT pid
FROM Productos
WHERE pdesc LIKE Televisor%;

pid
P1
P2
P3

b) Cdigo de productos que en la descripcin incluyen TK seguido por un carcter y
termina en 8.

SELECT pid
FROM Productos
WHERE pdesc LIKE %TK_8;

pid
P11

3.8 ORDENACIN (ORDER BY)
a) Cdigo de almacenes y cantidad de cada producto que tienen en stock, ordenado por
almacn y dentro de cada almacn por cantidad de mayor a menor. Considerando
nicamente los productos cuyas cantidades en stock en cada almacn estn entre 200 y
2000
AExistencias
aid pid acant
A2 P1 156
A2 P2 1234
A2 P3 69
A2 P10 120
A2 P11 345
A3 P3 5000
A4 P1 200
A4 P2 956
A4 P3 134
A4 P10 120
A4 P11 542


SELECT aid, pid, acant
FROM AExistencias
WHERE acant BETWEEN 200 AND 2000
ORDER BY aid, acant DESC;


aid pid acant
A2 P2 1234
A2 P11 345
A4 P2 956
A4 P11 542
A4 P1 200
Bases de Datos
Sevilla, octubre 2007, V 2007.10.1
SQL

Pg. 10 de 21

4 Consultas avanzadas
4.1 JOIN NATURAL y OUTER JOIN
a) Cdigo de almacn, cdigo y descripcin del producto y cantidad en stock.

AExistencias
aid pid acant
A2 P1 156
A2 P2 1234
A2 P3 69
A2 P10 120
A2 P11 345
A3 P3 5000
A4 P1 200
A4 P2 956
A4 P3 134
A4 P10 120
A4 P11 542






Productos
pid pdesc ppeso pprecio
P1 Televisor M1 27 56000
P2 Televisor M2 30 78000
P3 Televisor M3 35 97000
P10 Mini TK67 12 112000
P11 Mini TK68 10 142000

SELECT aid, AE.pid, pdesc, acant
FROM AExistencias AE, Productos P
WHERE AE.pid = P.pid;

Se puede especificar primero la reunin de las relaciones AExistencias y Productos y
seleccionar luego los atributos y tuplas deseadas. La consulta quedara:
SELECT aid, AE.pid, pdesc, acant
FROM ( AExistencias AS AE JOIN Productos AS P ON AE.pid = P.pid );
(JOIN es equivalente a INNER JOIN)

El resultado ser:

Aid AE.pid pdesc acant
A2 P1 Televisor M1 156
A2 P2 Televisor M2 1234
A2 P3 Televisor M3 69
A2 P10 Mini TK67 120
A2 P11 Mini TK68 345
A3 P3 Televisor M3 5000
A4 P1 Televisor M1 200
A4 P2 Televisor M2 956
A4 P3 Televisor M3 134
A4 P10 Mini TK67 120
A4 P11 Mini TK68 542

Al incluir el producto nuevo P20 en la tabla Productos:

Productos
pid Pdesc ppeso pprecio
P1 Televisor M1 27 56000
P2 Televisor M2 30 78000
P3 Televisor M3 35 97000
P10 Mini TK67 12 112000
P11 Mini TK68 10 142000
P20 Equipo Nuevo 10 100
Bases de Datos
Sevilla, octubre 2007, V 2007.10.1
SQL

Pg. 11 de 21

La consulta:
SELECT aid, AE.pid, pdesc, acant
FROM ( AExistencias AS AE JOIN Productos AS P ON AE.pid = P.pid );

Devuelve el mismo resultado anterior. No se visualiza la tupla nueva ya que no tiene
correspondencia en la tabla AExistencias.

Para que aparezca dicha tupla se utiliza el join externo por la derecha.
SELECT aid, AE.pid, pdesc, acant
FROM ( AExistencias AS AE RIGHT JOIN Productos AS P ON AE.pid = P.pid );

El resultado ser:

aid AE.pid pdesc acant
A2 P1 Televisor M1 156
A2 P2 Televisor M2 1234
A2 P3 Televisor M3 69
A2 P10 Mini TK67 120
A2 P11 Mini TK68 345
A3 P3 Televisor M3 5000
A4 P1 Televisor M1 200
A4 P2 Televisor M2 956
A4 P3 Televisor M3 134
A4 P10 Mini TK67 120
A4 P11 Mini TK68 542
Equipo Nuevo

(RIGHT JOIN es equivalente a RIGHT OUTER JOIN)

De igual forma para obtener las tuplas de AExistencias que no tengan correspondencias en
Productos se utilizara el LEFT JOIN
(LEFT JOIN es equivalente a LEFT OUTER JOIN)
4.2 FUNCIONES AGREGADAS
COUNT devuelve el nmero de filas o valores especificados en una consulta.
SUM, MAX, MIN, AVG se aplican a un conjunto o multiconjunto de valores numricos y
devuelven respectivamente la suma, el valor mximo, el mnimo y el promedio de dicho
valores.
Estas funciones se pueden usar con la clusula SELECT o con la clusula HAVING.

a) Numero de productos que existen.

pid pdesc ppeso pprecio
P1 Televisor M1 27 56000
P2 Televisor M2 30 78000
P3 Televisor M3 35 97000
P10 Mini TK67 12 112000
P11 Mini TK68 10 142000

SELECT COUNT (*)
FROM Productos ;

COUNT (*)
5


Bases de Datos
Sevilla, octubre 2007, V 2007.10.1
SQL

Pg. 12 de 21

b) Calcular la suma de las cantidades, la cantidad mxima, la mnima, la media y contar
todos los productos que existen en stock.

aid pid Acant
A2 P1 156
A2 P2 1234
A2 P3 69
A2 P10 120
A2 P11 345
A3 P3 5000
A4 P1 200
A4 P2 956
A4 P3 134
A4 P10 120
A4 P11 542

SELECT SUM(acant), MAX(acant), MIN(acant), AVG(acant), COUNT(*)
FROM AExistencias ;

SUM(acant) MAX(acant) MIN(acant) AVG(acant) COUNT(*)
8876 5000 69 872 11

c) Contar los productos de los que haya existencia en algn almacn.
SELECT COUNT (DISTINCT pid)
FROM AExistencias ;

COUNT (*)
5
4.3 GROUP BY
Cuando se quiera aplicar las funciones agregadas a subgrupos de tuplas de una relacin
agruparemos las tuplas que tienen el mismo valor para ciertos atributos. Los llamaremos
atributos de agrupacin y podremos aplicar las funciones a cada uno de dichos grupos.

Para especificar los atributos de agrupacin se utiliza la clusula GROUP BY.
Los atributos de agrupacin pueden aparecer en la clusula SELECT.

a) Calcular para cada almacn el nmero de productos en stock y la cantidad total.

aid pid acant
A2 P1 156
A2 P2 1234
A2 P3 69
A2 P10 120
A2 P11 345
A3 P3 5000
A4 P1 200
A4 P2 956
A4 P3 134
A4 P10 120
A4 P11 542

SELECT aid, COUNT(*), SUM(acant)
FROM AExistencias
GROUP BY aid;

aid COUNT(*) SUM(acant)
A2 5 1924
A3 1 5000
A4 5 1952
Bases de Datos
Sevilla, octubre 2007, V 2007.10.1
SQL

Pg. 13 de 21

HAVING
HAVING especifica una condicin sobre el grupo de tuplas asociado a cada valor de los
atributos de agrupacin (clases de equivalencia). Slo los grupos que cumplan la condicin
entrarn en el resultado de la consulta.
b) Para las tiendas que hayan hecho ms de un pedido al mismo almacn calcular la
cantidad total pedida.

Pedidos
pdid tid aid pid cant fecha
PD10 T1 A2 P1 100 10/12/03
PD20 T1 A2 P2 150 12/12/03
PD30 T2 A2 P10 50 14/12/03
PD40 T2 A4 P11 70 11/12/03
PD50 T4 A2 P10 80 10/12/03
PD60 T4 A4 P11 25 13/12/03
PD70 T4 A2 P11 40 14/12/03

SELECT tid, aid, SUM(acant)
FROM Pedidos
GROUP BY aid, tid
HAVING COUNT(*) > 1;

tid aid SUM(acant)
T1 A2 250
T4 A2 120

4.4 EJEMPLO
a) Almacn con mayor nmero de productos.
Utilizando ALL
SELECT AE.aid, Sum(AE.acant)
FROM AE
GROUP BY AE.aid
HAVING Sum(AE.acant) >= ALL (SELECT Sum(AE.acant)
FROM AE
GROUP BY AE.aid);

Utilizando TOP
SELECT AE.aid, Sum(AE.acant)
FROM AE
GROUP BY AE.aid
HAVING Sum(AE.acant) = ( SELECT TOP 1 Sum(AE.acant)
FROM AE
GROUP BY AE.aid ORDER BY 1 DESC);

Mediante SELECT anidados
SELECT AE.aid, sum(AE.acant)
FROM AE
GROUP BY AE.aid
HAVING sum(acant) = ( SELECT Max(total)
FROM ( SELECT Sum(Sx.acant) as total
FROM AE
GROUP BY AE.aid ) );

Bases de Datos
Sevilla, octubre 2007, V 2007.10.1
SQL

Pg. 14 de 21

5 Actualizacin de datos
5.1 INSERT
Sirve para aadir tuplas a la BD
INSERT INTO Productos
VALUES (P20, Cadena A100, 20,200);

Se pueden aadir mltiples filas utilizando la clasula SELECT.

INSERT INTO ProductoPedidos (Pid, Nombre, Precio)
SELECT Pid, Pdesc, Pprecio
FROM Productos
WHERE pprecio >30;


5.2 DELETE
Elimina tuplas de una relacin. La eliminacin puede propagarse a tuplas de otras relaciones si tal
accin est especificada en las restricciones de integridad referencial.
DELETE FROM Productos
WHERE pprecio >30;


5.3 UPDATE
Modifica los valores de los atributos.
UPDATE Productos
SET pprecio = 200
WHERE pid = P1;

UPDATE Productos
SET pprecio = pprecio * 1.2
WHERE pid IN (SELECT pid FROM pedidos) ;



6 Vistas
Una vista es una estructura tabular derivada de otras tablas. Una vista no se materializa en SQL; se
genera en el momento de su ejecucin.
CREATE VIEW Producto_pedido
AS SELECT PD.pdid, PD.pid, P.pdesc, PD.cantidad
FROM productos P, pedidos PD
WHERE P.pid = PD.pid;
Bases de Datos
Sevilla, octubre 2007, V 2007.10.1
SQL

Pg. 15 de 21

7 Sintaxis SQL-2
7.1 Introduccin
Se presenta un resumen de la sintaxis de SQL segn el estndar ISO 9075 (SQL-92),dividido en:
- Lenguaje de Definicin de Datos (LDD),
- Lenguaje de Manipulacin de Datos (LMD), y
- Lenguaje de Administracin de Datos (LAD).
La nomenclatura utilizada es una extensin de la Forma Normal de Backus (BNF) siendo:
< > representa los smbolos no terminales del lenguaje
::= es el operador de definicin
[ ] indica elementos opcionales
{} agrupa elementos en una frmula
| indica una alternativa
... indica repeticin:
7.2 Lenguaje de Definicin de Datos (DDL)
<definicin de esquema >::=
CREATE SCHEMA <clusula de nombre de esquema>
[ <elemento de esquema> ... ]
<clusula de nombre de esquema> ::=
<nombre de esquema>
| AUTHORIZATION <id. de autorizacin de usuario>
|<nombre de esquema> AUTHORIZATION <id. de autorizacin de usuario>
<elemento de esquema> ::=
<definicin de dominio>
| <definicin de tabla>
| <definicin de vista>
| <definicin de asercin>
<definicin de dominio> ::=
CREATE DOMAIN <nombre de dominio> [ AS ] <tipo de datos>
[ <clusula de defecto> ]
[ <restriccin de dominio> ]
<clusula de defecto> ::=
DEFAULT <opcin por defecto>
<opcin por defecto> ::=
<literal>
|<funcin de valor tiempo/fecha>
| USER
| SYSTEM
| USER
| NULL
<restriccin de dominio> ::=
[ <definicin de nombre de restriccin> ]
< definicin de restriccin de verificacin>
[ <atributos de restriccin> ]
<definicin de nombre de restriccin> ::=
CONSTRAINT <nombre de restriccin>
<definicin de restriccin de verificacin> ::=
CHECK <parent. izq.> <condicin de bsqueda> <parent. dcho.>
<atributos de restriccin> ::=
<tiempo de verificacin de restriccin> [ [NOT] DEFERRABLE ]
| [ [NOT] DEFERRABLE ] <tiempo de verificacin de restriccin>
Bases de Datos
Sevilla, octubre 2007, V 2007.10.1
SQL

Pg. 16 de 21

<tiempo de verificacin de restriccin> ::=
INITIALLY DEFERRED
| INITIALLY INMEDIATE
<definicin de tabla> ::=
CREATE [ {GLOBAL|LOCAL} TEMPORARY ] TABLE <nombre de tabla>
<lista de elementos de tabla>
<lista de elementos de tabla> ::=
<parntesis izq.> <elemento de tabla>
[{<coma> <elemento de tabla>} ... ] <parntesisdcho.>
<elemento de tabla> ::=
<definicin de columna>
| <definicin de restriccin de tabla>
<definicin de columna> ::=
<nombre de columna> { <tipo de datos> | <nombre de dominio>}
[ <clasula de defecto> ]
[ <definicin de restriccin de columna> .... ]
<definicin de restriccin de columna> ::=
[ <definicin de nombre de restriccin> ]
<restriccin de columna>
[ <atributos de restriccin> ]
<restriccin de columna> ::=
NOT NULL
| <especificacin de unicidad>
| <especificacin de referencia>
| <definicin de restriccin de verificacin>
<definicin de restriccin de tabla> ::=
[ <nombre de definicin de restriccin> ]
<restriccin de tabla>
[ <atributos de restriccin> ]
<restriccin de tabla> ::=
<definicin de restriccin de unicidad>
| <definicin de restriccin referencial>
| <definicin de restriccin de verificacin>
<definicin de restriccin de unicidad> ::=
<especificacin de unicidad>
<parent. izq.> <lista de columnas nicas> <parent. dcho.>
<especificacin de unicidad> ::=
UNIQUE | PRIMARY KEY
<lista de columnas nicas> ::= <lista de nombre de columnas>
<definicin de restriccin referencial> ::=
FOREIGN KEY <parent. izq.> <columnas que ref.> <parent. dcho.>
<especificacin de la referencia>
<especificacin de la referencia> ::=
REFERENCES <columnas y tabla referenciadas>
[ <accin referencial disparada> ]
<columnas que ref.> ::= <lista de columnas de referencia>
<columnas y tabla referenciadas> ::=
<nombre de tabla> [ <parent. izq.> <lista de columnas de referencia> <parent. dcho.> ]
<lista de columnas de referencia> ::= <lista de nombres de columnas>
<accin referencial disparada> ::=
<regla de modificacin> [ <regla de borrado> ]
| <regla de borrado> [regla de modificacin]
<regla de modificacin> ::= ON UPDATE <accin referencial>
<regla de borrado> ::= ON DELETE <accin referencial>
Bases de Datos
Sevilla, octubre 2007, V 2007.10.1
SQL

Pg. 17 de 21

<accin referencial> ::=
CASCADE
| SET NULL
| SET DEFAULT
<definicin de vista> ::=
CREATE VIEW <nombre de tabla>
[ <parent. izq.> <lista de columnas de vista> <parent. dcho.>]
AS <expresin de consulta>
[ WITH CHECK OPTION ]
<lista de columnas de vista> ::= <lista de nombres de columnas>
<definicin de asercin> ::=
CREATE ASSERTION <nombre de restriccin>
<verificacin de asercin> [ <atributos de restriccin> ]
<verificacin de asercin> ::=
CHECK <parent. izq.> <condicin de bsqueda> <parent. dcho.>
7.3 Lenguaje de Manipulacin de Datos (DML)
<expresin de consulta>::=
<expresin de consulta de no combinacin>
| <tabla combinada>
<expresin de consulta de no combinacin> ::=
<trmino de consulta de no combinacin>
| <expresin de consulta> UNION [ALL]
[ <especificacin de correspondencia> ] <trmino de consulta>
| <expresin de consulta> EXCEPT [ALL]
[ <especificacin de correspondencia> ] <trmino de consulta>
<trmino de consulta> ::=
<trmino de consulta de no combinacin>
| <tabla combinada>
<trmino de consulta de no combinacin> ::=
<primario de consulta de no combinacin>
|<trminodeconsulta> INTERSECT [ALL]
[ <especificacin de correspondencia> ] <primario de consulta>
<primario de consulta> ::=
<primario de consulta de no combinacin>
| <tabla combinada>
<primario de consulta de no combinacin> ::=
<tabla simple>
| <parent. izq.> <expresin de combinacin de no consulta> <parent. dcho.>
<tabla simple> ::=
<especificacin de consulta>
| <constructor de valor de tabla>
| <tabla explcita>
<tabla explcita> ::= TABLE <nombre de tabla>
<especificacin de correspondencia> ::=
CORRESPONDING [ BY <parent. izq.> <lista de columnas que corresponden><parent. dcho.> ]
<lista de columnas que corresponden> ::= <lista de columnas>
<constructor de valor de tabla> ::=
VALUES <lista de constructores de valores de tabla>
<lista de constructores de valores de tabla> ::=
<constructor de valor de fila> [ { <coma> <constructor de valor de fila> ... }
<constructor de valor de fila> ::=
<elemento constructor de valor de fila>
| <parent. izq.> <lista de constructores de valor de fila> <parent. dcho.>
Bases de Datos
Sevilla, octubre 2007, V 2007.10.1
SQL

Pg. 18 de 21

| <subconsulta de fila>
<lista de constructores de valor de fila> ::=
<elemento constructor de valor de fila>
[ {<coma> <elemento constructor de valor de fila>} ... ]
<elemento constructor de valor de fila> ::=
<expresin de valor>
| <especificacin de nulos>
| DEFAULT
<especificacin de nulos> ::= NULL
<subconsulta de fila> ::= <subconsulta>
<subconsulta> ::= <parent. izq.> <expresin de consulta> <parent. dcho.>
<especificacin de consulta> ::=
SELECT [<cuantificador de conjunto>] <lista de consulta> <expresin de tabla>
<lista de consulta> ::=
<asterisco>
| <sublista de consulta> [{<coma> <sublista de consulta>} ...]
<sublista de consulta> ::=
<columna derivada>
| <calificador> <punto> <asterisco>
<columna derivada> ::= <expresin de valor> [<clusula as>]
<clusula as> ::= [AS] <nombre de columna>
<cuantificador de conjunto> ::= DISTINCT | ALL
<expresin de tabla> ::=
<clusula from>
[ <clusula where> ]
[ <clusula group by> ]
[ <clusula having>]
<clusula from> ::= FROM <referencia a tabla> [ { <coma> <referencia a tabla> } ... ]
<referencia a tabla> ::=
<nombre de tabla> [ [AS] <nombre de correlacin>
[<parent. izq.> <lista de columnas derivadas> <parent. dcho.]]
| <tabla derivada> [AS] <nombre de correlacin>
[<parent. izq.> <lista de columnas derivadas> <parent. dcho.]
| <tabla combinada>
<tabla derivada> ::= <subconsulta de tabla>
<lista de columnas derivadas> ::= <lista de nombres de columnas>
<lista de nombres de columnas> ::=
<nombre de columna> [ { <coma> <nombre de columna> } ... ]
<nombre de correlacin> ::= <identificador>
<calificador> ::=
<nombre de tabla>
| <nombre de correlacin>
<tabla combinada> ::=
<combinacin cruzada>
| <combinacin calificada>
| <parent. izq.> <tabla combinada> <parent. dcho.>
<combinacin cruzada> ::=
<referencia a tabla> CROSS JOIN <referencia a tabla>
<combinacin calificada> ::=
<referencia a tabla> [NATURAL] [<tipo de combinacin>] JOIN <referencia a tabla>
[<especificacin de combinacin>]
<especificacin de combinacin> ::=
<condicin de combinacin>
| <combinacin de columnas nominadas>
Bases de Datos
Sevilla, octubre 2007, V 2007.10.1
SQL

Pg. 19 de 21

<condicin de combinacin> ::= ON <condicin de bsqueda>
<combinacin de columnas nominadas> ::=
USING <parent. izq.> <lista de columnas de combinacin> <parent. dcho.>
<tipo de combinacin> ::=
INNER
| <tipo de combinacin externa> [OUTER]
| UNION
<tipo de combinacin externa> ::=
LEFT
| RIGHT
| FULL
<lista de columnas de combinacin> ::= <lista de nombres de columnas>
<clusula where> ::= WHERE <condicin de bsqueda>
<clusula group by> ::=
GROUP BY <lista de referencias a columna de agrupamiento>
<lista de referencias a columna de agrupamiento> ::=
<referencia a columna de agrupamiento>[{<coma><referencia a columnas de agrupamiento>}...]
<referencia a columna de agrupamiento> ::=
<referencia a columnas>
<referencias a columnas> ::=
[ <calificador> <punto> ] <nombre de columnna>
<clusula having> ::= HAVING <condicin de bsqueda>
<condicin de bsqueda> ::=
<trmino booleano>
| <condicin de bsqueda> OR <trmino booleano>
<trmino booleano> ::=
<factor booleano>
| <factor booleano> AND <factor booleano>
<factor booleano> ::=
[ NOT ] <test booleano>
<test booleano> ::=
<primario booleano> [ IS [ NOT ] <valor lgico> ]
<valor lgico> ::=
TRUE
| FALSE
| UNKNOWN
<primario booleano> ::=
<predicado>
| <parent. izq.> <condicin de bsqueda> <parent. dcho.>
<predicado> ::=
<predicado de comparacin>
| <predicado entre>
| <predicado en>
| <predicado parece>
| <predicado de nulidad>
| <predicado de comparacin cuantificada>
| <predicado existe>
| <predicado de unicidad>
| <predicado de concordancia>
| <predicado de solapamiento>
<predicado de comparacin> ::=
<constructor de valor de fila> <operacin de comparacin> <constructor de valor de fila>
<predicado entre> ::=
<constructor de valor de fila> ::= [ NOT ] BETWEEN
Bases de Datos
Sevilla, octubre 2007, V 2007.10.1
SQL

Pg. 20 de 21

<constructor de valor de fila> AND <constructor de valor de fila>
<predicado en> ::=
<constructor de valor de fila>
[ NOT ] IN <valor de predicado en>
<valor de predicado en> ::=
<subconsulta de tabla>
| <parent. izq.> <lista de valores en> <parent. dcho.>
<lista de valores en> ::=
<expresin de valor> { <coma> <expresin de valor> } ...
<predicado parece> ::=
valor de concordancia> [ NOT ] LIKE <patrn>
<valor de concordancia> ::= <expresin de valores caracter>
<patrn> ::= <expresin de valores caracter>
<predicado de nulidad> ::=
constructor de valor de fila> IS [ NOT ] NULL
<predicado de comparacin cuantificada> ::=
constructor de valor de fila> <operacin de comparacin>
<cuantificador> <subconsulta de tabla>
<cuantificador> ::= <todos> | <algunos>
<todos> ::= ALL
<algunos> ::= SOME | ANY
<predicado existe> ::= EXISTS <subconsulta de tabla>
<predicado de unicidad> ::= UNIQUE <subconsulta de tabla>
<predicado de concordancia> ::=
<constructor de valor de fila>MATCH[ UNIQUE ][ PARTIAL | FULL]<subconsulta de tabla>
<predicado de solapamiento> ::=
<constructor de valor de fila 1> OVERLAPS <constructor de valor de fila 2>
<constructor de valor de fila 1> ::= <constructor de valor de fila>
<constructor de valor de fila 2> ::= <constructor de valor de fila>

Otras sentencias de manipulacin de datos son las siguientes:
<sentencia de borrado: con bsqueda> ::=
DELETE FROM <nombre de tabla>
[WHERE <condicin de bsqueda>]
<sentencia de insercin> ::=
INSERT INTO <nombre de tabla>
<fuente y columnas de insercin>
<fuente y columnas de insercin> ::=
[ <parent. izq.> <lista de columnas de insercin> <parent. dcho.>] <expresin de consulta>
| DEFAULT VALUES
<lista de columnas de insercin> ::=
<lista de nombres de columnas>
<sentencia de modificacin: con bsqueda> ::=
UPDATE <nombre de tabla>
SET <lista de clusula de conjunto>
[WHERE <condicin de bsqueda>]
<lista de clusula de conjunto> ::=
<clusula de conjunto> [ {<coma> <clusula de conjunto>}...]
<clusula de conjunto> ::=
<nombre de columna> <operador igual> <fuente de modificacin>
<fuente de modificacin> ::=
<expresin de valor>
| <especificacin de nulos>
| DEFAULT
Bases de Datos
Sevilla, octubre 2007, V 2007.10.1
SQL

Pg. 21 de 21


Lenguaje de Administracin de Datos
<sentencia de concesin> ::=
GRANT <privilegios> ON <nombre de objeto>
TO <concedido> [{<coma> <concedido> } ... ]
[WITH GRANT OPTION]
<nombre de objeto> ::=
[ TABLE ] <nombre de tabla>
| DOMAIN <nombre de dominio>
<sentencia de revocacin> ::=
REVOKE [GRANT OPTION FOR ] <privilegios>
ON <nombre de objeto>
FROM <concedido> [ { <coma> <concedido> } ... ] <comportamiento al borrar>
<privilegios> ::=
ALL PRIVILEGES
| <lista de acciones>
<lista de acciones> ::= <accin> [ { <coma> <accin> } ... ]
<accin> ::=
SELECT
| DELETE
| INSERT [ <parent. izq.> <lista de nombres de columnas> <parent. dcho.> ]
| UPDATE [ <parent. izq.> <lista de nombres de columnas> <parent. dcho.> ]
| REFERENCES[ <parent.izq.> <lista de nombresdecolumnas> <parent. dcho.> ]
| USAGE
<concedido> ::=
PUBLIC
| <id. de autorizacin de usuario>

Anotaciones:
1.- Relativas al <tipo de datos>
a) En SQL-92, adems de los tipos de datos del SQL-89 (INTEGER, SMALLINT,CHARACTER, DECIMAL,
NUMERIC, REAL, FLOAT y DOUBLE PRECISION) tambin se admiten los siguientes: CHARACTER
VARYING, DATE, TIME, BIT, TIMESTAMP,INTERVAL y BIT VARYING.
b) Los tipos BIT y BIT VARYING contienen bits pero no son interpretados por el SGBD; INTERVAL expresa la
diferencia entre fechas u horas; y TIMESTAMP contiene ao, mes, da, hora, minutos, segundos y,
opcionalmente, fracciones de segundo.
2.- Relativas a <expresin de valor>
a) Una <expresin de valor> es cualquier expresin que d como resultado un valor numrico,carcter, hora,
fecha o intervalo. Puede ser tan simple como un dgito o tan complejo como una subconsulta.
3.- Relativas a la <definicin de restriccin referencial>
a) Si <columnas y tabla referenciada> especifica una <lista de columnas de referencia>, sta debe ser idntica a
una <lista de columnas nicas> en una <definicin de restriccin de unicidad> de la tabla referenciada. Se
puede establecer una restriccin referencial con conjuntos de columnas nicas sin que sean necesariamente la
clave primaria. En caso de no especificar la <lista de columnas referencia> se entender que referencia a la
clave primaria.
b) En caso de no especificar la <accin referencial disparada> se considera que sta es restringida.
c) Las propuestas del estndar son ms completas, incluyendo otros aspectos de las restricciones de integridad
referencial como el tipo de concordancia (si todos los valores de la columnas que referencian pueden ser nulos
o no nulos o ambas cosas) y el modo de restriccin (diferida, si se verifica al finalizar la transaccin o
inmediata, si se efecta al finalizar cada sentencia).
4.- Relativas a la <operacin de comparacin>.Las operaciones de comparacin son las usuales: =, >, <, >=, <=, <> .
5.- Relativas a la dinmica. Existen adems operaciones relacionadas con manejo de cursores.

También podría gustarte