Anda di halaman 1dari 43

Programador/a de Sistemas de Bases de Datos Relacionales

Lenguaje SQL

Lenguaje SQL

Pgina 1/43

Programador/a de Sistemas de Bases de Datos Relacionales

ndice
1
2

Introduccin
1.1
Caractersticas y Beneficios de SQL
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
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
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
El Lenguaje de Control de Datos
5.1
Privilegios y Roles
5.2
CREATE ROLE
5.3
GRANT
5.4
REVOKE

Lenguaje SQL

Pgina 2/43

Programador/a de Sistemas de Bases de Datos Relacionales

Introduccin
El lenguaje SQL consiste en un grupo de comandos que todos los programas y
usuarios pueden utilizar para acceder a los datos dentro de una base de datos.
Normalmente, se accede a los datos a travs de aplicaciones o herramientas sin
tener que utilizar directamente SQL, pero las aplicaciones estn realizadas con dicho
lenguaje.
El modelo de base de datos relacional fue originalmente desarrollado por E. F.
Codd hacia los aos 70. El lenguaje SQL fue desarrollado por IBM en un prototipo de
base de datos relacional llamada SYSTEM R a mediados de los 70.
El lenguaje SQL original (SEQUEL2) se defini en Noviembre de 1976 por la
revista de IBM llamada IBM Journal of R&D. En 1979 Oracle Corporacin introduce la
primera implementacin comercial disponible de este lenguaje.
SQL tambin ha sido implementado como lenguaje para los sistemas de base de
datos de IBM DB2 y SQL/DS.
SQL est implementado y aceptado estndar de la industria como lenguaje de
acceso a bases de datos. Cumple los estndares ANSI/ISO/FIPS (American National
Standard Institute, International Standars Organization, Federal Information Processing
Standard respectivamente).

Caractersticas y Beneficios de SQL


No es un lenguaje procedural porque:
Procesa varias filas a la vez, mejor que una sola.
La navegacin para buscar los datos es automtica, utilizando unas rutinas de
acceso denominadas Optimizador que describiremos ms adelante.
Existe una extensin procedural al SQL denominada PL/SQL, que consisten en
mezclar SQL estndar con comandos puramente procedimentales (goto, while, for,
declares, etc.). Esto nos permite realizar una operacin sobre los datos basndonos en
los resultados obtenidos anteriormente.
El lenguaje es sencillo, muy similar al idioma ingls y los comandos bsicos
pueden aprenderse en pocas horas. Es el mismo lenguaje para todos los tipos de
usuarios desde cualquier herramienta y para cualquier tipo de actividad incluyendo:
Administradores del sistema y de Base de Datos.
Programadores de Aplicaciones.
Usuarios finales.

Lenguaje SQL

Pgina 3/43

Programador/a de Sistemas de Bases de Datos Relacionales

SQL es un lenguaje unificado para todo tipo de tareas y categoras incluyendo:


Consulta, actualizacin, insercin y borrado de filas en una tabla.
Creacin modificacin reemplazamiento y borrado de objetos.
Control de acceso a la base de datos y a sus objetos.
Garantizar integridad y consistencia de los datos.

El Lenguaje SQL
Normalmente una base de datos relacional almacena informacin en estructuras
bsicas denominadas tablas.
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.
Se pueden establecer tambin relaciones entre las tablas de nuestras
aplicaciones.
La implementacin de estas reglas se detallar en los prximos captulos.
El lenguaje sql se subdivide a su vez en tres tipos de lenguaje dependiendo del
tipo de operacin que deseemos realizar sobre la base de datos. Estos tipos son:
DML (Data Manipulation Language)
DDL (Data Definition Language)
DCL (Data Control Language)

DML (Data Manipulation Language)


Este sublenguaje agrupa los comandos sql que permiten realizar consultas y
modificaciones, inserciones y borrados sobre los datos de las tablas, es decir:
select
Consultar datos, sin modificarlos
update
Actualizar datos de tablas
insert
Introducir nuevos datos a las tablas
delete
Borrar datos de las tablas
Las sentencias update, insert y delete deben validarse contra la base de
datos, o deshacerse, empleando las sentencias commit o rollback.

Lenguaje SQL

Pgina 4/43

Programador/a de Sistemas de Bases de Datos Relacionales

DDL (Data Definition Language)


Este sublenguaje agrupa las sentencias sql utilizadas para definir, borrar,
reemplazar o alterar estructuras de la base de datos, es decir:
create
Permite al usuario definir un objeto, por ejemplo una tabla.
alter
Permite al usuario modificar las caractersticas de un objeto
ya existente. Por ejemplo aadir una columna a una tabla.
drop
Permite al usuario borrar un objeto. Por ejemplo una tabla
completa, incluida su definicin, no solo las filas.
rename
Permite renombrar un objeto, por ejemplo una vista.
truncate
Borra las filas de una tabla o ndice sin borrar su estructura o
definicin. La tabla permanece, pero vaca.

DCL (Data Control Language)


Este sublenguaje agrupa sentencias utilizadas por el administrador o por el
dueo de un objeto para conceder o suprimir privilegios de acceso a la base de datos o a
un objeto. Por ejemplo:
grant
Concede privilegios.
revoke
Quita o suprime privilegios.

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
Un esquema es un conjunto de objetos o estructuras de datos propiedad de un
usuario. Cada usuario tiene su propio esquema, que coincide con el nombre del usuario
que crea el objeto. Los objetos se crean, y se puede modificar su estructura, con el
lenguaje DDL. Los objetos son de los siguientes tipos:
Tablas (Estructura Bsica)
ndices
Secuencias
Vistas
Sinnimos
Agrupaciones
Procedimientos y Funciones almacenados
Paquetes

Lenguaje SQL

Pgina 5/43

Programador/a de Sistemas de Bases de Datos Relacionales

Disparadores (triggers) almacenados en base de datos


