Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Lenguaje SQL
ndice
1 Introduccin
1.1 Caractersticas y Beneficios de SQL
2 El Lenguaje SQL
2.1 DML (Data Manipulation Language)
2.2 DDL (Data Definition Language)
2.3 DCL (Data Control Language)
2.4 Elementos de SQL
2.5 Objetos de un Esquema
2.6 Reglas para Nombrar Objetos
2.7 Reglas para Referenciar Objetos
2.8 Alias de Nombre de Tabla
2.9 Alias de Columnas
2.10 Tipos de Datos
3 El Lenguaje de Manipulacin de Datos
3.1 La Sentencia SELECT
3.2 Operadores. Funciones y Condiciones
3.3 Combinaciones de Tabla JOINS
3.4 Subconsultas o Subselects
3.5 La Sentencia INSERT
3.6 La Sentencia UPDATE
3.7 La Sentencia DELETE
4 El Lenguaje de Definicin de Datos
4.1 Sentencias DDL
4.2 CREATE TABLE
4.3 CREATE INDEX
4.4 CREATE SYNONYM
4.5 CREATE VIEW
4.6 ALTER TABLE
4.7 DROP TABLE
4.8 DROP INDEX
4.9 DROP SYNONYM
4.10 RENAME
4.11 TRUNCATE
5 El Lenguaje de Control de Datos
5.1 Privilegios y Roles
5.2 CREATE ROLE
5.3 GRANT
5.4 REVOKE
Introduccin
SQL tambin ha sido implementado como lenguaje para los sistemas de base de
datos de IBM DB2 y SQL/DS.
El Lenguaje SQL
Una tabla es una estructura sobre la que se almacena informacin que interesa a
nuestro sistema. Una tabla est compuesta por columnas y filas.
Una columna es la representacin de un atributo, propiedad o caracterstica de
una tabla.
Una fila es una ocurrencia en la tabla.
Se pueden establecer reglas a las que queremos que se ajusten nuestros datos, o
qu tipos de datos se almacenen.
Elementos de SQL
Antes de comenzar a trabajar con sql se debe estar familiarizado con los
siguientes conceptos:
Objetos de un Esquema
Reglas para Nombrar Objetos
Reglas para Referenciar Objetos
Tipos de Datos
Objetos de un Esquema
donde:
esquema Indica el esquema propietario del objeto. Por ejemplo
debemos indicar el usuario que creo dicho objeto cuando
queremos consultarlo y no tenemos sinnimos asociados.
nombre_objeto Indica el nombre del objeto que queremos referenciar.
parte_objeto Indica una parte determinada del objeto. Por ejemplo para
indicar una columna de una tabla en una sentencia select. Es
obligatorio indicar el nombre de tabla al que pertenece una
columna cuando estamos realizando una consulta a dos tablas
que tienen columnas que se denominan igual.
Se utiliza para renombrar temporalmente una tabla dentro de una sentencia select,
por razones de clarificacin y desarrollo. No es lo mismo un alias de tabla que un
sinnimo en el sentido de Oracle, ya que este ltimo es un nombre alternativo que se crea
para una tablas, vista, etc. y que permanece hasta que se elimina. Un alias de tabla solo
existe durante la ejecucin de la sentencia select en la que se utiliza. La sintaxis es:
from nombre_objeto alias
donde:
nombre_objeto Indica el objeto (tabla, vista, sinnimo) al que estamos
referenciando
alias Indica el nombre por el que se va a reconocer en la sentencia
select a dicho objeto.
Alias de Columnas
Tipos de Datos
Cuando se crea una tabla se especifica a que tipo de datos asociamos cada
columna. Luego, dependiendo del tipo de dato podremos insertar ciertos valores o
establecer ciertas comparaciones. Los tipos de datos son:
Los cdigos de los tipos de datos son los utilizados internamente por Oracle en el
diccionario.
La Sentencia SELECT
Todas las consultas se realizan con una sola sentencia: select
La sintaxis es:
La clusula where se utiliza para filtrar informacin sobre las filas que deseamos
recuperar. Solo se mostrarn aquellas que cumplan la condicin impuesta. La clusula
where puede utilizarse tambin en otras sentencias de manipulacin, como por ejemplo
update y delete. El criterio de bsqueda puede ser tan complejo como se desee. Las
comparaciones establecidas en la clusula where dependen de los tipos de datos sobre
los que establezco dichas comparaciones. Para cada tipo de datos se utilizan operadores
de comparacin, y en algunos casos funciones de conversin para igualar tipos de datos
distintos.
hara que el resultado saliese ordenado por apellido1, apellido2, edad y nombre. La
utilizacin del mtodo de posicin en la clusula order by se lleva a cabo cuando la
cantidad de columnas por las que se desea ordenar es muy grande, aunque se puede usar
en cualquier situacin, pero es menos clarificadora en sentencias select pequeas.
Operadores aritmticos
Operadores de caracteres
Operadores condicionales
Operadores lgicos
Operadores aritmticos
Operadores de caracteres
Operador like
Operadores lgicos
Funciones
Las funciones de fila simple pueden aparecer en las listas de la clusula select.
Las funciones de grupo pueden aparecer adems de en la clusula select en una
clusula llamada group by having, que sirve para crear rupturas sobre resultados y
visualizar slo la parte que nos interesa.
Las funciones siguientes son funciones agrupadas segn el tipo de dato que
esperan como argumento y el tipo de dato que devuelve.
Funciones numricas
Funciones de caracteres
Funciones de fechas
Todas las funciones que operan con valores de tipo date devuelven valores de
tipo fecha, a excepcin de MONTHS_BETWEEN , que devuelve un nmero.
Funciones de conversin
Mscaras de formatos.
Formatos numricos.
Los caracteres que devuelven los formatos D, G, C, L son especificados por los
siguientes parmetros de inicializacin de la base de datos.
Elemento Significado
SCC CC Indica el siglo. Si se indica S, en las fechas de antes de Cristo
aparece el prefijo -.
YYYY SYYYY Visualiza los cuatro dgitos del ao. S antepone el prefijo - para
las fechas anteriores a Cristo.
IYYY Los cuatro dgitos del ao en formato ISO estndar.
YYY YY Y Los ltimos 3, 2, o 1 dgito/s del ao.
IYY IY I Los ltimos 3, 2, o 1 dgito/s del ao en formato ISO estndar.
Y,YYY El ao con una coma (,) en la posicin indicada.
SYEAR YEAR El nmero del ao en letras. S antepone el prefijo - para las fechas
anteriores a Cristo.
RR Los ltimos dos dgitos del ao. Se utiliza para aos de otros
siglos.
BC o AD Indicador antes/despus de Cristo.
B.C. o A.D. Indicador antes/despus de Cristo separado por puntos.
Q Trimestre del ao (Enero-Marzo = 1).
MM Nmero de mes (Enero = 1).
RM Nmero de mes en notacin romana (Julio=VII).
month Nombre del mes alineado con blancos hasta nueve caracteres de
longitud.
mon Nombre del mes abreviado a tres letras.
Elemento Significado
ww Nmero de la semana del ao.
IW Nmero de la semana del ao en ISO estndar.
w Nmero de semana dentro del mes.
ddd Nmero de da del ao (1 a 366).
dd Nmero de da del mes (1 a 31).
d Nmero de da de la semana (1 a 7).
day Nombre del da de la semana hasta nueve caracteres.
dy Nombre del da de la semana abreviado.
j Fecha en juliano. Los nmeros especificados deben ser enteros.
am pm Indicador del meridiano.
a.m. p.m. Indicador del meridiano separado por puntos.
hh hh12 Hora del da (1 a 12).
hh24 Hora del da (0 a 23).
mi Minutos (0 a 59).
ss Segundos (0 a 59).
sssss Segundos transcurridos desde medianoche (0 a 86399)
Variables de entorno
Funciones de grupo
Todas las funciones de grupo, excepto count(*) ignoran los valores nulos.
La clusula group by
Joins simples
Outer Joins
La sintaxis es:
select col1, col2, ..., coln
from tabla1, tabla2, ...
where tabla1.col1 = tabla2.col1 (+)
La sintaxis es:
select col1, col2, ..., coln
from tabla1, tabla2
where valor operador (select ...
from ...
where ...)
La Sentencia INSERT
El propsito de la sentencia insert es aadir filas a una tabla o vista.
Como requisitos para aadir filas en una tabla, la tabla debe ser propiedad del
usuario que intenta realizar la insercin o bien tener privilegio de insert sobre ella.
La sintaxis es:
La Sentencia UPDATE
El propsito de la sentencia update es cambiar los valores existentes en una
tabla o vista.
Como requisitos para actualizar filas de una tabla, la tabla debe ser propiedad del
usuario que intenta realizar la actualizacin, o bien tener privilegio de UPDATE sobre
ella.
La sintaxis es:
La Sentencia DELETE
El propsito de esta sentencia es borrar filas de una tabla o vista. Ms adelante
hablaremos de las sentencias DROP y TRUNCATE.
Como requisitos para borrar filas de una tabla, la tabla debe ser propiedad del
usuario que intenta realizar el borrado o bien tener privilegio de DELETE sobre ella.
La sintaxis es:
Para poder ejecutar los comandos que veremos a continuacin es necesario tener
una serie de privilegios, que el administrador de la Base de Datos ha debido concedernos
previamente.
Sentencias DDL
Las sentencias de lenguaje de definicin de datos mas importantes son:
CREATE La sentencia CREATE permite al usuario que la ejecuta crear
un objeto (tabla, vista, sinnimo procedimiento, paquete,
disparador, usuario, rol, perfil, etc.). (*)
ALTER La sentencia ALTER permite al usuario que la ejecuta
modificar la estructura de un objeto previamente creado.
DROP La sentencia DROP permite al usuario que la ejecuta eliminar
un objeto (no slo las filas) de la base de datos.
RENAME Permite al usuario que la ejecuta modificar el nombre de un
objeto.
TRUNCATE Permite al usuario que la ejecuta borrar todas las filas de una
tabla o ndice. Tiene ciertas diferencias con DELETE o DROP
que veremos prximamente.
Veamos a continuacin con mas detalle algunas de ellas aplicadas a los objetos
bsicos.
Integridad de datos
Antes de definir una tabla debemos tener en cuenta ciertos aspectos acerca de la
informacin a almacenar, que nos evita tener que programar de forma redundante ciertas
comprobaciones.
La integridad de datos es, por lo tanto, asegurarse que los datos en las tablas se
ajustan a una serie de regla predefinidas.
Reglas de negocio
Especficas de cada rea de negocio. Por ejemplo, solo cuando se venden diez
productos o mas hay derecho a descuentos.
Integridad de entidades
Reglas a las que deben ajustarse las columnas de mis tablas. Pueden definirse las
siguientes:
Primary Key. Identificador nico de una fila en una tabla. Solo puede haber
una por tabla, pero puede estar compuesto por mas de una
columna. Se utiliza de forma habitual para ser referenciada
desde otra tablas. Al definir una columna como clave primaria,
de forma implcita se crea un ndice asociado y la columna
quedar definida como nica y obligatoria. Por ejemplo el
cdigo de un producto es su identificativo en la tabla de los
productos, y adems le ayuda a relacionarse con la tabla que
contiene los precios de los productos, o con la de almacn que
contiene la cantidad de un producto que nos queda en stock.
Integridad referencial
Es la que determina las relaciones existentes entre los objetos. Por ejemplo existe
una relacin entre las tablas cabecera de facturas y lneas de factura.
Primary Key Identificador nico de una fila en una tabla. Hemos visto
anteriormente que este concepto pertenece a la integridad de
entidades.
Foreign Key Columna normalmente asociada a una clave primaria o nica
de otra tabla, o de la misma tabla (denominado
autoreferencia). Puede haber tantas como se desee por tabla.
Su valor puede ser nulo o el valor de la clave referenciada.
Garantiza consistencia de relaciones entre los datos. Por
ejemplo toda lnea de factura debe pertenecer a una cabecera
de factura.
Es un nombre nico, definido bien por el propietario del objeto o por el sistema.
Si lo define el propietario del objeto, en el momento de definir la restriccin debe ir
precedido de la palabra constraint.
Para las clausulas primary key y unique es posible especificar las clausulas de
almacenamiento del indice que se crea asociado a la clave, indicar el tablespace donde se
almacenara, y otras clausulas adicionales de como distribuir el espacio de
almacenamiento.
Los ndices pueden ser nicos o no. Si un ndice se define como nico, significa
que no puede contener valores repetido.
Recordar que las restricciones unique y primary key llevan implcita la creacin
del ndice, y en ambos casos es nico.
La sintaxis es:
Para que una vista sea actualizable (permita update) ninguna de las columnas que
forman la vista puede estar modificada por una expresin. Por ejemplo
substr(campo,1,n).
Para que la vista permita borrado de filas (permita delete) la vista debe estar
creada sobre una sola tabla (no admite joins). No puede incorporar clusulas distinct
ni group by. No puede ser definida con funciones de grupo ni pseudocolumnas ( user,
sysdate, rowid, sum(campo)).
La sintaxis es:
Aadir restricciones
La sintaxis para aadir restricciones una vez creada la tabla es similar a la de las
restricciones asociada a tabla. Esto significa que se debe indicar tras el comando alter
table la palabra clave constraint, seguida del nombre del constraint, y luego el
tipo de restriccin a aplicar y por ltimo sobre que columna de la tabla se desea aplicar
dicha restriccin.
Desactivar restricciones
Cuando se intenta desactivar una clave primaria ( primary key) o clave nica
(unique key), que pueden ser referenciadas, hay que desactivar en primer lugar las
claves ajenas (foreign key) que le referencian o utilizar la clusula disable cascade.
Al desactivar una clave primaria o nica tambin se destruyen los ndices asociados.
Activar restricciones
Cuando se intenta activar una restriccin y no se puede, por cada fila que no
cumpla la restriccin se puede guardar en una tabla, creada previamente, la siguiente
informacin:
rowid
nombre de restriccin que no se cumple
nombre de la tabla en la que se encuentra la restriccin
usuario propietario de la tabla
La tabla, denominada exceptions, se ha creado previamente en sqlplus utilizando
un fichero que se encuentra en la instalacin y se denomina utlexcpt.sql, y cuyo
contenido es el siguiente, de forma que lo podemos crear nosotros mismos:
Borrar restricciones
La sintaxis es:
La sintaxis es:
Para borrar un ndice se debe ser propietario de la tabla en la que estn asociados
los ndices, o tener el privilegio DROP ANY INDEX.
La sintaxis:
Para borrar un sinnimo basta con ser el propietario, es decir, haber creado dicho
sinnimo. En el caso de que el sinnimo que se desea borrar sea publico, es necesario
tener el privilegio DROP PUBLIC SYNONYM.
La sentencia RENAME
La sentencia rename cambia el nombre de un objeto (tabla, procedimiento, vista,
etc.) por otro de forma permanente.
La sintaxis es:
La sentencia TRUNCATE
La sentencia truncate borra filas de una tabla o ndice, sin eliminar la estructura
del objeto. Es similar a delete, pero no hay posibilidad de deshacer la transaccin
(rollback), ni de hacer un borrado restrictivo (clusula where).
La sintaxis es:
Para truncar un objeto se debe ser propietario del mismo, o tener el privilegio
DELETE ANY TABLE.
Al truncar una tabla se truncan de forma implcita los ndices de dicha tabla.
Este sublenguaje permite controlar los permisos y privilegios que tiene cada
usuario que accede a la base de datos.
Cada usuario Oracle tiene un nombre y una clave de acceso, y posee sus propias
tablas, vistas y otros objetos o recursos que cree. Un role Oracle es un conjunto de
privilegios (o tipo de acceso que cada usuario requiere segn sus responsabilidades o
estatus). Se pueden asignar privilegios especficos a los roles, y a continuacin asignar
dichos roles a los usuarios adecuados. Un usuario puede conceder privilegios a otros
usuarios.
La sentencia GRANT
Esta sentencia nos permite asignar privilegios a roles o a usuarios, y tambin roles
a usuarios. Veamos a continuacin la sintaxis para cada uno de estos dos casos.
donde:
system_priv Cualquier privilegio de sistema.
role Conjunto de privilegios.
with admin option Permite que el receptor de los privilegios pueda asignarlos
a otros usuarios.
donde:
object_priv Indica cualquier privilegio de objetos.
column Indica las columnas sobre las que queremos dar privilegios.
with grant option Indica que el usuario que recibe el permiso puede darlo a
otros usuarios.
La sentencia REVOKE
Esta sentencia permite quitar privilegios o roles a usuarios y roles, de forma que
ya no dispongan o puedan hacer uso de dichos privilegios.
donde:
object Indica el objeto sobre el que queremos quitar
privilegios.
from Es la clusula que nos indica a quien queremos quitar
dichos privilegios.
cascade constraints Especifica que los privilegios que haya utilizado el
usuario o role para referenciar nuestro objeto tambin
sean revocados (por ejemplo cuando se activa una
foreign key sobre una tabla de otro usuario).