Está en la página 1de 18

Tema 5

Curso de Bases de Datos SQL

SQL: operaciones y
funciones
Índice
Esquema 3

Ideas clave 4
5.1. ¿Cómo estudiar este tema? 4
5.2. Operaciones sobre conjuntos 4
5.3. Funciones de agregación 7
© Universidad Internacional de La Rioja (UNIR)

5.4. Valores nulos 9

Lo + recomendado 11

+ Información 14

Test 16
© Universidad Internacional de La Rioja (UNIR)

SQL: OPERACIONES Y FUNCIONES

Operaciones sobre
Funciones de agregación Va l o r e s n u l o s
conjuntos

Unión: En SQL, las funciones de Comparación: is null, is not


agregación son: null.
- Palabra reservada union.
- Elimina duplicados. • Media: avg Resultado de operaciones de
• Mínimo: min comparación.
Intersección: • Máximo: max
• Suma: sum
- Palabra reservada intersect:
• Recuento: count
elimina duplicados.
- Palabra reservada intersect
all: conserva duplicados.

Agrupación por valor: group by.


Resta:
- Palabra reservada except:
elimina duplicados.
- Palabra reservada except
all: conserva duplicados.

Tema 5. Esquema
Esquema

Curso de Bases de Datos SQL


3
Ideas clave

5.1. ¿Cómo estudiar este tema?

Para estudiar este tema deberás leer las páginas 71-76 de: Silberschatz, A., Korth, H. F. y
Sudarshan, S. (2006). Fundamentos de bases de datos (5a. ed.). Madrid: McGraw-Hill
España.
Disponible a través de la Biblioteca Virtual de UNIR.
Además se deberán leer las ideas clave expuestas a continuación.

E
n este tema vamos a aprender cómo transcribir las operaciones de
conjuntos y las funciones de agregación a SQL, además de revisar diversas
opciones de SQL para trabajar con valores nulos.

A continuación, te presentamos un resumen del contenido del manual de estudio


citado de Silberschatz y Korth (2006).

5.2. Operaciones sobre conjuntos

E
n el lenguaje SQL, las operaciones union, intersect y except corresponden
con las operaciones de conjuntos unión, intersección y resta. Las relaciones
que participan en estas operaciones deben ser compatibles, es decir, deben
tener el mismo número y tipo de atributos.
© Universidad Internacional de La Rioja (UNIR)

Para ejemplificar los diferentes puntos de este apartado vamos a utilizar las
siguientes relaciones, que modelan la información de venta y presupuestos de una
empresa.

Curso de Bases de Datos SQL


4
Tema 5. Ideas clave
ventas

cliente tienda fecha_venta importe

Martínez Granada 02-01-2018 100.25

López Sevilla 04-01-2018 234.10

Martínez Granada 04-01-2018 102.0

Gutiérrez Sevilla 07-01-2018 221.45

Tabla 1. Tabla ventas.

presupuestos

cliente fecha importe

Martínez 12-12-2017 200.00

Gutiérrez 13-12-2017 145.65

García 15-12-2017 190.25

Tabla 2. Tabla presupuestos.

La operación unión

El objetivo de la operación union es combinar los resultados obtenidos de dos


consultas que devuelven relaciones que son compatibles entre sí. Las tuplas repetidas
se eliminan automáticamente. Si se quieren obtener todas las tuplas, indicaremos
union all. Podemos utilizar esta operación para obtener resultados que impliquen a

una tabla u otra.

Por ejemplo, para saber los clientes que han solicitado un presupuesto o han
realizado una venta, escribiremos la siguiente consulta:
© Universidad Internacional de La Rioja (UNIR)

SELECT cliente FROM ventas


union
SELECT cliente FROM presupuestos;

Curso de Bases de Datos SQL


5
Tema 5. Ideas clave
Esta consulta devolverá {Martínez, López, Gutiérrez, García}, con una ocurrencia de
cada uno de los clientes. Sin embargo, si ejecutamos:

SELECT cliente FROM ventas


union all
SELECT cliente FROM presupuestos;

El resultado serán todas las ocurrencias de todos los clientes: Martínez, López,
Martínez, Gutiérrez, Martínez, Gutiérrez, García.

La operación intersección

La operación de intersección se transcribe a SQL utilizando intersect. Devuelve las


tuplas que aparecen en una tabla y en la otra. Al igual que en la operación de unión,
los duplicados se eliminan automáticamente y para mantenerlos podemos usar
intersect all.

Por ejemplo, para determinar los clientes que han realizado una compra y han
solicitado un presupuesto, escribiremos la siguiente consulta:

SELECT cliente FROM ventas


