Está en la página 1de 36

Bases de Datos I - Clase # 7

SQL – CONDICIONALES Y
AGRUPAMIENTO

Profesores: Ing. Larry Catarine, Ing. Kevin Vargas


SELECT: Selección de registros
Estructura:
Para hacer consultas sobre los registros SELECT column1,
de la tabla y seleccionar datos, se utiliza column2,..., columnN
la sentencia SELECT. El resultado de la FROM table_name
consulta es una nueva tabla que contiene WHERE condition
la información solicitada. ORDER BY column1
ASC/DESC;

Las instrucciones detalladas en azul son optativas.


WHERE: permite especificar alguna condición para filtrar datos.
ORDER BY: permite ordenar los resultados obtenidos en forma ascendente (ASC)
o descendente (DESC)
Se usa el * para informar a la consulta que quiero todas las columnas.
WHERE: Filtrar Registros
En los casos en los que se quiere ejecutar una sentencia SELECT que retorne solo los registros
que cumplen alguna condición específica se utiliza el operador WHERE. El uso de la cláusula
WHERE es opcional y puede no incluirse en caso de no ser necesario.
Productos
PK FK
SKU Nombre idCategoria Precio
1 Remera A 4 140
2 Medias 3 30
3 Campera DD 4 230

SELECT * SELECT Nombre


FROM Productos FROM Productos
WHERE idCategoria = 4; WHERE Precio > 100;
Operadores
Los mismos sirven para crear campos calculados y tambien para completar el
filtrado condicional.
Operaciones Aritmeticas
En caso de querer aplicar algun calculo aritmetico sobre un dato o simplemente querer crear un
valor calculado

Select '2*(10+5) - (8/3)' as [Operación],


2*(10+5)-(8/3) as [Resultado]

Select edad-1 FROM personas;


Condiciones comparación
En caso de querer aplicar más de una condición dentro de la cláusula WHERE, se utilizaran los
operadores logicos AND y OR
Productos
PK FK
SKU Nombre idCategoria Precio
1 Remera A 4 140
2 Medias 3 30
3 Campera DD 4 230

SELECT * SELECT Nombre


FROM Productos FROM Productos
WHERE idCategoria = 4 AND WHERE Precio > 100 OR
Precio > 100; Precio < 50;

Si la cláusula WHERE se vuelve compleja incluyendo múltiples operadores OR y AND es conveniente


utilizar paréntesis para agrupar operaciones e indicar precedencia (como en la calculadora)
Condiciones Complejas
(Comparación)
La siguiente consulta incluye una cláusula WHERE con tres grupos de condiciones unidas por
operadores OR.
Productos
PK FK
SKU Nombre idCategoria Precio
1 Pañuelo 2 10
2 Medias 1 30
3 Campera DD 4 230

SELECT Nombre, SKU, Precio


FROM Productos
WHERE (Precio > 100 AND idCategoria = 4) OR
(Precio < 50 AND idCategoria = 3) OR
(Precio = 10 AND idCategoria = 2);
Condiciones Complejas
(Comparación)
La siguiente consulta incluye una cláusula WHERE algunos operadores logicos.

Productos
PK FK
SKU Nombre idCategoria Precio
1 Pañuelo 2 10
2 Medias 1 30
3 Campera DD 4 230

SELECT Nombre SELECT * SELECT *


FROM Productos FROM Productos FROM Productos
WHERE Precio BETWEEN WHERE idCategoria IN / WHERE idCategoria exists
29 AND 229; Not IN (2,1,4,3); (SELECT *
FROM Productos
WHERE Precio IN (0));
Ordenar y Limitar Resultados

En caso de querer ordenar los resultados de una consulta se utilizará el operador ORDER BY.
Si se quiere limitar la cantidad de resultados se utilizará el operador LIMIT.

Productos
PK FK
SKU Nombre idCategoria Precio
1 Remera A 4 90
2 Sabanas 3 250
3 Campera DD 4 230

SELECT * SELECT Nombre


FROM Productos FROM Productos
WHERE idCategoria = 4 WHERE Precio > 100
ORDER BY SKU DESC; LIMIT 10;

Ambos operadores son opcionales y pueden no ser incluidos en la consulta.


Funciones agregadas

Contabilizar la cantidad de registros de una tabla


Se utiliza la operación COUNT aplicado a la columna que quiero contar.

SELECT COUNT(NombreDeColumna) SELECT COUNT(*)


FROM NombreDeLaTabla FROM NombreDeLaTabla
WHERE condición WHERE condicion

Las instrucciones detalladas en azul son optativas.


Funciones agregadas

Contabilizar la cantidad de registros de una tabla