Replicas y Replicas lgicas
Enlaces de bases de datos
Existen otros objetos que se crean y manipulan a travs de sql, y que se
almacenan en la base de datos, pero no son creados dentro del esquema de un usuario,
ni son propiedad de nadie. Estos objetos son:
Perfiles
Roles
Segmentos de Rollback
Tablespaces
Algunos objetos estn divididos a su vez en partes mas pequeas, como por
ejemplo:
Una columna es una parte de una tabla o vista.
Una restriccin de integridad es parte de una tabla.
Procedimientos y funciones son parte de un paquete.
Reglas para Nombrar Objetos
Las reglas de nomenclatura de objetos son:
El nombre de un objeto debe tener una longitud entre 1 (mnimo) y 30
caracteres (mximo). Excepto:
1. El nombre de una base de datos est limitado a 8 caracteres.
2. El nombre de un enlace de base de datos esta limitado a 128
caracteres.
El nombre de un objeto no puede estar entre parntesis, ni entrecomillado,
etc.
Los nombres de objetos pueden escribirse en maysculas o minsculas.
El nombre del objeto debe comenzar con un carcter reconocible por el
conjunto de caracteres de la base de datos, y que no sea un numrico.
El nombre de un objeto solo contiene caracteres alfanumricos, y se permite
adems el carcter underscore (_). Tambin admite, pero se desaconseja
por uso interno, los caracteres dlar ($) y almohadilla (#).
Existe una lista de palabras reservadas que no pueden utilizarse para nombrar
objetos.
Se puede nombrar un objeto con un nombre alternativo o sinnimo, y a una
columna con un nombre alternativo temporal, denominado alias.

Lenguaje SQL

Pgina 6/43

Programador/a de Sistemas de Bases de Datos Relacionales

Reglas para Referenciar Objetos


La sintaxis general para referenciar un objeto es la siguiente:
[esquema.]nombre_objeto[.parte_objeto]

donde:
esquema

nombre_objeto
parte_objeto

Indica el esquema propietario del objeto. Por ejemplo


debemos indicar el usuario que creo dicho objeto cuando
queremos consultarlo y no tenemos sinnimos asociados.
Indica el nombre del objeto que queremos referenciar.
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.

Alias de Nombre de Tabla


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
alias

Indica el objeto (tabla, vista, sinnimo) al que estamos


referenciando
Indica el nombre por el que se va a reconocer en la sentencia
select a dicho objeto.

Alias de Columnas
En el resultado de una consulta aparecen en las cabeceras de las columnas el
nombre que dicha columna tenga en la tabla. Si deseamos cambiarlo para modificar la
visualizacin del resultado, podemos utilizar alias de columna. Tambin se pueden
utilizar para referenciar dichas columnas desde comandos sqlplus. Cuando el alias de
una columna est compuesto por mas de una palabra, y existen espacios en blanco, o
algn carcter especial en medio, debe acotarse el literal con dobles comillas.
Tipos de Datos
Cada literal o valor de columna que se manipula esta englobado en un tipo de
dato. Cada tipo de dato contiene una serie de caractersticas asociadas, por ejemplo un
limite en la longitud del valor que pueden tener.

Lenguaje SQL

Pgina 7/43

Programador/a de Sistemas de Bases de Datos Relacionales

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:
Cdigo Tipo Dato
VARCHAR2(tamao)
1

NUMBER(n[, d])

LONG

13
23

DATE
RAW(tamao)

24

LONG RAW

69

ROWID

96

CHAR(tamao)

Descripcin
Cadena de caracteres de longitud variable. La
mxima longitud se indica en tamao. El tamao
mximo es 2000 caracteres en la versin 7 y 255 en
la versin 6.
Nmero de tamao n dgitos (hasta 38) de los cuales
d dgitos son dedicados a la parte decimal.
Cadena de caracteres de longitud variable. Tamao
hasta 2 Giga bytes.
Fecha.
Dato binario de longitud variable. Tamao mximo
de 255 bytes.
Cadena binaria de longitud variable de hasta 2 Giga
bytes.
Pseudocolumna en notacin hexadecimal que indica
la posicin fsica de una fila en la base de datos.
Cadena alfanumrica de longitud fija. Tamao
mximo 255 bytes. Si no se indica precisin ocupa
un carcter.

Los cdigos de los tipos de datos son los utilizados internamente por Oracle en
el diccionario.

El Lenguaje de Manipulacin de Datos


Dentro del lenguaje de manipulacin existen las siguientes sentencias:

select
insert
update
delete

La Sentencia SELECT
Todas las consultas se realizan con una sola sentencia: select
Las consultas se realizan por asociacin de valores, y no por la situacin fsica
donde se encuentren los datos.
Se puede recuperar toda la informacin o tambin subconjuntos de filas o de
columnas.
La representacin de los datos se puede ordenar.

Lenguaje SQL

Pgina 8/43

Programador/a de Sistemas de Bases de Datos Relacionales

La sintaxis es:

Para trabajar con SQL utilizaremos la herramienta Oracle denominada sql*plus,


desde donde ejecutaremos las sentencias deseadas. Sql*plus contiene sus propios
comandos de edicin, formateo de columnas y clculos, y rupturas de control basndose
en los resultados. Hay que distinguir entre comandos sql*plus y sentencias sql. La
herramienta sql*plus esta comentada en su correspondiente manual.
Despus de la clusula select indicamos la lista de columnas que deseamos
seleccionar. Se pueden seleccionar todas las columnas de una tabla, indicando cada una
de ellas, separadas por comas, o indicando el smbolo asterisco (*) que quiere decir
todas las columnas.

Lenguaje SQL

Pgina 9/43

Programador/a de Sistemas de Bases de Datos Relacionales

Con la clusula from indicamos el nombre de la tabla, o tablas, de las que


deseamos extraer o contrastar informacin. En la clusula from deben aparecer los
nombres de las tablas a las que pertenecen las columnas mencionadas en cualquiera de
las otras clusulas. Si hay mas de una tabla se separan mediante comas (,). La clusula
from debe aparecer despus de la enumeracin de columnas de la clusula select.
Recordar que cuando la tabla no es de nuestra propiedad se debe anteponer al nombre
de la tabla el nombre del esquema propietario. Cuando se mezclan dos tablas o mas en
una consulta es conveniente anteponer el nombre de la tabla al de la columna cada vez
que la columna es referenciada. Tambin se puede asignar un alias temporal al nombre
de tabla y utilizar este como prefijo de la columna.
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.
La clusula order by determina el orden en el que se mostrar el resultado de
la consulta. Admite la ordenacin por mas de una columna. Tambin se admite que la
columna especificada en la clusula order by sea una expresin o haya sido
modificada por una funcin. Se admite la ordenacin por posicin. El conjunto de
caracteres de ordenacin se basa en el parmetro de arranque de la base de datos
denominado NLS_SORT, que est implcito a su vez en otro denominado NLS_LANG
(de National Language Support que es la utilidad que le indica al servidor el lenguaje en
el que debe trabajar). No se ordenar igual si tenemos el soporte al lenguaje americano
que al espaol (utilizacin de ees, por ejemplo). La ordenacin por defecto es
ascendente, pero se puede indicar si se desea, para cada uno de los campos el tipo de
ordenacin (asc para ordenacin ascendente y desc para ordenacin descendente). Para
utilizar el mtodo de posicin se indica en la clusula order by el nmero de posicin
que ocupa la columna o expresin por la que queremos ordenar en la clusula select.
Por ejemplo:
select nombre, apellido1, apellido2, edad
from curso
order by 2,3,4,1;

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.

Lenguaje SQL

Pgina 10/43

Programador/a de Sistemas de Bases de Datos Relacionales

Operadores. Funciones y Condiciones.


Operadores
Un operador se utiliza para manipular datos de forma individual y devolver un
valor. Tambin se les denomina operandos o argumentos. Suelen estar representados
por caracteres especiales o palabras clave. Por ejemplo el operador de adicin es el
smbolo +, y la clave que identifica que no hay valores nulos es is not null. La
divisin es:

Operadores aritmticos
Operadores de caracteres
Operadores condicionales
Operadores lgicos
Operadores aritmticos
A continuacin veamos una lista de los operadores aritmticos:
Operador
Propsito
Ejemplo
select salario+comision
+, Suma y resta.
*, /

from empleados;
select salario * 12 salario anual
from empleados;

Multiplicar y dividir
Operadores de caracteres
El operador de caracteres es:

Operador

Propsito
Concatenar
caracteres

cadenas

Ejemplo
de select Estimado seor nombre
from empleados;

Operadores condicionales o de comparacin


Los operadores de comparacin se utilizan en los predicados condicionales, para
comparar una expresin con otra. El resultado puede ser verdadero (TRUE), falso
(FALSE).
Los operadores de comparacin son:
Operador
Propsito
Ejemplo
=
Comprobador
de select *
from departamento
igualdad.
!=, <>

No igualdad.

>

Mayor que.

<

Menor que.

>=

Mayor o igual que.

Lenguaje SQL

where ndepartamento = 10;


select *
from departamento
where ndepartamento != 10;
select *
from empleados
where salario > 1500;
select *
from empleados
where salario < 1500;
select *

Pgina 11/43

Programador/a de Sistemas de Bases de Datos Relacionales

<=

Menor o igual que.

IN

Igual a uno de los valores


de la lista.

NOT IN

El valor no se encuentra
en la lista.

BETWEEN n
AND m

El valor es mayor o igual


que n y menor o igual que
m.
El valor no esta dentro del
rango delimitado por n y
m.

NOT
BETWEEN n
AND m
IS NULL

IS NOT
NULL
LIKE

NOT LIKE

Comprueba
si
hay
ausencia de contenido
(valor) en una columna.
Es el nico operador que
puede comprobarlo.
Comprueba
si
hay
contenido (valor) en una
columna.
Comprueba cadenas de
caracteres con un patrn
de bsqueda.
Comprueba cadenas de
caracteres
que
no
coincidan con un patrn
de bsqueda.

from empleados
where salario >= 3000;
select *
from empleados
where salario <= 2000;
select *
from departamento
where ndepartamento in (10,30,50);
select *
from departamento
where ndepartamento not in
(10,20,50);
select *
from empleados
where salario between 2000 and 3000;
select *
from empleados
where salario not between 2000 and
3000;
select *
from empleados
where comision is null;

select *
from empleados
where comision is not null;
select *
from empleados
where apellido1 like MARTI%
select *
from empleados
where apellido1 not like MARTI%

Operador like
Veamos a continuacin con mas detalle el operador like.
El operador like busca cadenas de caracteres que contengan la porcin de
cadena indicada, mientras que el operador igual (=) buscara cadenas de caracteres
idnticas a la proporcionada. Para realizar bsquedas con like se utilizan los caracteres
comodines % y _. El smbolo % indica cualquier cadena de caracteres de longitud
variable. En el ejemplo anterior buscara todos los empleados cuyo primer apellido
comenzase con la cadena MARTI, sin importar la continuacin (MARTIN,
MARTINEZ, etc.). El smbolo _ (underscore) indica cualquier carcter en la
posicin donde se encuentre, pero uno solo.

Lenguaje SQL

Pgina 12/43

Programador/a de Sistemas de Bases de Datos Relacionales

Operadores lgicos
Los operadores lgicos se utilizan para combinar los resultados de dos
condiciones de comparacin y producir un nico resultado.
Los operadores lgicos son:
Operador
NOT

AND

OR

Propsito
Devuelve TRUE si la
condicin evaluada es
falsa, de otra manera
devuelve FALSE.
Devuelve TRUE si las dos
condiciones se cumplen.
Devuelve TRUE si alguna
de las condiciones se
cumple

Ejemplo
select *
from
empleados
where not (apellido1=MARTIN)
select
from
where
and
select
from
where
or

*
empleados
puesto=ANALISTA
ndepartamento=10
*
empleados
puesto=ANALISTA
ndepartamento=10

Dentro de los operadores lgicos existen los operadores de conjuntos. Los


operadores de conjuntos son aquellos que visualizan los resultados de dos consultas en
un nico resultado.
Los operadores de conjuntos son:
Operador
UNION
UNION ALL
INTERSECT
MINUS

Que devuelve?
Suma de todas las filas distintas seleccionadas por ambas consultas.
Suma todas las filas seleccionadas por ambas consultas incluyendo
duplicados.
Devuelve todas las filas comunes de ambas consultas eliminando
duplicados.
Devuelve todas las filas seleccionadas por la primera consulta que
no sean recuperadas por la segunda consulta.

Funciones
Una funcin es similar a un operador puesto que manipula datos y devuelve un
resultado. Difiere de los operadores, puesto que admite argumentos.
Si se llama a una funcin con un argumento en el que el tipo de dato es distinto
al que espera la funcin, se convierte automticamente y de forma implcita al tipo que
la funcin espera.

Lenguaje SQL

Pgina 13/43

Programador/a de Sistemas de Bases de Datos Relacionales

Existen dos tipos genricos de funciones:


Funciones de fila simple .
Funciones de grupo.
Estos dos tipos difieren en el nmero de filas sobre las que actan. Una funcin
de fila simple devuelve un resultado nico para cada fila sobre la que acta, mientras
que una funcin de grupo devuelve un resultado nico para un conjunto de filas.
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.
La distribucin entre tipos de funcin ser la siguiente:
Funciones de fila simple.
1. Funciones numricas.
2. Funciones de caracteres.
3. Funciones de fechas.
4. Funciones de conversin.
5. Otras funciones.
Funciones de grupo.
Funciones de fila simple
Las funciones siguientes son funciones agrupadas segn el tipo de dato que
esperan como argumento y el tipo de dato que devuelve.
Funciones numricas
Son aquellas que aceptan como entrada argumentos numricos y devuelven
valores numricos:
Funcin
abs
ceil

Sintaxis

cos
cosh
exp
floor

cos(n)
cosh(n)
exp(n)
floor(n)

ln
log

ln(n)
log(m, n)

mod

mod(m, n)

Lenguaje SQL

abs(n)
ceil(n)

Propsito
Devolver el valor absoluto de n.
Devuelve el entero inmediatamente superior o
igual a n.
Devuelve el coseno de n (n est en radianes).
Devuelve el coseno hiperblico de n.
Devuelve el nmero e elevado a n.
Devuelve el entero inmediatamente inferior o
igual a n.
Devuelve el logaritmo neperiano de n (n>0).
Devuelve el logaritmo en base m de n. La base m
debe ser un nmero positivo distinto de 0 o 1. n
tambin debe ser un valor positivo.
Devuelve el resto resultante de dividir m entre n.

Pgina 14/43

Programador/a de Sistemas de Bases de Datos Relacionales

Funcin
power

Sintaxis

round

round(n[,m])

sign

sign(n)

sin
sinh
sqrt

sin(n)
sinh(n)
sqrt(n)

tan
tanh
trunc

tan(n)
tanh(n)
trunc(n[,m])

power(m, n)

Propsito
Devuelve m elevado a la potencia n. La base m y
el exponente n pueden ser cualquier tipo de
nmero, pero si m es negativo, n debe ser un
entero.
Devuelve n redondeado a m dgitos. Si se omite
m el valor por defecto es cero. m puede ser
negativo.
Si n<0 retorna -1, si n=0 devuelve 0 y si n>0
retorna 1.
Devuelve el seno de n.
Devuelve el seno hiperblico de n.
Devuelve la raz cuadrada de n. El valor de n
no puede ser negativo.
Devuelve la tangente de n.
Devuelve la tangente hiperblica de n.
Devuelve n truncado a m decimales. Si se omite
m el valor por defecto es cero.

Funciones de caracteres
Funciones de manejo de caracteres que devuelven caracteres. Funciones de fila
simple que aceptan como argumento de entrada un carcter y devuelven valores tipo
carcter.
Funcin
chr
concat
initcap
lower
lpad

ltrim

replace

Lenguaje SQL

Sintaxis

Propsito
Devuelve el carcter cuyo nmero ascii
correspondiente es n.
concat(char1, char2) Devuelve char1 concatenado con char2. Es
equivalente al operador .
initcap(char)
Devuelve la cadena con la primera letra de
cada palabra en maysculas, y el resto en
minsculas.
lower(char)
Devuelve la cadena con todas las letras en
minsculas.
lpad(char1,n[,char2]) Devuelve char1 rellenado a la izquierda,
hasta completar la longitud indicada en n, con
el carcter indicado en char2. Si char2 se
omite rellena con blancos.
ltrim(char[,muestra]) Borra los caracteres a la izquierda de char,
hasta encontrar el primer carcter que no este
en muestra. Por defecto el valor de muestra
es el carcter blanco.
replace(char,
Para la cadena elegida, char, reemplaza
car_bus[, car_rep])
car_bus por car_rep.
chr(n)

Pgina 15/43

Programador/a de Sistemas de Bases de Datos Relacionales

Funcin
rpad

rtrim

substr
translate
upper

Sintaxis

Propsito
Devuelve char1 rellenado a la derecha hasta
la longitud indicada en n con la cadena
indicada en char2. Si char2 se omite rellena
con blancos.
rtrim(char[,muestra]) Borra los caracteres a la derecha de char
hasta encontrar el primer carcter que no este
en muestra. Por defecto muestra es un
blanco.
substr(char, m[, n]) Devuelve una parte de char empezando en la
posicin indicada en m, y tomando el nmero
de caracteres indicado en n.
translate(char,
Devuelve char con todas las caracteres que
muestra1, muestra2)
aparecen en muestra1 sustituidos por el
correspondiente en muestra2.
upper(char)
Devuelve la cadena char con todos los
caracteres en maysculas.
rpad(char1,n[,char2])

Funciones de manejo de caracteres que devuelven nmeros.


Funciones de fila simple que aceptan como argumento de entrada un carcter y
devuelven valores numricos.
Funcin
ascii

Sintaxis

instr

instr(char1,char2
[,n[,m]])

length

length(char)

Lenguaje SQL

ascii(char)

Propsito
Devuelve la representacin numrica en el
juego de caracteres que se utiliza en la base de
datos de la cadena char. Si se utiliza ascii, en
ascii, y si se utiliza ebcdic devolver el valor
ebcdic.
Busca en char1 la cadena indicada en char2,
empezando a partir del carcter cuya posicin
es n, y nos devolver la posicin de la m-sima
aparicin. Por defecto m y n valen 1.
Devuelve la longitud de char en caracteres,
incluyendo los blancos.

Pgina 16/43

Programador/a de Sistemas de Bases de Datos Relacionales

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.
Funcin
add_months
last_day

Sintaxis
add_months(f, n)
last_day(f)

months_between months_between(f1,
f2)

next_day

next_day(f, char)

Propsito
Devuelve la fecha f mas n meses.
Devuelve la fecha del ltimo da del mes
que contenga la fecha f. Se puede utilizar
para determinar cuantos das quedan del
mes.
Devuelve
el
nmero
de
meses
transcurridos entre f1 y f2.
Devuelve la fecha del primer da de la
semana indicado en char, a partir de la
fecha indicada en f.

Funciones de conversin
Sirven para convertir un tipo de dato en otro.
Funcin
chartorowid

convert

hextoraw
rawtohex
rowidtochar

to_char
to_date

Lenguaje SQL

Sintaxis

Propsito
Convierte una variable char de tipo de
dato char o varchar2 a tipo rowid. Para ello
char debe respetar la representacin
rowid.
convert(char,des
Convierte char de un juego de caracteres
[,fuen])
fuen a un juego de caracteres des. Si se
omite el juego de caracteres fuente, toma
por defecto el de la base de datos.
hextoraw(char)
Convierte una cadena char que contiene
un valor en hexadecimal a formato raw.
rawtohex(raw)
Convierte el valor raw a su equivalente
hexadecimal.
rowidtochar(rowid)
Convierte un tipo de datos rowid contenido
en la variable rowid a tipo de datos
varchar2. De la conversin resulta siempre
una cadena de 18 caracteres de longitud.
to_char(f[,formato]) Convierte una fecha f de tipo date, o un
nmero f de tipo number, en un varchar2,
utilizando la mscara indicada en formato.
to_date(char
Convierte una cadena char de tipo char o
[, formato])
varchar2 en un valor tipo date. El formato
es la mscara de la fecha. Si se omite toma
el formato por defecto.
chartorowid(char)

Pgina 17/43

Programador/a de Sistemas de Bases de Datos Relacionales

Funcin
to_number

Sintaxis
to_number(char
[, formato])

Propsito
Convierte char, de tipo de dato char o
varchar2, a un tipo number. to_number
utiliza la mascara especificada en formato
para conocer como ser la entrada de
datos.

Mscaras de formatos.
Formatos numricos.
Deben proporcionarse las mascaras de conversin, en formato numrico,
adecuadas cuando:
En una funcin to_char se cambia un tipo de dato number a un tipo de dato
varchar2.
En una funcin to_number se cambia un tipo de dato varchar2 o char a
number.
Los formatos numricos estn compuestos de uno o mas elementos de formatos.
Dichos elementos son:
Elemento

Ejemplo

9999999

099999 999990

$
B

$99999
B99999

MI

99999MI

S99999

PR

99999PR

99999D999

9G999

C9999

Lenguaje SQL

Descripcin
El nmero de nueves especifica la cantidad de
dgitos que se visualizan. Se visualizan blancos para
los ceros a la izquierda.
Visualiza los ceros a la izquierda en esa posicin
como ceros en vez de como blancos, o visualiza el
valor 0, en lugar de blancos.
Antepone como prefijo el smbolo $.
Devuelve los ceros como blancos a menos que se
indique cero en la mscara de formato.
Visualiza el signo menos despus de los valores
negativos. Para los valores positivos muestra un
espacio en blanco.
Muestra un mas (+) para los valores positivos y un
menos (-) para los negativos en la posicin
indicada.
Muestra los valores negativos entre los signos < y
>.
Muestra el carcter decimal en la posicin indicada.
Separa la parte entera y fraccionaria de un nmero.
Muestra el separador de grupo en la posicin
indicada.
Muestra el smbolo ISO de la moneda en la posicin
indicada.

Pgina 18/43

Programador/a de Sistemas de Bases de Datos Relacionales

Elemento

Ejemplo

L9999

, (coma)
. (punto)

9,999
999.9

EEEE
RN

9.999EEEE
RN

Descripcin
Muestra el smbolo de la moneda local en la
posicin indicada.
Muestra una coma en la posicin indicada.
Muestra un punto en la posicin indicada,
separando la parte entera de la decimal.
Muestra el valor en notacin cientfica.
Devuelve en maysculas o minsculas (rn) el valor
del nmero en notacin romana. El nmero debe ser
un entero entre 1 y 3999.

MI y PR solo pueden estar en la ltima posicin de un formato numrico. El


formato S solo puede estar en la primera o ltima posicin.

Los caracteres que devuelven los formatos D, G, C, L son especificados por los
siguientes parmetros de inicializacin de la base de datos.
D
G
C
L

Carcter Decimal
Separador Grupo
Smbolo Moneda ISO
Smbolo Moneda

NLS_NUMERIC_CHARACTERS
NLS_NUMERIC_CHARACTERS
NLS_ISO_CURRENCY
NLS_CURRENCY

Formatos tipo fecha.


Elemento
SCC CC
YYYY SYYYY
IYYY
YYY YY Y
IYY IY I
Y,YYY
SYEAR YEAR
RR
BC o AD
B.C. o A.D.
Q
MM
RM
month
mon

Lenguaje SQL

Significado
Indica el siglo. Si se indica S, en las fechas de antes de Cristo
aparece el prefijo -.
Visualiza los cuatro dgitos del ao. S antepone el prefijo - para
las fechas anteriores a Cristo.
Los cuatro dgitos del ao en formato ISO estndar.
Los ltimos 3, 2, o 1 dgito/s del ao.
Los ltimos 3, 2, o 1 dgito/s del ao en formato ISO estndar.
El ao con una coma (,) en la posicin indicada.
El nmero del ao en letras. S antepone el prefijo - para las
fechas anteriores a Cristo.
Los ltimos dos dgitos del ao. Se utiliza para aos de otros
siglos.
Indicador antes/despus de Cristo.
Indicador antes/despus de Cristo separado por puntos.
Trimestre del ao (Enero-Marzo = 1).
Nmero de mes (Enero = 1).
Nmero de mes en notacin romana (Julio=VII).
Nombre del mes alineado con blancos hasta nueve caracteres de
longitud.
Nombre del mes abreviado a tres letras.

Pgina 19/43

Programador/a de Sistemas de Bases de Datos Relacionales

Elemento
ww
IW
w
ddd
dd
d
day
dy
j
am pm
a.m. p.m.
hh hh12
hh24
mi
ss
sssss

Significado
Nmero de la semana del ao.
Nmero de la semana del ao en ISO estndar.
Nmero de semana dentro del mes.
Nmero de da del ao (1 a 366).
Nmero de da del mes (1 a 31).
Nmero de da de la semana (1 a 7).
Nombre del da de la semana hasta nueve caracteres.
Nombre del da de la semana abreviado.
Fecha en juliano. Los nmeros especificados deben ser enteros.
Indicador del meridiano.
Indicador del meridiano separado por puntos.
Hora del da (1 a 12).
Hora del da (0 a 23).
Minutos (0 a 59).
Segundos (0 a 59).
Segundos transcurridos desde medianoche (0 a 86399)

Las mascaras de formato year y syear devuelven el nombre del ao siempre en


ingls. Las especificaciones de algunos formatos (month, mon, day, dy, bc/ad,
b.c./a.d., am/pm, a.m./p.m.) dependen del lenguaje utilizado en la base de datos
indicados en los parmetros de inicializacin:
NLS_DATE_LANGUAGE
NLS_TERRITORY
NLS_LANGUAGE
Otras funciones
Aqu listaremos las funciones de fila simple que no se engloban en ninguna
categora anterior.
Funcin
dump

Lenguaje SQL

Sintaxis
dump(expr
[, formato])

Propsito
Devuelve un varchar2 conteniendo el cdigo del
tipo de dato al que corresponde expr, la longitud
en bytes y la representacin interna del dato. El
argumento formato indica la notacin en la que
se visualiza el resultado. Formato puede tener
los siguientes valores:
8 Devuelve el resultado en notacin octal.
10 Devuelve el resultado en notacin
decimal.
16 Devuelve el resultado en notacin
hexadecimal.
17 Devuelve el resultado en formato
carcter.

Pgina 20/43

Programador/a de Sistemas de Bases de Datos Relacionales

Funcin
greatest
least
nvl

vsize
decode

Sintaxis

Propsito
Devuelve el mayor valor de una lista de
expresiones. Compara carcter a carcter. El tipo
de datos siempre es varchar2.
least(expr
Devuelve el menor valor de una lista de
[, expr2]...)
expresiones. Compara carcter a carcter. El tipo
de dato es siempre varchar2.
nvl(expr1, expr2)
Indica el valor que ha de tener expr1 cuando en
su contenido aparezcan nulos. El tipo de dato
que retorna expr2 es siempre el mismo que
tenga expr1.
vsize(expr)
Devuelve el nmero de bytes que ocupa la
representacin interna de expr.
decode(expr, val1, Dentro de una expr evala los valores de la lista,
cod1, ..., valn, val1 ... valn, y los cambia por el cdigo
codn[, default])
correspondiente, cod1 ... codn. Si no se cumple
ninguno podemos asignarle uno por defecto
indicado en la expresin default.
greatest(expr
[, expr2]...)

Variables de entorno
Existe un grupo de variables, que aunque no forman parte de la sintaxis propia
de sql en Oracle, forman parte del entorno de trabajo, y son frecuentemente utilizadas.
Contienen normalmente datos acerca de la sesin actual.
Variable
uid

Sintaxis

user

user

userenv

userenv(opcin)

sysdate

sysdate

Lenguaje SQL

uid

Propsito
Devuelve un entero que es el identificador nico
de el usuario conectado.
Devuelve un varchar2 que contiene el nombre
del usuario conectado en la base de datos local.
Devuelve informacin en un tipo de datos
varchar2 acerca de la sesin actual. El argumento
opcin puede tener los valores: LANGUAGE,
devuelve el lenguaje y el territorio utilizado
durante la sesin; SESSION, devuelve un
identificativo de la sesin; TERMINAL, que
devuelve el identificador del terminal utilizado.
Contiene la fecha del sistema.

Pgina 21/43

Programador/a de Sistemas de Bases de Datos Relacionales

Funciones de grupo
Las funciones de grupo devuelven un resultado basado en un grupo de filas,
mejor que sobre una fila solamente. Algunas funciones de grupo aceptan las siguientes
opciones.
distinct

all

Esta opcin provoca que la funcin de grupo considere


solamente los distintos valores de la expresin. Tambin
puede utilizarse sin funciones de grupo.
Esta opcin provoca que la funcin de grupo considere todos
los valores recuperados, incluyendo duplicados. Es la opcin
por defecto.

Todas las funciones de grupo, excepto count(*) ignoran los valores nulos.
Veamos a continuacin las principales funciones de grupo.
Funcin
avg
count
max
min
stddev
sum
variance

Sintaxis

Propsito
Devuelve la media de n.
Devuelve el nmero de filas en la
consulta.
max([distinctall] expr)
Devuelve el valor mximo de expr.
min([distinctall] expr)
Devuelve el valor mnimo de expr.
stddev([distinctall] n)
Devuelve la desviacin estndar de n.
sum([distinctall] n)
Devuelve la suma de los valores de n.
variance([distinctall] n) Devuelve la varianza de n.
avg([distinctall] n)
count({*[distinctall]
expr})

La clusula group by
Se puede utilizar la clusula group by para agrupar las filas seleccionadas y
devolver una sola fila resumiendo la informacin solicitada. La seleccin de los
conjuntos de filas se realizan para calcular propiedades de los conjuntos, basndose en
los valores de las expresiones especificados en la clusula group by.
Si la sentencia select contiene la clusula group by, la lista de la select solo
puede contener los siguientes tipos de expresiones:
constantes
funciones de grupo
expresiones idnticas a las que estarn en la clusula group by.
expresiones implcitas en las expresiones mencionadas en la select que
evalen el mismo valor para todas las filas de un grupo.

Lenguaje SQL

Pgina 22/43

Programador/a de Sistemas de Bases de Datos Relacionales

Las expresiones de la clusula group by pueden contener cualquier columna de


una tabla o vista mencionada en la clausula from, sin importar que estas columnas estn
o no en la lista de la select.
Se puede utilizar la clusula having para restringir el nmero de grupos de filas
definidas en la clusula group by que se visualizarn. El procesamiento de la sentencia
es el siguiente:
1. Si la sentencia contiene la clusula where, primero se filtran todas las filas
que no satisfagan la condicin where.
2. Se realizan los clculos especificados y se forman los conjuntos de filas
especificados en group by.
3. Solo se muestran los subconjuntos recuperados que satisfacen la clusula
having.

Combinaciones de Tabla. JOINS


Un join es una sentencia select que combina filas de dos o mas tablas. La
clusula where es la que determina como se realiza la combinacin.
Si la clusula where es inexistente o inadecuada puede realizarse un producto
cartesiano, que combinar todas las filas de todas las tablas implicadas en la
combinacin.
El producto cartesiano genera un nmero de filas muy elevado. Por ejemplo si
combino dos tablas de 100 filas cada una, y no establezco clusula where, se generarn
10000 filas. Por lo tanto es conveniente seguir siempre un criterio de combinacin.
Joins simples
El tipo de combinacin mas utilizado es el denominado join simple, que
devuelve filas de dos o mas tablas basndose en una condicin de igualdad. El criterio
de combinacin es pues el establecido por el operador =.
Suponiendo que unimos dos tablas, la sintaxis bsica sera la siguiente:
select
columnas de las tablas citadas en la clusula from. Si existen
columnas con el mismo nombre en ambas tablas es
conveniente anteponer el nombre de la tabla, o un alias de
tabla temporal, al nombre de la columna.
from
Tablas de las que se extrae informacin. Es recomendable
asignar un alias temporal a cada tabla.
where
Criterio de combinacin de las tablas. Igualo las columnas
que conceptualmente estn relacionadas en las dos tablas. Por
ejemplo:
tabla1.columna = tabla2.columna

Lenguaje SQL

Pgina 23/43

Programador/a de Sistemas de Bases de Datos Relacionales

Se pueden seleccionar todas las columnas de ambas tablas. No es necesario que


las columnas mencionadas en el criterio de combinacin sean seleccionadas.
Outer Joins
El outer join o combinacin externa amplifica el resultado de una combinacin
simple (join normal). Un outer join recupera TODAS las filas de la combinacin
externa y tambin aquellas que no encuentren su correspondiente fila pareja de una
tabla a otra.
La sintaxis es:
select col1, col2, ..., coln
from
tabla1, tabla2, ...
where tabla1.col1 = tabla2.col1 (+)

El smbolo (+) debe situarse en el predicado de combinacin al lado de la


columna o columnas pertenecientes a la tabla en la que puede que haya ausencia de
valor.

La Sentencia SELECT: Subconsultas


Una subconsulta es una modalidad de select que aparece dentro de otra
sentencia SQL. A las subconsultas a veces se las denomina consultas anidadas o
subselects. La sentencia que contiene una subconsulta es denominada consulta padre.
Las filas que devuelve la subconsulta son utilizadas por la consulta padre.
La sintaxis es:
select col1, col2, ..., coln
from
tabla1, tabla2
where valor operador (select ...
from
...
where ...)

Las subconsultas pueden utilizarse para varios propsitos:


Para definir el conjunto de filas que se desea insertar en la tabla destino en
una sentencia insert o create table.
Para definir el conjunto de filas que se desea seleccionar en una sentencia
create view.
Para definir uno o mas valores a asignar en las filas existentes en una
sentencia update ... set.
Proporcionar valores para condiciones en las clusulas where y having de
las sentencias select, update y delete.
No hay limite en el nivel de anidaciones de consultas.

Lenguaje SQL

Pgina 24/43

Programador/a de Sistemas de Bases de Datos Relacionales

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:

esquema

tabla o vista
columna

VALUES
subconsulta

Nombre del propietario de la tabla o vista donde se desea


realizar la insercin. Si se omite se presupone que la tabla es
propiedad del usuario que realiza la insercin.
Nombre de tabla o vista donde se realiza la insercin.
Columna/s sobre la/s que se desea realizar la insercin. Si se
omiten los nombres y el orden de las columnas, se espera que
se inserten valores para todas las columnas de la tabla o vista
y el orden en que fue creada.
Especifica un valor para la fila que se desea insertar.
Especifica que la insercin est basada en una sentencia
SELECT. En la sentencia SELECT
deben recuperarse el
mismo nmero de columnas y en el mismo orden que se
especific en la sentencia INSERT.

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.

Lenguaje SQL

Pgina 25/43

Programador/a de Sistemas de Bases de Datos Relacionales

La sintaxis es:

esquema

tabla o vista
columna

subconsulta
WHERE

Nombre del propietario de la tabla o vista donde se desea


realizar la insercin. Si se omite se presupone que la tabla es
propiedad del usuario que realiza la actualizacin.
Nombre de tabla o vista donde se realiza la actualizacin.
Columna/s sobre la/s que se desea realizar la actualizacin. Si
se omiten el nombre y el orden de alguna columna de la
tabla/vista, esta permanecer inalterable.
Especifica que la sentencia SELECT devolver los valores
nuevos que se asignarn a la columna correspondiente.
Precede e indica la condicin que deben cumplir las filas que
se desea actualizar. Si se omite se actualizan todas.

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:

esquema

Lenguaje SQL

Nombre del propietario de la tabla o vista donde se desea


realizar la insercin. Si se omite se presupone que la tabla es
propiedad del usuario que realiza el borrado de las filas.

Pgina 26/43

Programador/a de Sistemas de Bases de Datos Relacionales

tabla o vista
WHERE

Nombre de tabla o vista donde se realiza el borrado de las


filas.
Sirve para indicar la condicin que deben cumplir las filas
que se desean borrar. Si se omite se borran todas. Esta
clusula admite subconsultas.

El Lenguaje de Definicin de Datos


El lenguaje DDL pertenece al lenguaje SQL y nos permite crear, modificar,
renombrar y borrar objetos dentro de la Base de Datos. Hasta ahora slo habamos
manipulado objetos ya creados previamente.
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.
(*) Nota Importante: Previamente se ha indicado que estos comandos pueden
afectar a numerosos objetos. En este manual nos centraremos en la definicin de tablas,
ndices, vistas y sinnimos.

Lenguaje SQL

Pgina 27/43

Programador/a de Sistemas de Bases de Datos Relacionales

La sentencia CREATE TABLE


Permite crear una tabla, que es la estructura bsica de una base de datos.
En el momento de la creacin de la tabla se puede especificar la siguiente
informacin:
Definiciones de columnas ( nombres, tipos de datos y longitud).
Restricciones de integridad.
Caractersticas de almacenamiento de objeto. Donde se almacena y cuanto
ocupa.
Si la tabla se forma partiendo de una sentencia select.
La sintaxis es:

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.

Lenguaje SQL

Pgina 28/43

Programador/a de Sistemas de Bases de Datos Relacionales

La declaracin de restricciones de integridad nos ayuda a definir ciertas


caractersticas de la tabla. Por ejemplo, si una columna puede estar vaca o no, si puede
contener valores duplicados, si esta relacionada con alguna columna de otra tabla, etc.
La integridad de datos es, por lo tanto, asegurarse que los datos en las tablas se
ajustan a una serie de regla predefinidas.
Las condiciones se cumplen en todas las transacciones, y desde todas las
herramientas y programas.
Se definen una sola vez y no necesitan mantenimiento especial.
Conceptos de integridad que se pueden definir:
reglas negocio
integridad de entidades
integridad referencial
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.

Lenguaje SQL

Pgina 29/43

Programador/a de Sistemas de Bases de Datos Relacionales

Not null.

Unique.

Check.

La columna a la que se aplique esta restriccin debe contener


valores. Por ejemplo la columna nmero de identificacin
fiscal de la tabla facturas.
No puede haber mas de dos filas con el mismo valor en
aquella/s columna/s que tengan dicha restriccin. Puede ser
simple o estar compuesta por varias columnas. A diferencia
de la clave primaria, no es obligatoria, y adems puede haber
mas de una por tabla. Si se quiere trabajar bajo normativa
ANSI/ISO la columna que lleve esta restriccin deber tener
adicionalmente la restriccin not null. Por ejemplo una
restriccin de unicidad sobre el cdigo de una pelcula y el
nmero de copia en la tabla prestamos de videos.
Restriccin que realiza un filtro sobre las filas que no
cumplan la condicin impuesta. Es similar a la clusula
where, pero se implementa en la definicin del objeto. No
puede incluir subconsultas ni variables o pseudocolumnas
(user, sysdate, etc.). Por ejemplo comprobar que el precio
de un producto es mayor que cero.

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.
Estableciendo estas relaciones entre claves ajenas (foreign key) y primarias
(primary key) logramos:
Evitar borrados, inserciones o actualizaciones no deseados. Por ejemplo no se
puede borrar una factura (cabecera de factura) que tenga lneas de factura. No
se puede dar de alta una lnea de factura sin su correspondiente cabecera. No
se puede actualizar el identificativo de una lnea de factura.
Propagar modificaciones. Lo contrario a lo anterior. Se pueden definir
acciones de borrado en cascada. Por ejemplo si se borra una cabecera de
factura que se borren las correspondientes lneas.

Lenguaje SQL

Pgina 30/43

Programador/a de Sistemas de Bases de Datos Relacionales

Existe una facilidad adicional, la especificacin DEFAULT, que no es una


restriccin en si, pero que proporciona la posibilidad de indicar un valor por defecto a
columnas que no se mencionan en un insert. Admite pseudocolumnas como user, uid
o sysdate. Por ejemplo, la fecha de emisin de una factura es una columna tipo date, y
si no se le indica un valor explcitamente, tendr el de la fecha del sistema (sysdate).
La sentencia create table se utiliza para establecer todas las relaciones y
reglas anteriormente citadas. Es la llamada sintaxis declarativa.
Nombres de las restricciones
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.
Si no se asigna en el momento de la creacin el sistema generar uno por
defecto, SYS_C000n. Por ejemplo, en el caso de la restriccin not null, es muy comun,
por herencia de anteriores versiones de Oracle, realizar la declaracin de la restriccin
sin indicar la palabra constraint ni darle un nombre, por lo en el diccionario de la base
de datos se almacenara como, por poner un caso, sys_c0015 si es la decimoquinta
declaracin que realizamos sin asignar ningn nombre de restriccin. Sera sys_c0016
para la siguiente, y asi con todas.
Es importante utilizar una metodologa adecuada en la asignacin de nombres a
las restricciones, puesto que no admite duplicados, es decir, un nombre de restriccin no
puede aparecer dos veces dentro del mismo usuario o esquema. Por ejemplo una
sintaxis adecuada para dichos nombres es:
CodigoRestriccion_NombreTabla_NombreColumna

Donde el cdigo de restriccin es:


PK
Primary Key
FK
Foreign Key
NN
Not Null
UK
Unique Key
CK
Check
El nombre de la restriccin aparecer en los mensajes de error, en la
documentacin, al activarla y desactivarla temporalmente o para borrarla.
La informacin acerca de las restricciones definidas por el usuario, y sobre que
columnas estn definidas, se encuentran en las siguientes tablas del diccionario de
datos:

user_constraints
user_cons_columns

Lenguaje SQL

Pgina 31/43

Programador/a de Sistemas de Bases de Datos Relacionales

Como definir una restriccin


Hay dos formas de definir restricciones: Asociadas a columna o asociadas a
tabla.
La sintaxis para la definicin de una restriccin a nivel de columna es:

Definir una restriccin asociada a columna significa que la restriccin va a


continuacin del nombre de la columna, del tipo de dato y la precisin. En este caso, no
es obligatorio darles un nombre con la palabra clave constraint, pero se generar uno
por defecto, como hemos indicado anteriormente.
La sintaxis para la definicin de restricciones a nivel de tabla es:

Lenguaje SQL

Pgina 32/43

Programador/a de Sistemas de Bases de Datos Relacionales

Definir una restriccin asociada a tabla significa que la restriccin va antes o


despus de empezar a definir las columnas. En este caso es obligatorio preceder la
restriccin con la palabra clave constraint, para que el gestor distinga entre lo que es
la definicin de la columna o la declaracin de la restriccin. Al definir una restriccin
asociada a tabla hay que indicar a que columna de la tabla se aplica la restriccin,
puesto que no est a continuacin de la definicin. En ciertos casos, como cuando una
clave primaria est compuesta de varias columnas, o cuando una restriccin se aade a
posteriori, es obligatorio definirlas asociadas a tabla.
La clausula references nos permite especificar en una constraint de tipo
foreign key el nombre de la tabla a la que queremos referenciar, asi como la columna
de la que depende nuestra foreign key. Dicha columna debe estar declarada como
primary key en la tabla a la que referenciamos.
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.

La sentencia CREATE INDEX


Los ndices se utilizan para acceder mas rpidamente en lectura a un dato. Para
que una columna se indexe debe cumplir ciertos requisitos:
Ser consultada con frecuencia.
No sufrir alteraciones de operadores o funciones cuando se consulta.
Contener un volumen importante de informacin.
Tener muchos valores diferentes.
Los ndices pueden ser simples o compuestos de varias columnas.
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.

Lenguaje SQL

Pgina 33/43

Programador/a de Sistemas de Bases de Datos Relacionales

La sintaxis de la sentencia es:

La sentencia CREATE SYNONYM


Un sinnimo es un nombre alternativo a una tabla, vista o procedimiento
almacenado. A diferencia del alias, el sinnimo no es temporal, y permanece hasta que
es borrado.
Independientemente de la creacin del sinnimo es necesario tener acceso al
objeto sobre el que se desea crear dicho sinnimo, o bien ser su propietario.
Existen dos tipos de sinnimos: pblicos o privados. Los pblicos estn
accesibles por cualquier usuario de la base de datos, y para crearlos se necesita el
privilegio CREATE PUBLIC SYNONYM. Los privados son accesibles solo para aquel
usuario que lo crea, y se necesita el privilegio CREATE SYNONYM.
La sintaxis de la sentencia es:

Lenguaje SQL

Pgina 34/43

Programador/a de Sistemas de Bases de Datos Relacionales

La sentencia CREATE VIEW


Una vista es una tabla lgica basada en una o varias tablas. La tabla no se crea
fsicamente, sino que lo que se almacena es la sentencia select de creacin de la vista.
Cuando se recuperan filas de una vista, ocurre que se accede a la sentencia
select que la compone, y que se encuentra almacenada y se ejecuta dicha sentencia.
La sintaxis es:

Recrea la vista si ya existe. Esto permite cambiar la


definicin de la vista sin tener que borrarla y volver a
crearla.
force
Crea la vista incluso si hay problemas de acceso por
insuficientes privilegios a los objetos de la subconsulta en
que se basa la creacin de la vista.
noforce
Es la opcin por defecto y no crea la vista si se producen
errores en la definicin.
with check option Si la vista permite inserciones, comprobar la condicin
where impuesta, no solo en el momento de componer la
vista, sino tambin a la hora de realizar inserciones sobre
ella.
or replace

Sobre una vista no existen restricciones en consulta, pero si en actualizacin


insercin y borrado. Si se cumplen las condiciones impuestas la actualizacin, insercin
o borrado se lleva a cabo sobre la tabla base sobre la que se defini la vista.
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).

