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:
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