intersect
SELECT cliente FROM presupuestos;

El resultado correspondiente sería: {Martínez, Gutiérrez}.

La operación excepto

La operación de resta se transcribe en SQL con la operación except. Devuelve las


© Universidad Internacional de La Rioja (UNIR)

tuplas de la primera consulta que no están en la segunda. De manera similar a las


operaciones anteriores, para mantener los duplicados utilizamos except all.

Curso de Bases de Datos SQL


6
Tema 5. Ideas clave
Así, para obtener los clientes que ha hecho alguna compra sin solicitar un
presupuesto, realizaremos la siguiente consulta:

SELECT cliente FROM ventas


except
SELECT cliente FROM presupuestos;

Los valores del resultado serán: {López}

5.3. Funciones de agregación

L
as funciones de agregación toman una colección de valores como entrada y
devuelven un solo valor. Las funciones de agregación en SQL son:

 Media: avg
 Mínimo: min
 Máximo: max
 Total: sum
 Conteo: count

sum y avg se aplican sobre conjuntos de números, mientras que los otros

operadores también pueden operar sobre conjuntos de datos no numéricos


como cadenas de caracteres.

Por ejemplo, para saber el importe medio de las ventas de nuestra empresa,
realizaremos la siguiente consulta:
© Universidad Internacional de La Rioja (UNIR)

SELECT avg (importe)


FROM ventas;

Es importante mantener los duplicados para realizar la media, ya que eliminarlos


supondría obtener datos erróneos.

Curso de Bases de Datos SQL


7
Tema 5. Ideas clave
También podemos aplicar las funciones de agregación sobre un conjunto de tuplas
utilizando group by. Por ejemplo, para saber la suma de las ventas de nuestra
empresa en cada una de sus tiendas, realizaremos la siguiente consulta:

SELECT tienda, sum(importe)


FROM ventas
group by tienda;

El resultado sería la siguiente tabla:

tienda importe

Granada 202.25

Sevilla 455.55

Tabla 3. Resultado de consultar la suma de las ventas en cada tienda.

Normalmente, se utiliza la función agregación count para contar el número de tuplas


de una relación. La notación SQL para esta función es count(*). Para poder eliminar
los valores duplicados se utiliza la palabra clave distinct dentro de la función de
agregación. Por ejemplo, para saber el número de compradores de nuestra empresa,
realizaríamos la siguiente consulta:

SELECT tienda, count (distinct cliente)


FROM ventas
group by tienda;

Además, es posible aplicar condiciones sobre los resultados de la operación de


agregación, de tal forma que solo se muestra la tupla si, realizada la operación de
agregación, se cumple la condición indicada. Para indicar esas restricciones utilizamos
la cláusula having.
© Universidad Internacional de La Rioja (UNIR)

Por ejemplo, si solo queremos que se muestren las tiendas que ha realizado ventas
por un importe mayor de 400 €, la consulta sería:

SELECT tienda, sum(importe)


FROM ventas

Curso de Bases de Datos SQL


8
Tema 5. Ideas clave
group by tienda
having sum(importe) > 400;

Las cláusulas WHERE y having se pueden combinar en una misma consulta. Si ambas
están presentes, primero se aplica la condición indicada en el WHERE; se realiza la
operación de agregación con las tuplas resultantes y, finalmente, se comprueba la
condición indicada en having.

5.4. Valores nulos

E
n el lenguaje SQL, los valores nulos indican que no existe información
referente a un atributo. Para poder comprobar si un valor es nulo,
utilizamos la palabra clave null. De forma similar, utilizamos not null para
comprobar si un valor no es nulo.

Como ya comentamos en temas anteriores, la existencia de valores nulos causa


problemas en las operaciones aritméticas y de comparación. Así, el resultado de una
operación aritmética que incluya valores nulos será nulo; el resultado de una
comparación que incluya valores nulos será unknown, siempre que la comparación no
sea con is null o is not null. También podemos comprobar si el resultado de una
comparación es desconocido utilizando is unknown (es desconocido) o is not
unknown (no es desconocido). Todas la funciones de agregación ignoran los valores
nulos, salvo count(*).

Uso de valores nulos en la creación de tabla


© Universidad Internacional de La Rioja (UNIR)

Cuando creamos una tabla (CREATE TABLE), podemos tener columnas que no pueden
ser nulas. Para ello, en la creación de la tabla indicaremos una restricción de columna:
indicaremos not null a continuación del dominio de dicho atributo.

Curso de Bases de Datos SQL