Lenguaje SQL

Pgina 35/43

Programador/a de Sistemas de Bases de Datos Relacionales

Para que la vista permita inserciones (permita insert into) la vista en su


definicin debe contener todas las columnas obligatorias de la tabla que la forma.
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 sentencia ALTER TABLE


La sentencia alter table permite modificar la estructura de una tabla para:
Aadir columnas a una tabla ya creada.
Modificar el tipo de dato o la precisin de una columna.
Aadir, activar o desactivar temporalmente y borrar restricciones de
integridad referencial sobre la tabla.
La sintaxis es:

Lenguaje SQL

Pgina 36/43

Programador/a de Sistemas de Bases de Datos Relacionales

Aadir restricciones
Se pueden aadir restricciones de integridad referencial a posteriori. En el
momento que se aade, se bloquea toda la tabla y se produce la comprobacin de la
restriccin que se desea incorporar. Si alguna fila no la cumple, la restriccin no se
aade.
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
El desactivar una restriccin permite que dicha restriccin no se compruebe
temporalmente. No es igual que borrar la restriccin.
Es la forma de incrementar la velocidad en cargas de datos masivas.
La herramienta de carga masiva de Oracle (loader) deshabilita automticamente,
con su mtodo directo DIRECT PATH, las 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
Activa la comprobacin de la restriccin. En el momento de la creacin de una
restriccin se activa, a no ser que se indique la clusula disable.
Cuando se activa posteriormente:
Bloquea la tabla completa, hasta que se termine la comprobacin.
Comprueba una a una las filas.
Si alguna de las filas no cumple la restriccin, no podr llegar a activarse.
Al habilitar una clave primaria o nica se vuelven a construir los ndices
asociados.

