You are on page 1of 18

I.E.S.

TURANIANA LENGUAJE SQL


Roquetas de Mar Autor: Alfonso Bonillo.
CURSO 2011/2012.
Dpto de Informtica.

Lenguaje SQL.
SQL es un lenguaje que nos permite interacturar con los SGBD Relacionales para especificar
las operaciones que deseamos realizar sobre los datos y su estructura. SQL son las siglas de
Structured Query Language (Lenguaje de Consulta Estructurado).

SQL es un lenguaje con cierta antigedad que ha tenido que evolucionar para adaptarse a nuevas caractersticas y
requerimientos. Es importante resaltar que SQL no es propiedad de ningn fabricante, sino que es una norma a seguir,
desgraciadamente los fabricantes de software no suelen implementar SQL puro en sus productos, sino que a menudo
incorporan pequeas variaciones para conseguir funcionalidades concretas en sus desarrollos. Esto hace que lo qu debera ser
un estndar no lo sea completamente en la realidad.

Como resumen de lo anterior, un concepto importante que debes asimilar es que SQL es el lenguaje que usan los SGBDR
en la actualidad, y como tal, su estudio y prctica resultan imprescindibles en la formacin para los desarrolladores de
aplicaciones.

Los SGBDR permiten dos modos de acceso a las bases de datos:

Modo interactivo, destinado principalmente a los usuarios finales, avanzados u ocasionales, en el que las diversas
sentencias SQL se escriben y ejecutan en lnea de comandos, utilizando un intrprete de rdenes. Este modo es
el que utilizaremos en las prcticas de esta unidad didctica, porque es el que permite centrarnos exclusivamente en
SQL y aprender el lenguaje de una forma directa y sin necesidad de otro tipo de conocimientos.
Modo embebido, destinado al uso por parte de los programadores. En este caso las sentencias SQL se introducen
en lenguajes de programacin, llamados lenguajes anfitrin (por ejemplo Java, lenguajes de la plataforma .NET
de Microsoft, PHP, C++, etc.), de manera que el resultado es una mezcla de ambos. En este caso el lenguaje
anfitrin aporta lo que le falta a SQL, es decir la programacin. Aunque este es el modo habitual en el que se
utiliza SQL cuando se desarrollan aplicaciones, su estudio de esta forma requerira el estudio simultneo del lenguaje
anfitrin, por lo qu pospondremos su estudio a una unidad didctica posterior para no complicar el estudio de lo que
realmente nos interesa en este momento.

SISTEMAS DE GESTIN DE BASES DE DATOS Pgina 1 de 18


I.E.S. TURANIANA LENGUAJE SQL
Roquetas de Mar Autor: Alfonso Bonillo.
CURSO 2011/2012.
Dpto de Informtica.

Componentes

El lenguaje SQL est compuesto por sentencias. Esas sentencias se pueden clasificar en tres grupos:

Sentencias DDL (Lenguaje de Definicin de Datos): Sirven para crear, modificar y borrar elementos
estructurales en los SGBDR, como:
bases de datos,
tablas,
ndices,
restricciones, etc.
Las definiciones de esos objetos quedan almacenadas en el diccionario de datos del sistema.

Sentencias DML (Lenguaje de Manipulacin de Datos): Nos permiten indicar al sistema las operaciones que
queremos realizar con los datos almacenados en las estructuras creadas por medio de las sentencias DDL. Por
ejemplo son las sentencias que permitirn:
consultar,
ordenar,
filtrar,
aadir,
modificar,
borrar,
etc.
Sentencias DCL (Lenguaje de Control): Un conjunto de sentencias orientado a gestionar todo lo relativo a:
usuarios,
permisos,
seguridad,
etc.

Con el tiempo han surgido nuevas necesidades en los SGBDR que han obligado a incorporar nuevas sentencias que no se
pueden clasificar en los tres grupos clsicos anteriores, cmo son las Sentencias para gestin de transacciones y bloqueos,
las sentencias para replicacin, etc.

Las sentencias SQL a su vez se construyen a partir de:

1. Clusulas: Que modifican el comportamiento de las sentencias. Constan de palabras reservadas y alguno de los
siguientes elementos.
2. Operadores lgicos y de comparacin: Sirven para ligar operandos y producir un resultado booleano (verdadero o
falso).
3. Funciones de agregacin: Para realizar operaciones sobre un grupo de filas de una tabla.
4. Funciones: Para realizar clculos y operaciones de transformacin sobre los datos.
5. Expresiones: Construidas a partir de la combinacin de operadores, funciones, literales y nombres de columna.

Ejemplo Gestin de Proyectos.

Para hacer pruebas y a modo de ejemplo vamos a utilizar la base de datos de Gestin de Proyectos partiendo del diagrama
Entidad/Relacin que aparece abajo y que define el funcionamiento de una empresa en la que los empleados pertenecen a un
determinado departamento de la misma, y trabajan sobre varios proyectos, segn el enunciado que volvemos a repetir:

La empresa est estructurada en departamentos, en cada uno de los cuales se estn desarrollando uno o varios
proyectos, de forma que un proyecto slo depende de un departamento.
Por otro lado, cada departamento consta de uno o varios empleados que trabajan de forma exclusiva para ese
departamento, pero pueden trabajar simultneamente en varios proyectos.
SISTEMAS DE GESTIN DE BASES DE DATOS Pgina 2 de 18
I.E.S. TURANIANA LENGUAJE SQL
Roquetas de Mar Autor: Alfonso Bonillo.
CURSO 2011/2012.
Dpto de Informtica.

Cada empleado tiene un jefe encargado de supervisar su trabajo, pudiendo cada jefe supervisar el trabajo de varios
empleados.
Tanto los empleados, como los departamentos y los proyectos se identifican por un cdigo que es nico para
cada uno de ellos.
De cada empleado se quiere guardar su nombre y su fecha de ingreso en la empresa.
Todos los departamentos y los proyectos tienen un nombre descriptivo.
Por ltimo, se quiere guardar en la base de datos cuntas horas ha trabajado cada empleado en los proyectos en los
que est involucrado.

Partiendo de este Diagrama obtendremos el siguiente esquema Relacional, que define las tablas necesarias y los campos que
las componen, as como las relaciones de integridad referencial (clave externa) entre ellas.

Lenguaje de Definicin de datos (DDL)

Crear una BD.


Lo primero que debes aprender es a crear la base de datos, puesto que ste es el objeto que contiene a todos los dems y
sin el cual no pueden existir stos.