SELECT COUNT(DNI)
FROM Clientes
WHERE Apellido=”Lopez”

Clientes
PK FK
DNI Nombre Apellido Fecha de Nac
SELECT COUNT(*) 1 Jose Garcia 20/02/1995
FROM Clientes 2 Federico Lopez 21/08/1996
3 Florencia Mendez 05/04/1989
Funciones agregadas

Operaciones numéricas

Suma de registros: Promedio de registros:

SELECT SUM(NombreDeColumna) SELECT AVG(NombreDeColumna)


FROM NombreDeLaTabla FROM NombreDeLaTabla
WHERE condición WHERE condición

Registro con valor máximo: Registro con valor mínimo:


SELECT MAX(NombreDeColumna) SELECT MIN(NombreDeColumna)
FROM NombreDeLaTabla FROM NombreDeLaTabla
WHERE condición WHERE condición
Funciones agregadas
Operaciones numéricas
Ejemplos Productos
PK FK
SKU Nombre idCategoria Precio
SELECT SUM(Precio)
1 Remera A 4 100
FROM Productos
2 Sabanas 3 250
3 Campera DD 4 250
SELECT AVG(Precio)
4 Pantalón A 4 200
FROM Productos
5 Pañuelo 1 5
WHERE Precio > 10

SELECT MAX(Precio)
FROM Productos
WHERE Nombre LIKE “%A”
AGRUPACION DE REGISTROS

GROUP BY

El GROUP BY separa la tabla en diferentes subgrupos y a cada subgrupo le aplica


la función de agregación que indicamos en el SELECT. Las columnas indicadas en
el GROUP BY se denominan columnas de agrupación.

SELECT Funcion(ColumnaX), ColumnaY


FROM NombreDeLaTabla
GROUP BY ColumnaY
Agrupación de registros

Ejemplo:
Compras
PK FK
SKU DNI Fecha Precio
SELECT DNI, SUM(Precio)
1 27.784.123 17/05/2018 110
FROM Compras
2 27.784.123 19/05/2018 250
GROUP BY DNI
3 29.123.456 27/07/2018 230

Regla básica: Toda columna no afectada por una función agregada (tales como COUNT(), SUM(), AVG(), MAX(), MIN(), etc),
obligatoriamente debe estar listada en un GROUP BY.
¿Cómo funciona el GROUP BY?
Como estamos agrupando por DNI, se crean grupos diferentes por cada DNI que
exista en la tabla. En este ejemplo, existen dos grupos.

SKU DNI Fecha Precio

SELECT DNI, SUM(Precio) 1 33.241.677 01/01/2017 50


FROM Compras
GROUP BY DNI 2 35.186.928 02/01/2017 60

3 33.241.677 03/01/2017 70

4 35.186.928 04/01/2017 40
Agrupación
SKU DNI Fecha Precio

SKU DNI Fecha Precio 1 33.241.677 01/01/2017 50

1 33.241.677 01/01/2017 50
3 33.241.677 03/01/2017 70

2 35.186.928 02/01/2017 60

3 33.241.677 03/01/2017 70 SKU DNI Fecha Precio

2 35.186.928 02/01/2017 60
4 35.186.928 04/01/2017 40

4 35.186.928 04/01/2017 40
Aplicación de la función de agregación
Sobre cada grupo, se aplica la función de agregación que se indicó en el
SELECT. En este caso, se aplica la función suma sobre la columna precio

SUM SUM

SKU DNI Fecha Precio SKU DNI Fecha Precio

2 35.186.928 02/01/2017 60 1 33.241.677 01/01/2017 50

4 35.186.928 04/01/2017 40 3 33.241.677 03/01/2017 70


Resultado

El resultado de la consulta, es una tabla que contiene el resultado de cada grupo.

SELECT DNI,
DNI SUM(PRECIO)
SUM(Precio)
FROM Productos
GROUP BY DNI 35.186.928 100

33.241.677 120
Agrupación de registros con condiciones

HAVING permite eliminar los grupos que no cumplan con la condición indicada.
La condición será una función de agregación, de decir un campo nuevo que
estamos generando en la consulta.
El having se ubica despues del group by.

SELECT Funcion(ColumnaX), ColumnaY


FROM NombreDeLaTabla
GROUP BY ColumnaY
HAVING Funcion(ColumnaX) > X
¿Cómo funciona el GROUP BY con HAVING?

Ejemplo:
Compras

SELECT DNI, SUM(Precio) SKU DNI Fecha Precio


FROM Compras
GROUP BY DNI 1 33.241.677 01/01/2017 50
HAVING SUM(Precio) > 110
2 35.186.928 02/01/2017 60

