You are on page 1of 25

FUNDAMENTOS DE BASES DE DATOS

SEMANA 6
SQL: lenguaje para la definición,
manipulación y control de bases
de datos relacionales III

Todos los derechos de autor son de la exclusiva propiedad de IACC o de los otorgantes de sus licencias. No está
permitido copiar, reproducir, reeditar, descargar, publicar, emitir, difundir, poner a disposición del público ni 1
ESTE
utilizarDOCUMENTO
los contenidos paraCONTIENE LAdeSEMANA
fines comerciales 6
ninguna clase.
2
ESTE DOCUMENTO CONTIENE LA SEMANA 6
ÍNDICE

SQL: LENGUAJE PARA LA DEFINICIÓN, MANIPULACIÓN Y CONTROL DE BASE DE DATOS


RELACIONALES III................................................................................................................................. 4
OBJETIVOS ESPECÍFICOS ...................................................................................................................... 4
INTRODUCCIÓN ................................................................................................................................... 4
1. FUNCIONES SQL........................................................................................................................... 5
1.1. FUNCIONES MATEMÁTICAS ................................................................................................ 5
1.1. FUNCIONES PARA CADENAS DE CARACTERES .................................................................. 10
2. SELECT CON MÚLTIPLES TABLAS ............................................................................................... 14
2.1. PRINCIPALES USOS ............................................................................................................ 15
2.2. EJEMPLOS .......................................................................................................................... 15
3. SUBCONSULTAS ......................................................................................................................... 20
3.1. TIPOS ................................................................................................................................. 20
3.1.1. SUBCONSULTA EN CLÁUSULA SELECT ........................................................................... 20
3.1.2. SUBCONSULTA EN CLÁUSULA WHERE .......................................................................... 21
3.1.3. SUBCONSULTA EN CLÁUSULA HAVING ......................................................................... 21
COMENTARIO FINAL.......................................................................................................................... 23
REFERENCIAS ..................................................................................................................................... 24

3
ESTE DOCUMENTO CONTIENE LA SEMANA 6
SQL: LENGUAJE PARA LA DEFINICIÓN, MANIPULACIÓN Y
CONTROL DE BASE DE DATOS RELACIONALES III

OBJETIVOS ESPECÍFICOS
 Emplear funciones de SQL para el trabajo con base de datos.

 Analizar el uso de la instrucción DML Select y de Subconsultas en el trabajo con bases de


datos.

INTRODUCCIÓN
Durante esta semana de estudio se continuará con la profundización en el conocimiento de otras
funciones que ofrece SQL para el trabajo con números y caracteres, como lo son las funciones
matemáticas y de cadenas de caracteres, respectivamente.

A su vez, se abordará SELECT con múltiples tablas y subconsultas, otras de las fortalezas que ofrece
SQL.

Todos los temas que se explorarán durante la presente semana de estudio son de gran utilidad
para el trabajo con bases de datos, ya que permiten contar con nuevas herramientas para la
manipulación de los registros contenidos en ella.

4
ESTE DOCUMENTO CONTIENE LA SEMANA 6
1. FUNCIONES SQL
Tal como se ha visto en semanas anteriores, SQL ofrece una variedad de funciones que permiten
que el trabajo sea lo más completo posible. En esta semana, concretamente se abordarán
funciones matemáticas y funciones para cadenas de caracteres.

1.1.FUNCIONES MATEMÁTICAS
Las funciones matemáticas, o llamadas aritméticas por Ramos, Ramos y Montero (2006), son
aquellas que solo trabajan con valores numéricos y devuelven un valor igualmente numérico
según la función aplicada. Algunos autores clasifican como aritméticas las funciones de agregación
abordadas en semanas anteriores. A continuación, se verá un resumen de las funciones
matemáticas:

Función Propósito
ABS(n) Esta función devuelve el valor absoluto de “n”,
recordando que el valor absoluto siempre es un
número positivo.
CEIL(n) Esta función devuelve el valor entero
inmediatamente superior o igual a “n”.
FLOOR(n) Esta función devuelve el valor entero
inmediatamente inferior o igual a “n”.
MOD(m,n) Esta función devuelve el resto que se origina al
dividir el valor de “m” entre el valor de “n”.
NVL(valor, expresión) Esta función puede ser utilizada no solo con
valores numéricos, sino con cualquier valor que
sea del mismo tipo, se encarga de sustituir si el
“valor” es nulo por el dato que contenga
“expresión”, en el caso que “valor” no sea nulo,
retorna el valor almacenado allí.
POWER(m,exponente) Esta función devuelve el resultado de elevar
“m” al “exponente”.
ROUND(número,[,m]) Esta función retorna el número redondeado en
“m” decimales. El redondeo puede ser
negativo, por lo que la función lo hará a la
izquierda del punto decimal, si no se coloca
“m”, el número devuelto será un número
redondeado sin decimales.
SIGN(valor) Esta función se encarga de devolver el signo de
“valor”, si es negativo retorna _1, si es positivo
retorna 1.
SQRT(n) Esta función retorna la raíz cuadrada de “n”.