Cuando se crea una base de datos, en el SGBD ocurren muchos procesos internos que culminan con la asignacin de espacio
fsico de almacenamiento para contener las estructuras de datos y acceso a los mismos de la base de datos, y tambin el registro
en el diccionario de datos del SGBD de las caractersticas de la base de datos creada.

Las herramientas que vamos a utilizar para practicar lo aprendido en esta unidad son las aplicaciones MySQL
Administrator y MySQL Query Browser, en concreto usaremos MySQL Query Browser para practicar todas las sentencias
SQL que vayamos aprendiendo, puesto que MySQL es un intrprete de rdenes SQL.

SISTEMAS DE GESTIN DE BASES DE DATOS Pgina 3 de 18


I.E.S. TURANIANA LENGUAJE SQL
Roquetas de Mar Autor: Alfonso Bonillo.
CURSO 2011/2012.
Dpto de Informtica.

En el caso de la creacin de una base de datos se puede hacer segn lo indicado en la animacin que te presentamos en el
apartado 3 de esta misma unidad, utilizando MySQL Administrator. Como recordars entonces creamos una base de datos
llamada biblioteca.

Podemos ahora seguir los mismos pasos para crear la base de datos de nuestro ejemplo, a la qu llamaremos gestionproyectos.
El otro modo de crear una base de datos es utilizando el MySQL Query Browser y tecleando la sentencia SQL adecuada. A
continuacin te presentamos la sintaxis de la sentencia para crear bases de datos en SQL, CREATE DATABASE.

CREATE DATABASE [IF NOT EXISTS] <nombre_bd>

Crea una base de datos llamada <nombre_bd>. La clusula IF NOT EXISTS es til para evitar errores si es que la base de
datos ya exista con anterioridad.

En nuestro ejemplo la sentencia SQL adecuada sera:

CREATE DATABASE IF NOT EXISTS gestionproyectos

Si ahora tecleamos la sentencia SHOW DATABASES, obtendremos la lista de las bases de datos que existen en nuestro SGBD,
comprobando que aparece la recin creada gestionproyectos.

Borrar una BD.

Para borrar una base de datos se utiliza la sentencia DROP DATABASE:

DROP DATABASE [IF EXISTS] <nombre_bd>

En nuestro ejemplo deberamos escribir: DROP DATABASE gestionproyectos

Hay que tener cuidado ya que borraremos la base de datos y todo lo que contiene. Los SGBD introducen medidas de
seguridad de forma que slo los usuarios autorizados (normalmente el administrador y el propietario de la base de datos)
pueden ejecutar este tipo de sentencias. Veremos la gestin de la seguridad y los usuarios ms adelante.

Crear una tabla.

Para crear una tabla en SQL se utiliza la sentencia CREATE TABLE.

A continuacin te presentamos una sintaxis reducida de esta sentencia:

CREATE TABLE [IF NOT EXISTS] nombre_tabla


(definicin_elemento_de_tabla,...)

Tipos de Datos para cada columna:


BIT[(longitud)]
| INT[(longitud)] [UNSIGNED] [ZEROFILL]
| INTEGER[(longitud)] [UNSIGNED] [ZEROFILL]
| REAL[(longitud,decimales)] [UNSIGNED] [ZEROFILL]
| DOUBLE[(longitud,decimales)] [UNSIGNED] [ZEROFILL]
| FLOAT[(longitud,decimales)] [UNSIGNED] [ZEROFILL]
| DECIMAL(longitud,decimales) [UNSIGNED] [ZEROFILL]
| NUMERIC(longitud,decimales) [UNSIGNED] [ZEROFILL]
| DATE | TIME | TIMESTAMP | DATETIME | YEAR
| CHAR(longitud) | VARCHAR(longitud)
| BINARY(longitud)
| BLOB
| TEXT [BINARY]
| ENUM(valor1,valor2,valor3,...)
| SET(valor1,valor2,valor3,...)

SISTEMAS DE GESTIN DE BASES DE DATOS Pgina 4 de 18


I.E.S. TURANIANA LENGUAJE SQL
Roquetas de Mar Autor: Alfonso Bonillo.
CURSO 2011/2012.
Dpto de Informtica.

Cualquier tipo de dato utilizado como dominio de una columna puede contener el valor NULL. Este valor hay que
interpretarlo como ausencia de valor, no hay que confundirlo, por ejemplo, con el valor 0 de una columna de tipo INTEGER o
con la cadena vaca en una columna de tipo VARCHAR. Una columna que forme parte de la clave primaria de una tabla no
puede contener el valor NULL, y tampoco aquellas columnas definidas como NOT NULL, ser el propio SGBDR el
encargado de mantener esta restriccin e impedir cualquier intento contrario a la regla.

Lo ideal es crear un script con las sentencias para crear todas las tablas de la base de datos, como el que se muestra a
continuacin:
CREATE TABLE departamento (
cddep VARCHAR(2) NOT NULL PRIMARY KEY,
nombre VARCHAR(30),
ciudad VARCHAR(20)
);

CREATE TABLE empleado (


cdemp VARCHAR(3) NOT NULL PRIMARY KEY,
nombre VARCHAR(30),
fecha_ingreso DATE,
cdjefe VARCHAR(3) NULL,
coddep VARCHAR(2),
FOREIGN KEY (coddep)
REFERENCES departamento(cddep)
ON UPDATE CASCADE ON DELETE RESTRICT,
FOREIGN KEY (cdjefe)
REFERENCES empleado(cdemp)
ON UPDATE CASCADE ON DELETE SET NULL
);

CREATE TABLE proyecto (


cdpro VARCHAR(3) NOT NULL PRIMARY KEY,
nombre VARCHAR(30),
coddep VARCHAR(2),
FOREIGN KEY (coddep)
REFERENCES departamento(cddep)
ON UPDATE CASCADE ON DELETE RESTRICT
);

CREATE TABLE trabaja (


codemp VARCHAR(3) NOT NULL,
codpro VARCHAR(3) NOT NULL,
nhoras INTEGER DEFAULT 0,
PRIMARY KEY (codemp,codpro),
FOREIGN KEY (codemp)
REFERENCES empleado(cdemp)
ON UPDATE CASCADE ON DELETE CASCADE,
FOREIGN KEY (codpro)
REFERENCES proyecto(cdpro)
ON UPDATE CASCADE ON DELETE CASCADE
);