9
Tema 5. Ideas clave
Para ilustrar lo que hemos definido anteriormente, utilizaremos el siguiente ejemplo:
creamos una relación llamada usuario con el siguiente esquema:
usuario(id_usuario, nombre, apellidos, direccion, deuda). La instrucción de
creación sería la siguiente:

CREATE TABLE usuario(


id_usuario int not null,
nombre varchar(20) not null,
apellido varchar(20) not null,
direccion varchar(20) ,
deuda int);

Uso de valores nulos en insert y update

Cuando se especifica que un atributo no puede tener un valor nulo, es necesario que
las inserciones y las actualizaciones de valores en las tuplas de dicha tabla contengan
valores concretos en esos atributos. De no ser así, el DBMS devolverá un error. Por
ejemplo:

 Insertar dos tuplas en la relación usuario:

insert into usuario(id_usuario, nombre, apellidos, direccion, deuda)


values (1,’Juan’,’Diaz’,’Cervantes’, null),
(2,’Miguel’,’Mengibar’,’Carlos Baute’,300);

 Actualizar la tupla con id_usuario=2

update usuario set direccion=null WHERE id_usuario=2;


© Universidad Internacional de La Rioja (UNIR)

Curso de Bases de Datos SQL


10
Tema 5. Ideas clave
Lo + recomendado

Lecciones magistrales

Acceso a los datos de nuestra base de datos SQL (Oracle + SqlDeveloper)

En esta lección magistral vamos a trabajar con los datos que hemos insertado en
nuestra BD de entidad educativa. Revisaremos las diferentes formas de seleccionar
atributos y tuplas, además de las opciones de ordenación y agrupamiento. Para poder
hacer ejemplos más significativos, aprenderemos cómo hacer modificaciones en
nuestras tablas, qué implicaciones tiene y cómo debemos afrontarlo. Para finalizar,
trabajaremos con las funciones de agregación, viendo diferentes ejemplos y
casuísticas. (Ejemplo adaptado de Pons, O., Marín, N., Medina, J. M., Vila, A.
Introducción a las bases de datos. El modelo relacional. Ed. Thomson. 2005).

Accede a la lección magistral a través del aula virtual


© Universidad Internacional de La Rioja (UNIR)

Curso de Bases de Datos SQL


11
Tema 5. Lo + recomendado
No dejes de ver

Operadores de conjuntos

En este tutorial se explican las principales operaciones de conjuntos que hemos


revisado en este tema.
Fundamentos de SQL: Operaciones con conjuntos:

https://www.campusmvp.es/recursos/post/Fundamentos-de-SQL-Operaciones-
con-conjuntos.aspx

Funciones de agregación o agrupación

En este vídeo tutorial se explica cómo se usan los operadores de agregación en SQL.

Accede al vídeo a través del aula virtual o desde la siguiente dirección web:
https://www.youtube.com/watch?v=5Ac4TqigUqA
Valores nulos

En este vídeo se realizan diversos ejemplos que manejan valores nulos, a partir de la
© Universidad Internacional de La Rioja (UNIR)

explicación extendida de la cláusula SELECT. Los ejemplos se realizan en SQL


Developer, que utilizaremos en esta asignatura.

Curso de Bases de Datos SQL


12
Tema 5. Lo + recomendado
Accede al vídeo a través del aula virtual o desde la siguiente dirección web:
https://www.youtube.com/watch?v=di8d1u9e77E
© Universidad Internacional de La Rioja (UNIR)

Curso de Bases de Datos SQL


13
Tema 5. Lo + recomendado
+ Información

Webgrafía

Tutorial de SQL: Curso de SQL

Esta página contiene información muy completa y es una referencia de SQL que
enumera los comandos SQL normalmente utilizados, y se divide en las siguientes
secciones:
 Comandos SQL. Las instrucciones SQL básicas para almacenar, recuperar y
manipular los datos en una base de datos relacional.
 Manipulación de tabla. Cómo se utilizan las instrucciones SQL para administrar las
tablas dentro de una base de datos.
 SQL Avanzado. Comandos SQL avanzados.
 Sintaxis SQL. Enumera la sintaxis para todos los comandos SQL.

Accede a la página web a través del aula virtual o desde la siguiente dirección web:
https://www.1keydata.com/es/sql/
© Universidad Internacional de La Rioja (UNIR)

Curso de Bases de Datos SQL


14
Tema 5. + Información
Ejercicios de valores nulos

En esta página se hace un breve comentario sobre la diferencia entre valores 0 y


nulos, proponiendo unos ejercicios sencillos que te permitirán practicar y ver los
resultados obtenidos en cada caso.

Accede a la página web a través del aula virtual o desde la siguiente dirección web:
http://www.nachocabanes.com/sql/curso/sql06.php