3 33.241.677 03/01/2017 70

4 35.186.928 04/01/2017 40

Como estamos agrupando por DNI, se crean grupos diferentes por cada DNI que
exista en la tabla. En este ejemplo, existen dos grupos.
Agrupación

SKU DNI Fecha Precio

1 33.241.677 01/01/2017 50

2 35.186.928 02/01/2017 60

3 33.241.677 03/01/2017 70

4 35.186.928 04/01/2017 40

SKU DNI Fecha Precio SKU DNI Fecha Precio

2 35.186.928 02/01/2017 60 1 33.241.677 01/01/2017 50

4 35.186.928 04/01/2017 40 3 33.241.677 03/01/2017 70


Aplicación de la función de Agregación
Sobre cada grupo, se aplica la función de agregación que se indicó en el
SELECT.
En este caso, se aplica la función suma sobre la columna precio.

SUM SUM

SKU DNI Fecha Precio SKU DNI Fecha Precio

2 35.186.928 02/01/2017 60 1 33.241.677 01/01/2017 50

4 35.186.928 04/01/2017 40 3 33.241.677 03/01/2017 70


Aplicación de la condición del HAVING

Se eliminan los grupos que no cumplan la condición indicada. En este ejemplo, se


eliminan todos los grupos cuya suma es menor a 110.

SELECT DNI, SUM(Precio) DNI SUM(PRECIO)


FROM Compras
GROUP BY DNI
HAVING SUM(Precio) > 110 35.186.928 100

33.241.677 120
Resultado

El resultado de la consulta, es una tabla que contiene el resultado de cada grupo


que cumple la condición.

SELECT DNI, SUM(Precio) DNI SUM(PRECIO)


FROM Compras
GROUP BY DNI
HAVING SUM(Precio) > 110 33.241.677 120
Agrupación de registros

Ejemplo Avanzado:
SKU DNI Fecha Precio

SELECT DNI, SUM(Precio) 1 33.241.677 01/01/2017 50


FROM Compras
WHERE Fecha > “02/01/2017” 2 35.186.928 02/01/2017 60
GROUP BY DNI
3 33.241.677 03/01/2017 70
HAVING SUM(Precio) >= 70
4 35.186.928 04/01/2017 40
¿Cómo funciona el GROUP BY con HAVING y con WHERE?
Lo primero que se ejecuta en esta consulta es la cláusula WHERE. Se eliminan
todas las filas que no cumplan la condición.

SKU DNI Fecha Precio

1 33.241.677 01/01/2017 50

2 35.186.928 02/01/2017 60

3 33.241.677 03/01/2017 70

4 35.186.928 04/01/2017 40
Agrupación
Luego, se continúa con la agrupación. Como estamos agrupando por DNI, se
crean grupos diferentes por cada DNI que exista en la tabla. En este ejemplo,
existen dos grupos.

SKU DNI Fecha Precio

3 33.241.677 03/01/2017 70

4 35.186.928 04/01/2017 40

SKU DNI Fecha Precio SKU DNI Fecha Precio

4 35.186.928 04/01/2017 40 3 33.241.677 03/01/2017 70


Aplicación de la función de Agregación
Sobre cada grupo, se aplica la función de agregación que se indicó en el
SELECT.
En este caso, se aplica la función suma sobre la columna precio

SUM SUM

SKU DNI Fecha Precio SKU DNI Fecha Precio

35.186.92 04/01/201 33.241.67 03/01/201


4 40 3 70
8 7 7 7
Aplicación de la condición del HAVING
Se eliminan los grupos que no cumplan la condición indicada. En este ejemplo, se
eliminan todos los grupos cuya suma es menor a 70.

DNI SUM(PRECIO)

35.186.928 40

33.241.677 70
Resultado
El resultado de la consulta, es una tabla que contiene el resultado de cada grupo
que cumple la condición.

DNI SUM(PRECIO)

33.241.677 70
Ejercicio en clase

1) ¿cuantos perros de cada sexo hay en total actualmente en el centro?

2) ¿Cuantos ejemplares contiene actualmente cada jaula o ubicación

3) ¿cuantos ejemplares de cada especie, y dentro de cada especie de cada


sexo, hay actualmente en el centro?
Ejercicio en clase
1) ¿cuantos perros de cada sexo hay en total actualmente en el centro?

2) ¿Cuantos ejemplares contiene actualmente cada jaula o ubicación

3) ¿cuantos ejemplares de cada especie, y dentro de cada especie de cada


sexo, hay actualmente en el centro?
¡¡¡Gracias por acompañarnos!!!

También podría gustarte