Aunque aparece en el script MySQL no tiene en cuenta la definicin de la integridad referencial.

Borrar una tabla.


El borrado de una tabla es muy simple, aunque hay que tener cuidado en esta operacin, porque un borrado indebido puede
tener consecuencias graves, si se borran datos que no se deban borrar. Asegrate dos veces siempre antes de usar esta
sentencia.

SISTEMAS DE GESTIN DE BASES DE DATOS Pgina 5 de 18


I.E.S. TURANIANA LENGUAJE SQL
Roquetas de Mar Autor: Alfonso Bonillo.
CURSO 2011/2012.
Dpto de Informtica.

La sentencia a utilizar es:

DROP TABLE <nombre_tabla>

Por ejemplo, para borrar la tabla empleado:

DROP TABLE empleado

Modificar una tabla.

Es posible modificar la estructura de una tabla por medio de la sentencia ALTER TABLE. Su sintaxis es muy parecida a la
de CREATE TABLE

Lenguaje de manipulacin de datos (DML)


Consultas sobre las filas de una tabla. Sentencia SELECT.

Las consultas en SQL son la operacin ms comn y se hacen con la sentencia SELECT. Una sentencia SELECT tiene
como sintaxis ms bsica y sencilla la compuesta por las clusulas SELECT y FROM.

SELECT <lista_de_expresiones> FROM <tabla>

Siendo <lista_de_expresiones> una lista de expresiones a evaluar por cada fila afectada de la tabla, (normalmente sern
nombres de columnas). Por ejemplo, para obtener los nombres de todos los departamentos y las ciudades donde se encuentran,
se teclea en SQL:

SELECT nombre, ciudad FROM departamento

Si queremos obtener todas las columnas de una tabla se puede utilizar cmo <lista_de_expresiones> el carcter *. Por
ejemplo, para obtener todos los datos de todos los empleados podemos utilizar la siguiente sentencia SELECT:

SELECT * FROM empleado

Se pueden utilizar expresiones que realicen algn clculo u operacin. Por ejemplo, si suponemos que cada hora de trabajo
se paga a 40 euros. Una lista de lo que hay que pagar a cada empleado que trabaja en un proyecto se hara de la siguiente
manera:

SELECT codemp, nhoras*40 FROM trabaja

La sentencia SELECT admite otras clusulas que la hacen ms potente y verstil. Estas son las siguientes:

WHERE
ORDER BY
GROUP BY
HAVING
LIMIT

Clusula WHERE.

Hasta ahora hemos utilizado sentencias de consulta SELECT que no discriminaban las filas de la tabla sobre la que se
realizaba la consulta. En la prctica se utiliza mucho esa discriminacin y se consigue con la clusula WHERE. Esta clusula
SISTEMAS DE GESTIN DE BASES DE DATOS Pgina 6 de 18
I.E.S. TURANIANA LENGUAJE SQL
Roquetas de Mar Autor: Alfonso Bonillo.
CURSO 2011/2012.
Dpto de Informtica.

va seguida de una condicin lgica o criterio que se evaluar para cada fila de la tabla, y slo se listarn las filas que cumplan
dicha condicin. WHERE aparecer despus de la clusula FROM.

SELECT <lista_de_expresiones>
FROM <tabla>
WHERE <criterio>

Por ejemplo, si queremos obtener los nombres de los empleados del departamento 12 podemos ejecutar la sentencia:
SELECT nombre FROM empleado WHERE coddep='12'

Para construir el criterio disponemos de una gran variedad de operadores lgicos, a continuacin los veremos y practicaremos.

Operadores de comparacin: <, <=, =, >=, >, <>. Con el significado habitual.

Por ejemplo, empleados que han trabajado 30 o ms horas:

SELECT codemp FROM trabaja WHERE nhoras >=30

Operador de rango: BETWEEN AND. Expresa un rango de valores en el formato desde-hasta.

Por ejemplo, empleados que entraron en la empresa en el primer semestre del ao 1999:

SELECT * FROM empleado Resultado tras ejecutar la sentencia:


WHERE fecha_ingreso
BETWEEN '01-01-1999' AND '31-06-1999'

Recuerda que para ejecutar las sentencias con fechas, el formato en MySQL es el britnico:
(aaaa-mm-dd)

Operador de pertenencia a un conjunto: <expresin> IN (<conjunto>). Seleccionar las filas donde la


expresin se evalu como un valor perteneciente al conjunto expresado.
Por ejemplo, departamentos que estn situados en Almera o Mlaga:

SELECT * FROM departamento Resultado de la ejecucin de la sentencia:


WHERE ciudad IN ('Almeria','Malaga')

Operador de correspondencia con un patrn: <expresin> LIKE <patrn>. Seleccionar las filas donde la
expresin coincida con las reglas establecidas por el patrn. Para construir el patrn se utilizan caracteres comodines, los
ms usados son: % que se sustituye por cualquier secuencia de 0 o ms caracteres, y _ que se sustituye por un nico
carcter.

Por ejemplo, empleados cuyo nombre contiene el apellido ar:

SELECT * FROM empleado WHERE nombre LIKE '%ar%'

Condicin de valor nulo o no nulo: <expresin> IS NULL y <expresin> IS NOT NULL respectivamente.
Se vern afectadas las filas cuyo valor de expresin sea NULL o no, respectivamente. Por ejemplo, empleados que no
tienen jefe asignado:

SELECT * FROM empleado WHERE cdjefe IS NULL

SISTEMAS DE GESTIN DE BASES DE DATOS Pgina 7 de 18


I.E.S. TURANIANA LENGUAJE SQL
Roquetas de Mar Autor: Alfonso Bonillo.
CURSO 2011/2012.
Dpto de Informtica.

Operadores lgicos para enlazar ms de un criterio: AND y OR. Sirven para obtener un resultado lgico combinando el
resultado de dos criterios. Tienen el habitual significado del Y y el O lgicos.
Por ejemplo, empleados del departamento 12 o del departamento 14:

SELECT * FROM empleado WHERE coddep='12' OR coddep='14'

Operador de negacin lgico: NOT. Niega lgicamente el criterio que sigue a continuacin. Tambin puede representarse
con el carcter de admiracin !. Por ejemplo, empleados que no son del departamento 12:

SELECT * FROM empleado SELECT * FROM empleado


WHERE NOT (coddep='12') WHERE coddep != '12'

