10/10/2019

S6. TP D - Consultas con BD SQL Server

CONSULTAS CON BASE DE DATOS SQL SERVER

Consultas agrupadas (GROUP BY)

Las consultas anteriores recuperaban, trabajaban con, y mostraban información a nivel de cada registro individual de la base de datos. Así, si tenemos un producto con un determinado precio, podemos devolver el precio mediante SELECT precioLinea o bien operar sobre él como en SELECT precioLinea * 0.85.

Ahora bien, podemos querer obtener información que no proviene de un registro individual sino de la agrupación de información, como es el caso de contar el número de líneas de pedido, sumar el precio de todas las líneas por cada pedido, etc. Para ello, debemos emplear funciones agregadas y en la mayoría de los casos agrupar por algún campo.

Así, para ver el número total de registros podemos hacer:

SELECT COUNT(*)
FROM LINEAPEDIDO

Si por el contrario deseamos obtener el total de líneas por pedido, debemos indicar que agrupe por idPedido, lo que contará todos los registros con el mismo idPedido y calculará su cuenta:

SELECT idPedido, COUNT(*)
FROM LINEAPEDIDO
GROUP BY idPedido

Lo mismo se puede aplicar a otras funciones como la suma, indicando en ese caso aparte de la agrupación el campo que queremos sumar:

SELECT idPedido, SUM(precioLinea)
FROM LINEAPEDIDO
GROUP BY idPedido


Consultas por intersecciones entre tablas (JOIN)

Podemos generar una consulta que obtenga datos de varias tablas, pudiendo establecer a su vez criterios sobre otras. Veamos los tipos fundamentales (una buena explicación se puede encontrar aquí). Por ejemplo, dados los clientes de nuestro concesionario y nuestras ventas de coches a clientes en los diversos concesionarios.



podemos obtener una consulta que obtenga datos del cliente y de la venta. Por ejemplo, nombre, apellidos, codcoche y color, mediante una consulta del tipo:

SELECT nombre, apellidos, codcoche, color
FROM CLIENTE, VENTA
WHERE CLIENTE.cifcl = VENTA.idCliente


Consultas anidadas 

A veces se han de utilizar en una consulta los resultados de otra consulta, llamada subconsulta o consulta anidada. Podemos ver muchos ejemplos de ello aquí. Veamos que existen diversas variantes: 

Empleando IN: 


Obtener el identificador de los clientes que han comprado algún coche a un concesionario de Madrid.

             SELECT DISTINCT cifcl
             FROM VENTA
             WHERE cifc IN (SELECT cifc
             FROM CONCESIONARIO
             WHERE ciudad = 'Madrid')


Obtener el código de coche de los coches vendidos por algún concesionario de Madrid.

             SELECT DISTINCT codcoche
             FROM VENTA
             WHERE cifc IN (SELECT cifc
             FROM CONCESIONARIO
             WHERE ciudad = 'Madrid')


Obtener el nombre y el modelo de los coches vendidos por algún concesionario de Barcelona.

             SELECT nombre, modelo
             FROM COCHE
             WHERE codcoche IN (SELECT codcoche
             FROM VENTA
             WHERE cifc IN (SELECT cifc
             FROM CONCESIONARIO
             WHERE ciudad = 'Barcelona'))

No hay comentarios.:

Publicar un comentario