Operaciones sobre conjuntos en SQL

En esta web se revisan las operaciones sobre conjuntos y se incluye la sintaxis para
realizar reuniones externas, incluyendo ejemplos concretos con los que practicar e
ilustrar las explicaciones.

Accede a la página web a través del aula virtual o desde la siguiente dirección web:
https://www.campusmvp.es/recursos/post/Fundamentos-de-SQL-Operaciones-
con-conjuntos.aspx
© Universidad Internacional de La Rioja (UNIR)

Curso de Bases de Datos SQL


15
Tema 5. + Información
Test
1. ¿Qué diferencia existe entre union all y union?
A. union all selecciona de todas las tablas que sean compatibles con la lista de
atributos dada.
B. union muestra todos los valores y union all solo los valores distintos.
*C. union solo muestra valores distintos y union all muestra todos los valores.
D. union all selecciona solo los valores que no se repiten.

2. El comando intersect se utiliza para:


A. Establecer un rango o sección donde se ubican los valores que buscamos.
B. Mostrar todas las tuplas que surgen como resultado de una operación de
intersección.
*C. Mostrar las tuplas que surgen como resultado de una operación de
intersección, eliminando duplicados.
D. Mostrar las tuplas que no tienen duplicado cuando se hace una operación
de intersección.

3. ¿Para qué sirve la palabra except?


A. Fuerza la eliminación de valores duplicados en el resultado de una consulta.
*B. Muestra las tuplas de la primera consulta que no aparecen en la segunda.
C. Muestra las tuplas de la segunda consulta que no aparecen en la primera.
D. No elimina los valores duplicados automáticamente.

4. ¿Qué diferencia existe entre except all y except?


*A. except elimina los valores duplicados automáticamente, para conservar
© Universidad Internacional de La Rioja (UNIR)

todos los valores duplicados se utiliza except all.


B. except all elimina todos los valores duplicados automáticamente, si se
desea conservar todos los valores duplicados se utiliza except.
C. except all permite listar los atributos que se quieren mostrar.
D. except permite listar los atributos que se quieren mostrar.

Curso de Bases de Datos SQL


16
Tema 5. Test
5. La cláusula group by:
A. Permite determinar el atributo sobre el que se va a ejecutar una operación de
agregación.
*B. Permite agrupar las tuplas sobre las que se va a ejecutar una operación de
agregación.
C. Permite mostrar los resultados ordenados.
D. Permite establecer condiciones sobre los resultados de una operación de
agregación.

6. La cláusula having:
A. Se coloca en la cláusula FROM y permite establecer condiciones sobre el
producto cartesiano que se realiza en las tablas que se listan a continuación.
B. Se coloca en la cláusula FROM e indica que las tablas que se listan a
continuación deben operarse con la operación reunión natural.
C. Permite definir operaciones de agregación sobre conjuntos de tuplas.
*D. Permite establecer condiciones sobre los resultados de una operación de
agregación.

7. ¿Qué devuelve la expresión null or true?


*A. True.
B. False.
C. Null.
D. Unknown.

8. ¿Cambia el resultado si se aplica distinct en las funciones de agregación max y


min?

A. Sí, porque el conjunto sobre el que se aplican es menor.


© Universidad Internacional de La Rioja (UNIR)

B. Solo en min.
C. Solo en max.
*D. No cambia.

Curso de Bases de Datos SQL


17
Tema 5. Test
9. Para generar una tabla con los valores máximo, mínimo, promedio y desviación
estándar de los créditos de los estudiantes utilizamos:
A. select max(tot_cred) as MAX, min(tot_cred) as MIN,
round(avg(tot_cred)) as AVG, round(std(tot_cred)) as STDEV from student;
B. select max(tot_cred) as MAX, min(tot_cred) as MIN,
avg(tot_cred) as AVG, std(tot_cred) as STDEV from student;
C. select max(tot_cred) as MAX, min(tot_cred) as MIN,
ceil(avg(tot_cred)) as AVG, ceil(std(tot_cred)) as STDEV from student;
*D. Todas las opciones son correctas

10. Marque la respuesta correcta al ejecutar la siguiente consulta:


select sum(tot_cred) DIV count(*), ceil (avg(tot_cred)) from student;
A. Se genera una tabla con dos columnas y dos filas con valores numéricos en cada
fila.
B. Los valores de las columnas en la fila resultante siempre son iguales.
*C. Los valores de las columnas en la fila resultante pueden ser diferentes
D. Las opciones B y C son correctas
© Universidad Internacional de La Rioja (UNIR)

Curso de Bases de Datos SQL


18
Tema 5. Test

También podría gustarte