Las expresiones lgicas pueden agruparse con parntesis para indicar el orden de evaluacin o aclarar las expresiones
complicadas. Por ejemplo, las expresiones cdpro='DAG' OR (cdpro='GRE' AND nhoras>=15) y
(cdpro='DAG' OR cdpro='GRE') AND nhoras>=15 , no producen el mismo resultado. Prueba a lanzar las
sentencias SQL correspondientes y comprubalo.

Clusula DISTINCT.

En muchas ocasiones las consultas arrojan resultados repetidos. Por ejemplo, si utilizamos la sentencia SELECT siguiente
para ver los departamentos donde trabaja algn empleado:

SELECT coddep FROM empleado

Obtendremos departamentos repetidos tantas veces como empleados existan en cada departamento.

La clusula DISTINCT suprime los resultados repetidos de la consulta, de forma que se muestren slo los resultados
distintos, es decir, cada resultado aparecer en la consulta una sola vez.

Por tanto, para la consulta anterior se pueden conseguir resultados ms correctos utilizando DISTINCT:

SELECT DISTINCT coddep FROM empleado

DISTINCT se aplica a la fila completa. Si escribimos:

SELECT DISTINCT coddep, cdjefe FROM empleado

Se obtienen las combinaciones nicas de empleado y jefe.

Tambin se pueden consultar las ciudades en las que tenemos algn departamento, para ello no tiene ningn sentido que
aparezca una ciudad dos veces:

SELECT DISTINCT ciudad FROM departamento

Clusula ORDER BY.

Una de las caractersticas intrnsecas a los SGBDR y SQL es que el orden de aparicin de las filas en una consulta no es
predecible. Esto quiere decir que en momentos diferentes la misma consulta puede producir el mismo conjunto de filas
pero con ordenaciones diferentes. Esto es as porque el motor de base de datos toma decisiones en funcin del momento, en
aras de la mayor optimizacin y rendimiento de las operaciones.

Para conseguir un orden de filas dado en funcin del criterio que deseemos imponer se utiliza la clusula ORDER BY.
En ella se pueden disponer una serie de criterios separados por comas para ordenar los resultados de una consulta.
Normalmente esos criterios sern nombres de columna, aunque es posible utilizar expresiones.
SISTEMAS DE GESTIN DE BASES DE DATOS Pgina 8 de 18
I.E.S. TURANIANA LENGUAJE SQL
Roquetas de Mar Autor: Alfonso Bonillo.
CURSO 2011/2012.
Dpto de Informtica.

Por ejemplo, para listar los nombres de los empleados en orden alfabtico podemos emplear la siguiente sentencia SELECT:

SELECT nombre FROM empleado ORDER BY nombre

Para obtener los nombres de empleado ordenados por el departamento donde trabajan, y a igualdad de ste, usar como segundo
criterio de ordenacin el orden alfabtico de nombre, se empleara:

SELECT coddep, nombre FROM empleado ORDER BY coddep, nombre

Tambin es posible ordenar referenciando la posicin de la columna deseada de la clasula SELECT:

SELECT coddep, nombre FROM empleado ORDER BY 1, 2

Se puede decidir si el orden ser ascendente (ASC) o descendente (DESC). Si queremos la lista de departamentos ordenada
por orden alfbetico descendente de la ciudad de localizacin podemos usar:

SELECT * FROM departamento ORDER BY ciudad DESC

El sentido de la ordenacin por defecto es ascendente. Se pueden combinar criterios ascendentes y descendentes. Por
ejemplo, si queremos la lista de departamento por orden ascendente de ciudad y descendente de nombre, se puede emplear.

SELECT * FROM departamento ORDER BY ciudad ASC, nombre DESC

Por supuesto se puede combinar la clusula ORDER BY con la clusula WHERE. En este caso ORDER BY debe aparecer
despus de WHERE. Por ejemplo, la lista de empleados por orden alfabtico del departamento 12 se obtendra con:

SELECT * FROM empleado El resultado de ejecutar la sentencia SQL


WHERE coddep='12'
ORDER BY nombre

Clusula GROUP BY y funciones de agregacin.

En muchos casos se necesita obtener resultados resumen de los datos contenidos en las filas de una tabla. Por ejemplo
calcular la suma de las horas trabajadas por todos los empleados de la empresa, u obtener el nmero de departamentos de los
que consta la empresa.

En estos casos se utilizan las funciones de agregacin. Son funciones que realizan clculos sobre expresiones basadas en los
datos de la tabla y resumen en un solo dato (numrico) el resultado. Las funciones de agregacin son:

o Suma SUM(<expresin>) : Calcula la suma de los valores de expresin de cada fila. Por ejemplo, para calcular la
suma de horas trabajadas por todos los empleados se utilizara:

SELECT SUM(nhoras)FROM trabaja

o Media aritmtica AVG(<expresin>) : AVG es la abreviatura de Average, que significa media. Como te
imaginars, calcula la media aritmtica de los valores de expresin. Por ejemplo, la media de horas trabajadas por cada
empleado se calcula como:

SELECT AVG(nhoras)FROM trabaja

SISTEMAS DE GESTIN DE BASES DE DATOS Pgina 9 de 18


I.E.S. TURANIANA LENGUAJE SQL
Roquetas de Mar Autor: Alfonso Bonillo.
CURSO 2011/2012.
Dpto de Informtica.

o Valor mnimo MIN(<expresin>) : Produce como resultado el mnimo de los valores del conjunto de expresiones
evaluadas. Por ejemplo, el mnimo valor de horas trabajadas (correspondiente al trabajador que menos ha horas ha
trabajado):

SELECT MIN(nhoras)FROM trabaja

o Valor mximo MAX(<expresin>) : Obtiene el mximo del conjunto de expresiones. Por ejemplo, fecha de ingreso
en la empresa ms reciente, es decir, la fecha en la que ingres el ltimo trabajador contratado por la empresa.
(Evidentemente se entiende que las fechas ms recientes son mayores que las ms antiguas):

SELECT MAX(fecha_ingreso) FROM empleado

o Cuenta del nmero de filas de una consulta COUNT(*) : Calcula el nmero de filas que se obtienen en una consulta.
Por ejemplo para saber el nmero de empleados de la empresa:

SELECT COUNT(*) FROM empleado

o Cuenta del nmero de filas que no producen el valor NULL COUNT(<expresin>): Produce como resultado un
nmero que indica cuntas filas de la consulta no producen NULL al evaluar la expresin. Por ejemplo para calcular el
nmero de empleados que estn asignados a un departamento:

SELECT COUNT(coddep) FROM empleado

o Cuenta del nmero de filas distintas de una consulta COUNT(DISTINCT <expresin>) : Anlogo al anterior
pero sin contar las filas repetidas. Por ejemplo, si queremos saber en cuntas ciudades diferentes existen departamentos de
la empresa:

SELECT COUNT(DISTINCT ciudad) FROM departamento

Observaciones:

No se pueden combinar funciones de agregacin con otro tipo de expresiones, esto provocara un error de
SQL. Aunque s se puede combinar varias funciones de agrupamiento en la misma consulta. Si se quiere saber la
fecha de ingreso ms antigua y ms reciente:

SELECT MIN(feha_ingreso), MAX(fecha_ingreso) FROM empleado

Es muy til combinar estas funciones de agregacin con la clusula GROUP BY, de esta forma se pueden
calcular subtotales de grupos de filas con alguna caracterstica en comn. Por ejemplo, si quisiramos saber cul
es el nmero de horas trabajadas en cada proyecto se podra emplear:

SELECT codpro, SUM(nhoras) FROM trabaja GROUP BY codpro

En caso de utilizar GROUP BY s es posible mezclar expresiones simples con funciones de agregacin,
siempre que las expresiones simples formen parte de la clusula ORDER BY.

Tambin es posible establecer varios niveles de agrupamiento. Por ejemplo, lista del nmero de empleados
por cada departamento y jefe:
El resultado de la ejecucin de la sentencia:
SELECT coddep, cdjefe, COUNT(nombre)
FROM empleado
GROUP BY coddep,cdjefe

SISTEMAS DE GESTIN DE BASES DE DATOS Pgina 10 de 18


I.E.S. TURANIANA LENGUAJE SQL
Roquetas de Mar Autor: Alfonso Bonillo.
CURSO 2011/2012.
Dpto de Informtica.

Clusula HAVING.

Al igual que la clusula WHERE se utiliza para seleccionar filas individuales del resultado de una consulta, la clusula
HAVING puede ser utilizada para seleccionar grupos de filas. El formato de la clusula HAVING es anlogo al de la
clusula WHERE, consistiendo en la palabra clave HAVING seguida del criterio lgico de seleccin. Por ejemplo, si se quisiera
obtener un listado de proyectos con nmero total de horas trabajadas, salvo aquellos en los que no se haya trabajado ninguna
hora, se podra escribir en SQL:

SELECT codpro, SUM(nhoras) El resultado de ejecutar la sentencia:


FROM trabaja
GROUP BY codpro
HAVING SUM(nhoras)>0

Es fcil confundir WHERE y HAVING. Cundo utilizar uno y otro? Recuerda WHERE para seleccionar filas individuales
de la clusula FROM, HAVING para seleccionar filas de agrupamiento de la clusula GROUP BY.

Veamos un ejemplo combinado. Si se desea seleccionar a los empleados cuyo jefe es el empleado 100, agruparlos por
departamento, y obtener la lista de aquellos departamentos en los que haya un empleado o ms, se puede escribir:

SELECT coddep, COUNT(nombre) Resultado de su ejecucin:


FROM empleado
WHERE cdjefe='100'
GROUP BY coddep
HAVING COUNT(nombre)>0

Por supuesto se puede combinar lo anterior con la ordenacin por medio de la clusula ORDER BY. Por ejemplo con orden
descendente.

SELECT coddep, COUNT(nombre) Resultado de su ejecucin:


FROM empleado
WHERE cdjefe='100'
GROUP BY coddep
HAVING COUNT(nombre)>0
ORDER BY coddep DESC

Clusula LIMIT.

Es muy necesario en ocasiones poder limitar el nmero de filas que devuelve una consulta. Esto se consigue con la
clusula LIMIT. Esta clausula no funciona en Oracle, pero s en MySQL. La sintaxis de esta clusula es la siguiente:

LIMIT <desplazamiento>, <nmero de filas>

Limita la sentencia SELECT a las primeras <nmero de filas> contadas a partir de la fila <desplazamiento>.

SISTEMAS DE GESTIN DE BASES DE DATOS Pgina 11 de 18


I.E.S. TURANIANA LENGUAJE SQL
Roquetas de Mar Autor: Alfonso Bonillo.
CURSO 2011/2012.
Dpto de Informtica.

Por ejemplo, para listar los tres empleados ms antiguos de la empresa:

SELECT nombre, fecha_ingreso Tras ejecutar la sentencia SQL:


FROM empleado
ORDER BY fecha_ingreso ASC
LIMIT 3

Otro ejemplo puede ser conocer los dos empleados que ms horas han trabajado en proyectos.

SELECT codemp,SUM(nhoras) Tras ejecutar la sentencia


FROM trabaja
GROUP BY codemp
ORDER BY 2 DESC
LIMIT 2

Subconsultas.

En muchas ocasiones el criterio lgico para seleccionar las filas de una consulta en la clusula WHERE viene dado por los
resultados de otra consulta previa. A esta consulta previa se la denomina subconsulta o consulta anidada. Es una
caracterstica muy importante del lenguaje SQL, hasta el punto de que muchas consultas no podran ser realizadas sin el
uso de esta capacidad.

o Una sentencia SQL con una subconsulta es frecuentemente el modo ms natural de expresar una consulta, ya que se
asemeja mucho a la descripcin de la consulta en lenguaje natural.
o Las subconsultas hacen ms fcil la escritura de sentencias SELECT, ya que permiten descomponer una consulta en
partes (la consulta y sus subconsultas) y luego recomponerlas.

Una subconsulta es una consulta que aparece dentro de la clusula WHERE o HAVING de otra sentencia SQL. Por
ejemplo, si analizamos el enunciado lista de empleados que han trabajado ms horas de la media de horas trabajadas de todos
los empleados en proyectos, nos daremos cuenta que en realidad hay dos consultas en el enunciado, en una de ellas hay que
calcular la media de horas trabajadas, y en la otra hay que listar los empleados que superan esa media. En SQL quedara as (no
funciona en MySQL pero si en Oracle):

SELECT codemp,nhoras FROM trabaja


WHERE nhoras > (SELECT AVG(nhoras) FROM trabaja)

El resultado de la ejecucin de esa sentencia:

SISTEMAS DE GESTIN DE BASES DE DATOS Pgina 12 de 18