Lenguaje SQL

Pgina 37/43

Programador/a de Sistemas de Bases de Datos Relacionales

Excepciones a la activacin de 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:
create table exceptions (
row_id
rowid,
constraints varchar2(30),
owner
varchar2(30),
table_name varchar2(30))
/

La tabla sobre la cual se han definido las restricciones y no pueden activarse,


puede actualizarse a partir de los resultados almacenados en la tabla exceptions.
Borrar restricciones
As como podemos desactivar y activar las restricciones, podemos eliminarlas
(con la clausula drop) definitivamente de la tabla.

La sentencia DROP TABLE


La sentencia drop table nos permite borrar el contenido y la definicin de una
tabla. Para poder eliminar una definicin de tabla es necesario que las tablas
dependientes de la tabla que queremos eliminar hayan sido ya eliminadas previamente.
La sintaxis es:

Lenguaje SQL

Pgina 38/43

Programador/a de Sistemas de Bases de Datos Relacionales

La sentencia DROP INDEX


Se puede eliminar un ndice de una tabla utilizando la sentencia drop index.
Con ella eliminamos solo el ndice, y no los datos de la tabla que estn indexados.
La sintaxis es:

A partir del momento de eliminacin del ndice, las columnas afectadas ya no


estn indexadas. Con la sentencia drop index es indiferente que el ndice sea nico o
no.
La informacin acerca de los ndices esta almacenada en el diccionario de la
base de datos. Las tablas que contienen dicha informacin son:

user_indexes
user_ind_columns

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 sentencia DROP SYNONYM


Se puede borrar un sinnimo sobre una tabla, procedimiento, vista, databaselink,
etc., utilizando en la sentencia drop synonym.
La sintaxis:

Con la utilizacin de esta sentencia no se borra el objeto, sino solamente el alias


permanente del objeto.
La informacin referente a sinnimos se encuentra en las siguientes tablas:

user_synonyms
all_synonyms

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.

Lenguaje SQL

Pgina 39/43

Programador/a de Sistemas de Bases de Datos Relacionales

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 informacin sobre los objetos de un usuario se encuentra en el diccionario en


la vista:

user_objects

Para renombrar un objeto se debe ser propietario del mismo.

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.
La opcin drop storage libera el espacio que el objeto ha tomado a la base de
datos.
La opcin reuse storage
adquirido para dicho objeto.

mantiene reservado el espacio previamente

Al truncar una tabla se truncan de forma implcita los ndices de dicha tabla.

Lenguaje SQL

Pgina 40/43

Programador/a de Sistemas de Bases de Datos Relacionales

El Lenguaje de Control de Datos


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.
Los privilegios de sistema de base de datos permiten ejecutar un conjunto
concreto de ordenes. El privilegio CREATE TABLE permite crear tablas, el privilegio
GRANT ANY PRIVILEGE permite conceder cualquier privilegio de sistema.
Los privilegios de objetos de la base de datos permiten realizar ciertas
operaciones sobre varios objetos. El privilegio DELETE permite borrar filas de las
tablas y vistas. El privilegio SELECT permite consultar tablas.
Un usuario con permiso de sistema CREATE ROLE puede conjuntar privilegios
en varios roles, para as distribuir mejor el acceso a los datos desde otros usuarios.

La sentencia CREATE ROLE


Esta sentencia nos permite crear un identificador de conjunto de privilegios. La
sintaxis es:

role
not identified
identified

Lenguaje SQL

Es el nombre que le queremos dar al conjunto de privilegios.


Cuando un usuario activa la utilizacin de un role no es
necesario validar dicha activacin.
indica que se debe validar la activacin, bien mediante una
clave (by password), bien por la clave de conexin externa
(externally).

Pgina 41/43

Programador/a de Sistemas de Bases de Datos Relacionales

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.
Asignacin de privilegios a roles y usuarios. La sintaxis es:

donde:
system_priv
role
with admin option

Cualquier privilegio de sistema.


Conjunto de privilegios.
Permite que el receptor de los privilegios pueda asignarlos
a otros usuarios.

Para asignar privilegios sobre objetos a usuarios o roles utilizaremos la sintaxis:

donde:
Indica cualquier privilegio de objetos.
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.
object_priv
column

Lenguaje SQL

Pgina 42/43

Programador/a de Sistemas de Bases de Datos Relacionales

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.
La sintaxis para privilegios de sistema y roles es:

Y para privilegios de objetos es:

donde:
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).
object

Lenguaje SQL

Pgina 43/43