5
ESTE DOCUMENTO CONTIENE LA SEMANA 6
TRUNC(número, [m]) Esta función se encarga de retornar un cierto
número de dígitos, devuelve “número”
truncado a “m” decimales, el valor que se
coloque en “m” puede ser un valor negativo,
para lo cual trunca por la izquierda del punto
decimal, de no colocarse “m”, devuelve a
“número” sin decimales.

Fuente: Ramos, Ramos y Montero (2006).

A continuación, se expondrán ejemplos para la siguiente tabla previamente creada y con datos
cargados:

Fuente: material elaborado para esta asignatura (C. Zammarrelli, 2016).

6
ESTE DOCUMENTO CONTIENE LA SEMANA 6
Si se quisiera saber cuál es el número entero inmediatamente superior para todas las superficies
de las regiones, se haría lo siguiente:

SELECT ID, NOMBRE, CEIL(SUPERFICIE) AS SUPERFICIE FROM


regiones;

El resultado obtenido sería:

Fuente: material elaborado para esta asignatura (C. Zammarrelli, 2016).

7
ESTE DOCUMENTO CONTIENE LA SEMANA 6
Si se quisiera saber cuál es el número entero inmediatamente inferior para todas las superficies de
las regiones, se haría lo siguiente:

SELECT ID, NOMBRE, FLOOR(SUPERFICIE) AS SUPERFICIE FROM


regiones;

El resultado obtenido sería:

Fuente: material elaborado para esta asignatura (C. Zammarrelli, 2016).

8
ESTE DOCUMENTO CONTIENE LA SEMANA 6
Si se quisiera devolver las superficies sin decimales y redondeadas, se haría lo siguiente:

SELECT ID, NOMBRE, ROUND (SUPERFICIE) AS SUPERFICIE


FROM regiones;

El resultado obtenido sería:

Fuente: material elaborado para esta asignatura (C. Zammarrelli, 2016).

9
ESTE DOCUMENTO CONTIENE LA SEMANA 6
1.1.FUNCIONES PARA CADENAS DE CARACTERES
Este tipo de funciones permiten realizar una serie de trabajos sobre las cadenas de caracteres de
acuerdo a lo que se necesite hacer. A continuación, se muestran algunas de las funciones para
cadenas de caracteres existentes:

Función Propósito
Esta función devuelve el carácter ASCII que
CHR(n)
corresponde al número “n”.
Esta función retorna “cad1” concatenada con
CONCAT(cad1, cad2)
“cad2”.
Esta función convierte a letras mayúsculas a
UPPER(cad)
“cad”.
Esta función convierte a letras minúsculas a
LOWER(cad)
“cad”.
Esta función permite agregar los caracteres
“cad2” a “cad1” por el lado izquierdo hasta una
LPAD(cad1,n[,cad2])
longitud total de “cad1” determinada por el
valor de “n”.
Esta función se encarga de convertir la primera
INITCAP(cad)
letra de “cad” a mayúscula
Esta función se encarga de eliminar los
LTRIM(cad [,set]) caracteres “set” ubicados a la izquierda de
“cad”.
Esta función permite agregar caracteres a
RPAD(cad1, n[,cad2]) “cad1” por el lado derecho hasta una longitud
determinada por el valor de “n”.
Esta función se encarga de eliminar los
RTRIM(cad[,set]) caracteres “set” ubicados a la derecha de
“cad”.
Esta función se encarga de sustituir los
REPLACE(cad,cadena_buscada
caracteres de “cadena_buscada” por
[,cadena_sustitucion] )
“cadena_sustitución”.
Esta función se encarga de retornar los
SUBSTR(cad, m[,n])
caracteres desde “m” contando “n” posiciones.
Esta función se encarga de buscar “cad1” en
TRANSLATE(cad1,cad2,cad3)
“cad2” y sustituirlos para devolver “cad3”.
Esta función devuelve la cantidad de caracteres
LENGTH(cad1)
que tiene “cad1”.

Fuente: Ramos, Ramos y Montero (2006).

10
ESTE DOCUMENTO CONTIENE LA SEMANA 6
Por ejemplo, si se quisiera saber qué carácter ASCII representa el número 64, se haría lo siguiente:

SELECT CHAR(64);

Se obtendría lo siguiente:

Fuente: material elaborado para esta asignatura (C. Zammarrelli, 2016).

Por otro lado, se tiene la siguiente tabla con los siguientes datos:

Fuente: material elaborado para esta asignatura (C. Zammarrelli, 2016).

Si se quisiera retornar en un solo campo el nombre concatenado con el apellido, se haría lo


siguiente:

SELECT CONCAT(NOMBRE,' ', APELLIDO) FROM EMPLEADOS;

11
ESTE DOCUMENTO CONTIENE LA SEMANA 6
El resultado sería:

Fuente: material elaborado para esta asignatura (C. Zammarrelli, 2016).

Ahora, si se quisiera retornar los valores anteriores en minúscula, se haría lo siguiente:

SELECT LOWER(CONCAT(NOMBRE,' ', APELLIDO)) FROM


EMPLEADOS;

Se obtendría lo siguiente:

Fuente: material elaborado para esta asignatura (C. Zammarrelli, 2016).

12
ESTE DOCUMENTO CONTIENE LA SEMANA 6
Si se quisiera agregar al resultado de la concatenación, la frase “EL NOMBRE DEL EMPLEADO ES”,
seguido del resultado de la concatenación, se haría lo siguiente:

SELECT LPAD (CONCAT(NOMBRE,' ',


APELLIDO),(LENGTH(CONCAT(NOMBRE,' ', APELLIDO)) + 26),'EL
NOMBRE DEL EMPLEADO ES ') FROM EMPLEADOS;

Y se obtendría lo siguiente:

Fuente: material elaborado para esta asignatura (C. Zammarrelli, 2016).

 Si se observa, el código presentado anteriormente se empleó a


la vez la función “length” para así lograr que la cadena
agregada se viera de forma completa, debido a que se
necesitaba mantener el nombre y apellido de cada empleado
(los cuales tienen tamaños diferentes), por lo que era necesario
saber su longitud y sumarle los 26 caracteres agregados. De lo
contrario, hubiese quedado de la forma que aparece a
continuación.

13
ESTE DOCUMENTO CONTIENE LA SEMANA 6
Fuente: material elaborado para esta asignatura (C. Zammarrelli, 2016).

 En el siguiente link, se pueden consultar las funciones de


manejo de cadenas de caracteres propias de MySQL.

http://goo.gl/DBsaQe

 En el siguiente video se puede consultar un ejemplos de


funciones de manejo de cadena de caracteres en MySQL:

https://goo.gl/R6BUkM

2. SELECT CON MÚLTIPLES TABLAS


Una de las potencialidades de la instrucción SELECT es permitir el trabajo con varias tablas, lo cual
trae numerosas ventajas, entre ellas poder relacionar diferentes tablas.

14
ESTE DOCUMENTO CONTIENE LA SEMANA 6
2.1. PRINCIPALES USOS
La consulta SELECT con varias tablas se utiliza cuando es necesario mostrar en un solo reporte o
resultado datos contenidos en varias tablas, y de esta forma consolidar datos ubicados en varios
sitios.

2.2. EJEMPLOS
A continuación, se verá un ejemplo de SELECT con varias tablas, tomando en cuenta que una tabla
registra los datos de los clientes, otra registra las facturas de estos clientes, otra el detalle de
facturas y otra los productos. Las tablas serían:

15
ESTE DOCUMENTO CONTIENE LA SEMANA 6
Fuente: material elaborado para esta asignatura (C. Zammarrelli, 2016).

Si se quisiera listar los productos comprados (incluyendo descripción y precio al momento de la


compra) por un determinado cliente (por ejemplo de RUT = 13756987-2), se haría lo siguiente:

SELECT C.RUT, C.NOMBRE, C.APELLIDO, F.ID_FACTURA, F.FECHA, F.MONTO,


D.ID_PRODUCTO, P.DESCRIPCION, D.CANTIDAD, D.PRECIO
FROM CLIENTES C, FACTURAS F, DETALLE_FACTURAS D, PRODUCTOS P
WHERE C.RUT = F.RUT_CLIENTE AND F.ID_FACTURA = D.ID_FACTURA AND
D.ID_PRODUCTO = P.ID_PRODUCTO AND C.RUT = '13756987-2';

Y se obtendría lo siguiente:

Fuente: material elaborado para esta asignatura (C. Zammarrelli, 2016).

Existe otra forma de hacer este tipo de consultas, que es utilizando para ello lo conocido como los
JOIN:

16
ESTE DOCUMENTO CONTIENE LA SEMANA 6
SELECT C.RUT, C.NOMBRE, C.APELLIDO, F.ID_FACTURA, F.FECHA, F.MONTO,
D.ID_PRODUCTO, P.DESCRIPCION,D.CANTIDAD, D.PRECIO
FROM CLIENTES C INNER JOIN FACTURAS F INNER JOIN DETALLE_FACTURAS D
INNER JOIN PRODUCTOS P
ON C.RUT = F.RUT_CLIENTE AND F.ID_FACTURA = D.ID_FACTURA AND
D.ID_PRODUCTO = P.ID_PRODUCTO AND C.RUT = '13756987-2';

El más conocido de los JOIN es el INNER, el cual devuelve los registros de las tablas involucradas y
que cumplen con la condición. Gráficamente puede ser entendido así:

INNER JOIN

Tabla 1 Tabla 2

Fuente: material elaborado para esta asignatura (C. Zammarrelli, 2016).

Existe otra consulta JOIN, llamada LEFT JOIN, que devuelve todos los registros de la tabla de la
izquierda, más los que cumplen la condición descrita. Gráficamente se vería así:

LEFT JOIN

Tabla 1 Tabla 2

Fuente: material elaborado para esta asignatura (C. Zammarrelli, 2016).

Por ejemplo, si se quisieran listar todos los clientes, tengan o no facturas, se podría hacer lo
siguiente:

17
ESTE DOCUMENTO CONTIENE LA SEMANA 6
SELECT CLIENTES.RUT, CLIENTES.NOMBRE, CLIENTES.APELLIDO,
FACTURAS.ID_FACTURA, FACTURAS.FECHA, FACTURAS.MONTO
FROM CLIENTES
LEFT JOIN FACTURAS
ON CLIENTES.RUT = FACTURAS.RUT_CLIENTE;

Obteniéndose lo siguiente:

Fuente: material elaborado para esta asignatura (C. Zammarrelli, 2016).

Así como existe un JOIN para mostrar todos los datos de la tabla de la izquierda, más los datos que
cumplan con la condición, también se tiene una instrucción para mostrar los de la derecha. En este
caso se emplea RIGHT JOIN, que gráficamente se vería así:

RIGHT JOIN

Tabla 1 Tabla 2

Fuente: material elaborado para esta asignatura (C. Zammarrelli, 2016).

Para obtener el resultado anterior, se debería ejecutar la siguiente sentencia SQL:

18
ESTE DOCUMENTO CONTIENE LA SEMANA 6
SELECT CLIENTES.RUT, CLIENTES.NOMBRE, CLIENTES.APELLIDO,
FACTURAS.ID_FACTURA, FACTURAS.FECHA, FACTURAS.MONTO
FROM FACTURAS
RIGHT JOIN CLIENTES
ON CLIENTES.RUT = FACTURAS.RUT_CLIENTE;

Fuente: material elaborado para esta asignatura (C. Zammarrelli, 2016).

Nótese que en el FROM se colocó primero FACTURAS y luego del RIGHT JOIN se colocó CLIENTES,
ya que de esta forma se obtienen todos los clientes (está a la derecha en la consulta) tengan o no
facturas asociadas (campos en null).

 En el siguiente video se puede consultar ejemplos con JOIN en


MySQL.

https://goo.gl/7WruY7

19
ESTE DOCUMENTO CONTIENE LA SEMANA 6
3. SUBCONSULTAS
Según Ramos, Ramos y Montero (2006), las subconsultas son aquellas sentencias SELECT que se
incluyen en otras cláusulas de una sentencia SELECT previa. Para esto, se debe delimitar entre
paréntesis la subconsulta, y esta se ejecutará primero que la consulta principal.

3.1. TIPOS
Los tipos de subconsultas varían de acuerdo a la cláusula en donde se encuentren. Se tienen:
dentro de un mismo SELECT, dentro de un WHERE y dentro del HAVING. Este último se explicará a
continuación.

3.1.1. SUBCONSULTA EN CLÁUSULA SELECT


En esta subconsulta, se coloca otro SELECT dentro de la cláusula SELECT original, relacionándolas
de alguna forma. Por ejemplo, y siguiendo con las tablas anteriores, si se quisiera los datos de
todos los clientes más la cantidad de facturas que cada uno tiene, este tipo de subconsulta es útil y
se haría de la siguiente forma:

SELECT CLIENTES.RUT, CLIENTES.NOMBRE, CLIENTES.APELLIDO, (SELECT COUNT(*)


FROM FACTURAS WHERE CLIENTES.RUT = FACTURAS.RUT_CLIENTE)
FROM CLIENTES;

Y se obtendría lo siguiente:

Fuente: material elaborado para esta asignatura (C. Zammarrelli, 2016).

20
ESTE DOCUMENTO CONTIENE LA SEMANA 6
3.1.2. SUBCONSULTA EN CLÁUSULA WHERE
Este tipo de subconsulta va a permitir incluir en el WHERE algo que se quiera retornar
específicamente de otra consulta, es decir, basar la sentencia actual en el resultado obtenido en
otra sentencia SELECT. Por ejemplo, si se quisiera mostrar todos los clientes que tengan 1 o más
facturas, esta subconsulta se haría de la siguiente forma:

SELECT CLIENTES.RUT, CLIENTES.NOMBRE, CLIENTES.APELLIDO


FROM CLIENTES
WHERE (SELECT COUNT(*) FROM FACTURAS WHERE CLIENTES.RUT =
FACTURAS.RUT_CLIENTE) > 0;

El resultado sería el siguiente:

Fuente: material elaborado para esta asignatura (C. Zammarrelli, 2016).

Si se observa, el resultado obtenido no se muestra al cliente “Nelson” ya que este no cuenta con
facturas registradas.

3.1.3. SUBCONSULTA EN CLÁUSULA HAVING


Para entender esta subconsulta, se debe iniciar por conocer qué es la cláusula HAVING, pero antes
de esta se debe conocer el GROUP BY. La cláusula GROUP BY, permite agrupar filas o registros por
algún criterio; por ejemplo, se podría agrupar por cliente las facturas que tiene asociadas y ver el
monto que han pagado. Para ello, se haría lo siguiente:

21
ESTE DOCUMENTO CONTIENE LA SEMANA 6
SELECT RUT_CLIENTE,SUM(MONTO) FROM FACTURAS
GROUP BY RUT_CLIENTE

Obteniendo lo siguiente:

Fuente: material elaborado para esta asignatura (C. Zammarrelli, 2016).

En el caso de que solo se quisieran aquellas sumas de monto que superen los 10.000, es útil el
HAVING, dado que esta cláusula se usa en conjunto con el GROUP BY y permite delimitar esa
agrupación hecha. Para esto se haría lo siguiente:

SELECT RUT_CLIENTE,SUM(MONTO) FROM FACTURAS


GROUP BY RUT_CLIENTE
HAVING SUM(MONTO) > 10000

Y se obtendría lo siguiente:

Fuente: material elaborado para esta asignatura (C. Zammarrelli, 2016).

22
ESTE DOCUMENTO CONTIENE LA SEMANA 6
 En el siguiente video se pueden observar ejemplos de
subconsultas en MySQL.

https://goo.gl/VBIAAt

 Los ejemplos y el tipo de consultas que se pueden realizar


pueden ser infinitas, todas van a depender de lo que se requiera
y de cómo se mezclan las cláusulas e instrucciones conocidas
hasta el momento.

COMENTARIO FINAL
Al finalizar la semana de estudio, se pudieron conocer primeramente las funciones matemáticas
que ofrece SQL, las cuales permiten el trabajo con aquellos datos de tipo numérico que se tengan
almacenados en la base de datos para así trabajar de una mejor forma o bien para cumplir los
requerimientos que se tengan en un determinado momento.

En cuanto a las cadenas de caracteres, el conocer las funciones para el trabajo con ellas, es de gran
utilidad, puesto que siempre va a ser necesario poder transformar o generar a partir de la data
almacenada en la base de datos nuevas cosas, que den repuesta de igual forma a las necesidades
que se tengan.

El tema de consultas con múltiples tablas, así como subconsultas, revisten gran importancia, dado
que nada se hace teniendo información en la base de datos que no pueda ser recuperada o
relacionada con alguna otra sin importar que se encuentren en diferentes tablas.

Conocer estos temas es muy útil para profesionales del área de informática, siendo también de
gran utilidad para el resto de asignaturas que se abordarán en la malla de estudios.

23
ESTE DOCUMENTO CONTIENE LA SEMANA 6
REFERENCIAS
Ramos, M.; Ramos, A. y Montero, F. (2006). Sistemas gestores de bases de datos. Madrid, España:

McGraw-Hill.

PARA REFERENCIAR ESTE DOCUMENTO, CONSIDERE:

IACC (2016). SQL: Lenguaje para la definición, manipulación y control de base de datos relacionales

III. Fundamentos de Bases de Datos. Semana 6.

24
ESTE DOCUMENTO CONTIENE LA SEMANA 6
25
ESTE DOCUMENTO CONTIENE LA SEMANA 6

You might also like