I.E.S. TURANIANA LENGUAJE SQL
Roquetas de Mar Autor: Alfonso Bonillo.
CURSO 2011/2012.
Dpto de Informtica.

En la clusula HAVING las subconsultas sirven para seleccionar los grupos de filas del resultado. Por ejemplo, lista de
empleados que han trabajado ms horas en proyectos que las horas dedicadas al proyecto 522:

SELECT codemp, SUM(nhoras) FROM trabaja


GROUP BY codemp
HAVING SUM(nhoras) > (SELECT SUM(nhoras) FROM trabaja WHERE codpro='522')

Es necesario hacer una serie de consideraciones relativas a las subconsultas:

o Una subconsulta debe producir una nica columna de datos como resultado. Esto significa que una subconsulta
siempre tiene un nico elemento de seleccin de la clusula SELECT.
o La clusula ORDER BY no tiene sentido en una subconsulta. Los resultados de la subconsulta se utilizan internamente
por parte de la consulta principal y nunca son visibles al exterior, por lo que carece de sentido ordenarlos.
o Es posible referirse a nombres de columnas de la consulta principal desde dentro de la subconsulta.

Existe una gama muy rica de operadores para relacionar la consulta principal y la subconsulta. Vamos a verlos a continuacin.

o Operadores de comparacin: <, <=, =, >=, >, <>: Se compara el valor de la expresin WHERE utilizada en la
consulta principal con un nico valor proporcionado por la subconsulta. Por ejemplo, lista de los departamentos que estn
en la misma ciudad que el departamento 10:

SELECT cddep FROM departamento


WHERE ciudad = (SELECT ciudad FROM departamento WHERE cddep='10')

o Operador de pertenencia a un conjunto <expresin> IN (<subconsulta) : Se seleccionan las filas en las que
la evaluacin de la expresin sea alguno de los valores del conjunto de valores producido por la subconsulta. Por ejemplo,
lista de empleados que tienen como jefe un empleado del departamento 14:

SELECT nombre, cddep, cdjefe FROM empleado


WHERE cdjefe IN ( SELECT cdemp FROM empleado WHERE cddep='14')

o Operador de existencia EXIST(<subconsulta>) : Este operador comprueba si la subconsulta siguiente devuelve


alguna fila o no, evalundose a VERDADERO o FALSO respectivamente. Hay que hacer notar que en la subconsulta
debe aparecer alguna columna de la consulta principal. Para ello se puede utilizar la notacin <tabla>.<columna>, de
manera que no se produzcan ambigedades. Por ejemplo, si quisiramos obtener los nombres de los empleados que
trabajan en departamentos situados en Almera, podramos escribir:

SELECT nombre FROM empleado


WHERE EXISTS (SELECT * FROM departamento WHERE ciudad='Almera' AND
empleado.cddep=departamento.cddep)

Observa cmo hemos incluido una condicin en la clusula WHERE de la subconsulta que la relaciona con la consulta principal
empleado.cddep=departamento.cddep.

SISTEMAS DE GESTIN DE BASES DE DATOS Pgina 13 de 18


I.E.S. TURANIANA LENGUAJE SQL
Roquetas de Mar Autor: Alfonso Bonillo.
CURSO 2011/2012.
Dpto de Informtica.

o Tambin es posible utilizar alias para los nombres de tabla en el caso de que la tabla de la consulta principal y de la
subconsulta sean la misma, un alias es como un sobrenombre dado a una tabla. Se pueden definir los alias en la
clusula FROM, a continuacin del nombre la tabla referenciada. Por ejemplo, si quisiramos obtener la lista de los
empleados que son jefes de algn empleado, deberamos comprobar para cada empleado de la tabla empleado s existe
(EXISTS) algn otro empleado de la tabla empleado que tiene como cdjefe el cdemp del empleado que estamos
comprobando. Quedara as:

SELECT nombre FROM empleado a


WHERE EXISTS (SELECT * FROM empleado b WHERE a.cdemp=b.cdjefe)

o Operadores de comparacin cuantificada <operador de comparacin> [SOME|ALL] : Combinan el uso de


los operadores de comparacin (<,>,<=,>=,=,<>) con la cuantificacin alguno (SOME) o todos (ALL). Veamos
un ejemplo de cada caso.

Lista de los empleados que tienen una antigedad superior a alguno del departamento 13:

SELECT nombre,fecha_ingreso,cdemp FROM empleado


WHERE fecha_ingreso>SOME(SELECT fecha_ingreso FROM empleado WHERE cddep='13')

Lista de empleados y horas trabajadas de los empleados que han trabajado ms horas que todos los empleados del proyecto
512:

SELECT codemp,nhoras FROM trabaja


WHERE nhoras > ALL (SELECT nhoras FROM trabaja WHERE codpro='512')

Insertar filas en una tabla. Sentencia INSERT INTO.

Si partimos de una estructura de tablas vacas lo primero ser aprender a insertar filas en ellas. Para esto se utiliza la sentencia
INSERT.

Existen dos formas bsicas de la sentencia INSERT, aadir una fila indicando los valores que deben tomar las columnas, o
bien extraer las filas de una tabla ya existente y aadirlas a otra tabla. Veamos las sintaxis correspondientes a los dos modos de
operacin indicados:

Aadir una fila a una tabla con expresin de los valores de las columnas:

INSERT [INTO] <tabla> [(<columna>,...)]


VALUES ({<expresin> | DEFAULT},...)

Al escribir una sentencia INSERT el nmero de columnas y de valores debe ser igual y escritos en el mismo orden. Se
pueden dejar columnas sin especificar, en este caso tomarn el valor por defecto indicado cuando se cre la tabla (DEFAULT).

Por ejemplo, si queremos aadir el departamento con cdigo 22, llamado Ventas y situado en la ciudad de Almera
escribiremos:

INSERT INTO departamento (cddep, nombre, ciudad)


VALUES ('22','Ventas','Almera')

Si no queremos suministrar la ciudad del departamento escribiremos:

INSERT INTO departamento (cddep, nombre) VALUES ('20','Contabilidad')

En este caso no le hemos dado valor a la columna ciudad.

SISTEMAS DE GESTIN DE BASES DE DATOS Pgina 14 de 18


I.E.S. TURANIANA LENGUAJE SQL
Roquetas de Mar Autor: Alfonso Bonillo.
CURSO 2011/2012.
Dpto de Informtica.

