Sei sulla pagina 1di 32

BASES DE DATOS

Funciones de agrupamiento y JOIN de Tablas

1
Agenda
• Funciones de agrupamiento.
• Uso del GROUP BY.
• Teoría del uso de JOIN.
• SELECT con JOIN de tablas.

2
Funciones de Agrupación
• MAX
SELECT MAX(PRECIO) FROM ARTICULO
• MIN
SELECT MIN(PRECIO) FROM ARTICULO
• SUM
SELECT SUM(PRECIO) FROM ARTICULO
• COUNT
SELECT COUNT(*) FROM ARTICULO
• AVG
SELECT AVG(PRECIO) FROM ARTICULO

3
Uso del GROUP BY
• El uso de GROUP BY sirve hacer agrupaciones de datos dentro de una
instrucción SELECT.

Sintaxis:

SELECT CAMPO1, CAMPO2, FUNCION(CAMPO3)


FROM NOMBRETABLA
GROUP BY CAMPO1, CAMPO2;

4
Uso del GROUP BY
SELECT CED_CLIENTE, SUM(MONTO)
FROM ENC_FACTURA
GROUP BY CED_CLIENTE

• Es importante no confundir el Group By del Order By, ya que


uno es para agrupar el otro para ordenar.

SELECT MARCA, COUNT(DESCRIPCION)


FROM ARTICULO
GROUP BY MARCA
ORDER BY MARCA
5
Uso del GROUP BY
• Se pueden usar varios campos y varias funciones.

SELECT MARCA, MIN(PRECIO) AS MAXIMO ,MAX(PRECIO) AS MINIMO


FROM ARTICULO
GROUP BY MARCA

6
Uso del HAVING
• El HAVING es una instrucción similar al WHERE solo que nos sirve para
condicionar datos dentro de una agrupación.
• A diferencia de WHERE en el HAVING se pueden usar funciones de agrupamiento.

SELECT MARCA, MIN(PRECIO)


FROM ARTICULO
GROUP BY MARCA
HAVING COUNT(MARCA)>1
7
Ejercicios
1. Realizar un SELECT que muestre el código de articulo y una
suma con la cantidad de unidades que se han vendido.

2. Realizar un SELECT que muestre la marca y el promedio de


precio, de los artículos donde la marca tenga mas de un
producto en el catálogo.

8
Resolución
1.
SELECT COD_ARTICULO,SUM(CANTIDAD) AS 'TOTAL VENDIDO'
FROM DET_FACTURA
GROUP BY COD_ARTICULO

2.
SELECT MARCA, AVG(PRECIO) AS 'PROMEDIO PRECIO'
FROM ARTICULO
GROUP BY MARCA
HAVING COUNT( MARCA ) > 1

9
Dudas

10
JOIN
• La sentencia JOIN en SQL permite combinar registros de dos o más tablas en una
base de datos relacional.
• En un JOIN lo ideal es siempre hacer la relaciones por las llaves foráneas entre las
tablas.

11
INNER JOIN
• Con el INNER JOIN sólo se muestran los registros que coinciden
entre dos tablas A y B.

• Sintaxis:
SELECT campo1, campo2, campo3
FROM TablaA
INNER JOIN TablaB
ON TablaA.campo = TablaB.campo
12
INNER JOIN
Ejemplo:
SELECT DET_FACTURA.NUM_FACTURA, DET_FACTURA.CANTIDAD,
ARTICULO.DESCRIPCION, ARTICULO.MARCA
FROM DET_FACTURA
INNER JOIN ARTICULO
ON DET_FACTURA.COD_ARTICULO=ARTICULO.CODIGO

13
ALIAS DE TABLAS
• El uso de alias en las tablas se usa para hacer mas sencillo el manejo de
relaciones entre tablas. Y se realiza poniendo un nombre a la par de la tabla (de
la misma manera que con los alias de los campos).
Ejemplo:
SELECT A.NUM_FACTURA, A.CANTIDAD, B.DESCRIPCION, B.MARCA
FROM DET_FACTURA A
INNER JOIN ARTICULO AS B
ON A.COD_ARTICULO=B.CODIGO

14
INNER JOIN
• El caso del INNER JOIN es en el único donde ponemos omitir el tipo de JOIN que se está haciendo, en
este caso omitiendo la palabra INNER.

SELECT A.NUM_FACTURA, A.CANTIDAD, B.DESCRIPCION, B.MARCA