Si quisiramos aadir el empleado con cdigo 113, de nombre Pedro Picapiedra, con fecha de ingreso 7 de marzo de 1999,
cuyo jefe es el empleado con cdigo 112 y que trabaja en el departamento 11, deberamos escribir:

INSERT INTO empleado (cdemp, nombre, fecha_ingreso, cdjefe, cddep)


VALUES ('113','Pedro Picapiedra','7-3-1999','112','11')

El ejemplo anterior merece varios comentarios:

o Si el empleado con cdigo 112 no existe en la tabla de empleados la sentencia INSERT fallar y no tendr
ningn efecto, en este caso se habr incumplido la clusula FOREIGN KEY que indica que cdjefe es una clave
externa y por lo tanto se est incumpliendo la regla de integridad de referencia. Podemos aadir el empleado
112 a la tabla de empleados y repetir la insercin del empleado 113. Observa que tambin existe una clusula
FOREIGN KEY respecto de la tabla de departamentos.
o La columna fecha_ingreso se declar de tipo DATE. En MySQL las fechas deben ser suministradas en el
formato ao-mes-da, que es el formato en ingls. Ten cuidado con esto. La introduccin de fechas con
nuestro formato habitual en espaol puede ser fuente de frecuentes errores

Aadir filas a una tabla procedentes de otra tabla:

INSERT [INTO] <tabla> [(<columna>,...)]


SELECT ...

Para entender bien la estructura de esta sintaxis deberamos conocer la sentencia SQL que permite seleccionar filas de
una tabla (SELECT), puesto que la seleccin de las filas de origen se hace con una sentencia SELECT normal. Ahora te
presentamos un sencillo ejemplo:

Si quisiramos aadir todos los empleados del departamento 12 al proyecto con cdigo 522, la sentencia a utilizar sera:

INSERT INTO trabaja (cdemp,cdpro)


SELECT cdemp,'522' FROM empleado WHERE cddep='12'

No te preocupes si en este momento no entiendes bien como funciona la sentencia SELECT. Ms adelante las estudiars en
detalle, ya que es la sentencia ms importante y verstil de SQL.

Modificacin de una fila.


La informacin contenida en las tablas de una base de datos a menudo necesita ser actualizada para corregir errores de
insercin, o para cambiar los valores de las columnas de forma que se reflejen los cambios en la situacin que la base de datos
est representando.

En nuestro ejemplo podramos querer modificar los datos ya almacenados para corregir el nombre de un empleado mal escrito
en el momento de la insercin, o para reflejar que un departamento ha cambiado de ciudad.

La sentencia SQL para modificar datos de una tabla es:

UPDATE <tabla>
SET <columna_1>=<expresin_1> [, <columna_2>=<expresin_2> ...]
WHERE <criterio>]

Si no se especifica ningn criterio de seleccin la modificacin se efecta sobre todas las filas de la tabla. En cambio si
queremos modificar solamente alguna o algunas filas concretas habr que determinar a cuales nos referimos por medio
de la clusula WHERE, especificando una condicin lgica que permita discriminar a qu filas afectar la operacin (criterio).

Por ejemplo, si queremos cambiar la ciudad donde se ubica el departamento 12, y hacer que sea Crdoba, escribiremos:

UPDATE departamento SET ciudad='Crdoba' WHERE cddep='12'

SISTEMAS DE GESTIN DE BASES DE DATOS Pgina 15 de 18


I.E.S. TURANIANA LENGUAJE SQL
Roquetas de Mar Autor: Alfonso Bonillo.
CURSO 2011/2012.
Dpto de Informtica.

Es importante que te des cuenta que si hubiramos escrito:

UPDATE departamento SET ciudad='Crdoba'

Habramos cambiado TODOS los departamentos a Crdoba!

Es posible especificar expresiones como nuevo valor de columnas. Si deseamos incrementar en 5 las horas de trabajo
dedicadas al proyecto 512 por todos los empleados que trabajan en l, deberamos escribir:

UPDATE trabaja SET nhoras=nhoras+5 WHERE codpro='512'

Si se intenta hacer un cambio que entra en conflicto con alguna de las reglas de la tabla, se producir un error y el
cambio no ser llevado a efecto. Por ejemplo si intentamos modificar el valor de la clave primaria de una fila por un valor
que exista previamente (recuerda que no pueden existir dos filas con el mismo valor de clave primaria), la operacin no se
efectuar. Esto lo gestiona automticamente el SGBDR, asegurando la integridad de los datos de la base de datos.

Asimismo, si modificamos el valor de una columna que forma parte de una restriccin FOREIGN KEY el SGBDR
actuar segn lo indicado en ON UPDATE. Por ejemplo si actualizamos el valor de un cddep en la tabla departamento el
cambio se transmitir a todos los empleados y proyectos que referenciaban a ese departamento. Esto es as puesto que en la
creacin de la base de datos fijamos ON UPDATE al valor CASCADE.

UPDATE departamento SET cddep='32' WHERE cddep='12'

Borrar filas de la tabla.

Para borrar filas de una tabla se utiliza la sentencia DELETE, permite borrar una sola fila o un conjunto de stas. Para
indicar qu filas sern borradas se utiliza una clusula WHERE que indica mediante una condicin lgica que filas sern
borradas. La sintaxis es la siguiente:

DELETE FROM <tabla>


[WHERE <criterio>]

Por ejemplo si queremos eliminar los empleados que pertenecen al departamento 32 escribiramos:

DELETE FROM empleado WHERE cddep='32'

Cuidado! Si no especificamos ningn criterio se eliminarn todas las filas de la tabla.

Por supuesto el borrado de filas no debe dejar la base de datos en un estado de inconsistencia. Esto quiere decir que el
SGBDR comprobar las restricciones FOREIGN KEY definidas y actuar segn lo indicado en ON DELETE. Veamos un
ejemplo:

Si intentamos eliminar un departamento que es referenciado en la tabla de empleados, es decir, un departamento donde trabaja
al menos un empleado, el SGBDR abortar la operacin de borrado. Slo se podrn eliminar departamentos en los que no
trabaje ningn empleado. Esto es as porque se especific ON DELETE RESTRICT al definir la clave externa cddep de la
tabla empleado.

Funciones SQL

En los apartados anteriores hemos hecho mencin a expresiones como combinacin de columnas y operadores. SQL tambin
dispone de una extensa gama de funciones que pueden ser utilizadas en las expresiones. Tpicamente las expresiones
constan de un nombre y aceptan unos parmetros entre parntesis para devolver un valor.

<nombre_funcin>(<parmetro1>,<parmetro2>,)
SISTEMAS DE GESTIN DE BASES DE DATOS Pgina 16 de 18
I.E.S. TURANIANA LENGUAJE SQL
Roquetas de Mar Autor: Alfonso Bonillo.
CURSO 2011/2012.
Dpto de Informtica.

Aunque hay otros, los grupos fundamentales de funciones son:

o Funciones de control de flujo


o Funciones de caracteres.
o Funciones numricas.
o Funciones de fecha y hora.
o Funciones de conversin.

A continuacin trataremos las ms importantes y utilizadas.

Funciones de control de flujo.


o IF(<expresin1>,<expresin2>,<expresin3>) : Devuelve <expresin2> o <expresin3> en
funcin de si <expresin1> es VERDAD o FALSO respectivamente.
Ejemplo: SELECT IF(3>5, 'verdad','falso') Devuelve falso.

o IFNULL(<expresin1>,<expresin2>) : Devuelve <expresin1> si <expresin1> es distinto de


NULL, en otro caso devuelve <expresin2>.
Ejemplo: SELECT IFNULL(cddep,'Desconocido') Devuelve 'Desconocido' para los cddep que sean
NULL, en los dems quedan como estn. Es muy til en consultas que devuelven valores nulos para cambiarlos por
un valor descriptivo.

Funciones de caracteres
o CHAR_LENGTH(<cadena>): Devuelve un entero que es la longitud de la cadena de caracteres.
Ejemplo: SELECT CHAR_LENGTH('Hola')Devuelve 4.

o CONCAT(<cadena1>,<cadena2>,...) : Concatena las cadenas de caracteres.


Ejemplo: SELECT CONCAT('H','o','l','a') Devuelve Hola.

o INSTR(<cadena>,<subcadena>): Devuelve la posicin de la primera ocurrencia de la subcadena dentro de la


cadena.
Ejemplo: SELECT INSTR('Hola', 'ol') Devuelve 2.

o LOWER(<cadena>) : Pasa la cadena a minsulas.


Ejemplo: SELECT LOWER('HOLA') Devuelve hola

o UPPER(<cadena>) : Pasa la cadena a maysculas.


Ejemplo: SELECT UPPER('hola') Devuelve HOLA.

o RTRIM(<cadena>) y LTRIM(<cadena>) : Devuelven la cadena sin espacios en blanco a la derecha (RTRIM)


o izquierda (LTRIM).
Ejemplo SELECT LTRIM(RTRIM(' Hola ')) Devuelve 'Hola'.

o SUBSTR(<cadena>,<posicin>,<longitud>) : Devuelve la subacadena de longitud <longitud> a


partir de la posicin <posicin> de la cadena <cadena>.
Ejemplo: SELECT SUBSTR('Hola',2,2) Devuelve ol.

Funciones numricas
o ABS(<nmero>) : Devuelve el valor absoluto de un nmero.
Ejemplo: SELECT ABS(-21) Devuelve 21.

o CEIL(<nmero>): Devuelve el entero ms pequeo no menor que nmero.


Ejemplo: SELECT CEIL(21.9) Devuelve 22.

o MOD(<numero1>,<nmero2>) : Devuelve el resto de la divisin entera entre <numero1> y <numero2>.


Ejemplo: SELECT MOD(18,7) Devuelve 4.
SISTEMAS DE GESTIN DE BASES DE DATOS Pgina 17 de 18
I.E.S. TURANIANA LENGUAJE SQL
Roquetas de Mar Autor: Alfonso Bonillo.
CURSO 2011/2012.
Dpto de Informtica.

o ROUND(<nmero>) : Devuelve el redondeo al entero ms cercano.


Ejemplos: SELECT ROUND(20.7) Devuelve 21.
SELECT ROUND(20.3) Devuelve 20.

o TRUNCATE(<nmero>,<Posiciones_decimales>): Devuelve el nmero con las posiciones decimales


dadas sin redondeo.
Ejemplo: SELECT TRUNCATE(68.99999,2) Devuelve 68.99.

Funciones de fecha y hora


o ADDDATE(<fecha>,<nmero_dias>) : Devuelve la fecha proporcionada, incrementada en el nmero de das
indicado.
o Ejemplo: SELECT ADDDATE('19-04-2005',15) Devuelve '04-05-2005'.

o CURDATE() : Devuelve la fecha actual del sistema.

o CURTIME() : Devuelve la hora actual del sistema.

o DATEDIFF(<fecha1>,<fecha2>): Devuelve el nmero de das entre las dos fechas.


Ejemplo: SELECT DATEDIFF('19-04-2005','2-04-2005') Devuelve 17.

o DATE_FORMAT(<fecha>,<formato>) : Devuelve la fecha formateada segn el formato especificado.


Ejemplo: SELECT DATE_FORMAT('2005-04-19', '%d %m %Y') Devuelve '19 04 2005' (Consultar la
documentacin de MySQL para ver los formatos posibles).

o DAY(<fecha>) : Devuelve el da del del mes de una fecha.


Ejemplo: SELECT DAY('19-04-2005'). Devuelve 19.

o MONTH(<fecha>) : Devuelve el mes de un fecha.


Ejemplo: SELECT MONTH('19-04-2005'). Devuelve 4.

o NOW() : Devuelve la fecha y hora del sistema.

o YEAR(<fecha>): Devuelve el ao de un fecha.


Ejemplo: SELECT YEAR('19-04-2005'). Devuelve 2005.

Funciones de conversin:
o CONVERT(<expresin>,<tipo_dato>): Devuelve la expresin convertida al tipo de dato suministrado.
Ejemplo: SELECT CONVERT(21,DECIMAL) Devuelve 21.00.

o CAST(<expresin> AS <tipo_dato>) : Anloga a la anterior.

Otras funciones:
o PASSWORD(<cadena>) : Devuelve la cadena encriptada en el formato de encriptacin usado por MySQL.
Ejemplo: SELECT PASSWORD('Hola') Devuelve '*70E61FCD7F1FC3F6D951F0A36510223608C1141A'. Esta
funcin es til para encriptar contraseas de nuestras aplicaciones. La encriptacin en es un solo sentido.

o MD5(<cadena>) : Anloga a la anterior utilizando el algoritmo de encriptacin MD5.

SISTEMAS DE GESTIN DE BASES DE DATOS Pgina 18 de 18