FROM DET_FACTURA A
INNER JOIN ARTICULO B
ON A.COD_ARTICULO=B.CODIGO

SELECT A.NUM_FACTURA, A.CANTIDAD, B.DESCRIPCION, B.MARCA


FROM DET_FACTURA A
JOIN ARTICULO B
ON A.COD_ARTICULO=B.CODIGO

15
FULL JOIN
• Muestra el conjunto de todos los registros en las tablas A y B, con registros
coincidentes en ambos lados cuando sea posible. Si no hay coincidencia, el lado
que falta contendrá null.

• Sintaxis:
SELECT campo1, campo2, campo3
FROM TablaA
FULL JOIN TablaB
ON TablaA.campo = TablaB.campo
16
FULL JOIN
Ejemplo:

SELECT A.NUM_FACTURA, A.CANTIDAD, B.DESCRIPCION, B.MARCA


FROM DET_FACTURA A
FULL JOIN ARTICULO B
ON A.COD_ARTICULO=B.CODIGO

17
LEFT JOIN
• Muestra el conjunto completo de registros de la tabla A, con los registros
coincidentes (si están disponibles) en la tabla B. Si no hay coincidencia, el lado
derecho contendrá null.
• Sintaxis:
SELECT campo1, campo2, campo3
FROM TablaA
LEFT JOIN TablaB
ON TablaA.campo = TablaB.campo

18
LEFT JOIN
• Ejemplo:

SELECT A.NOMBRE, A.APELLIDO1, A.APELLIDO2,B.NUMERO,


B.MONTO
FROM CLIENTE A
LEFT JOIN ENC_FACTURA B
ON A.CEDULA = B.CED_CLIENTE

19
JOIN con mas de una tabla
• Sintaxis:

SELECT campo1, campo2, campo3


FROM TablaA
[INNER, LEFT, FULL] JOIN TablaB
ON TablaA.campo = TablaB.campo
[INNER, LEFT, FULL] JOIN TablaC
ON TablaA.campo = TablaC.campo
20
Función ISNULL
• La función ISNULL lo que nos permite es asignar un valor en especifico a un campo que
almacena un valor NULO.

• Sintaxis:
SELECT ISNULL(CAMPO, VALOR_X_DEFECTO)
FROM TABLA

21
Función ISNULL

Ejemplo:

SELECT A.CEDULA, A.NOMBRE, A.APELLIDO1, SUM(ISNULL(B.MONTO,0))


FROM CAJERO A
LEFT JOIN ENC_FACTURA B
ON A.CEDULA=B.CED_CAJERO
GROUP BY A.CEDULA, A.NOMBRE, A.APELLIDO2

22
Dudas

23
Ejercicio #1
• Realice un SELECT utilizando un JOIN entre las tablas DET_FACTURA y
ARTICULO, para mostrar el siguiente resultado:

24
Resolución
SELECT
A.NUM_FACTURA,
A.LINEA, A.CANTIDAD,
A.PRECIO_UNITARIO,
B.MARCA,
B.DESCRIPCION
FROM DET_FACTURA A
INNER JOIN ARTICULO B
ON A.COD_ARTICULO=B.CODIGO
25
Ejercicio #2
• Realice un SELECT utilizando un JOIN entre las tablas ARTICULO y
DET_FACTURA, para mostrar la marca, la descripción y la suma de artículos
facturados, independientemente si se ha vendido o no:

26
Resolución

SELECT A.MARCA, A.DESCRIPCION, SUM(B.CANTIDAD)


FROM ARTICULO A
LEFT JOIN DET_FACTURA B
ON A.CODIGO=B.COD_ARTICULO
GROUP BY A.MARCA, A.DESCRIPCION

27
Ejercicio #3
• Realice un SELECT utilizando un JOIN para mostrar el nombre del cliente
concatenado, y la cuenta de facturas que tiene asociadas. Pero solamente de los
clientes que tengan al menos una factura y que el correo del cliente esté en NULO.

28
Resolución

29
¿Vamos bien?

30
Ejercicio #4
• Realice un SELECT utilizando JOIN’s para mostrar el nombre concatenado del
cliente, las iniciales del cajero, el numero de factura, la fecha de la factura, el
numero de línea del detalle de la factura, la marca del articulo, la descripción del
artículo, la cantidad y el precio unitario con que se facturó. Y que el monto total de
la factura esté entre 400,000 y 500,000.

31
Resolución

32

Potrebbero piacerti anche