Sep 05 Sub Consulta

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 6

FACULTAD DE INGENIERA

ESCUELA ACADEMICO PROFESIONAL


DE INGENIERIA DE INFORMATICA Y SISTEMAS

CURSO
BASE DE DATOS II

SEPARATA 05
SUB CONSULTAS

DOCENTE
MG. ING. EDWIN IVAN FARRO PACIFICO

HUACHO – LIMA
Universidad San Pedro
SUBCONSULTAS
Una subconsulta es una consulta SELECT que devuelve un valor único y está anidada en una
instrucción SELECT,INSERT,UPDATE o DELETE, o dentro de otra subconsulta.

Ejemplo 1
Listar las columnas idpedido, fechapedido y el máximo precio unitario en el pedido.

SELECT p.idpedido,p.fechapedido,(SELECT MAX(dp.preciounidad)


FROM [Detalles de pedidos] AS dp
WHERE p.idpedido=dp.idpedido) AS "Máximo precio unitario del pedido"
FROM pedidos AS p

Ejemplo 2
Listar los productos con precio unitario igual o mayor al mayor precio de los artículos que son
abastecidos por el proveedor con idproveedor igual a 1.

SELECT p1.* FROM productos AS p1


WHERE preciounidad=(SELECT MAX(p2.preciounidad)
FROM productos AS p2
WHERE idproveedor=1)

Ejemplo 3
Listar el nombrecompañía, ciudad y país de los clientes que sean igual al país de Antonio Moreno
Taquería

SELECT nombrecompañía,ciudad,país
FROM clientes
WHERE país IN
(SELECT país FROM clientes
WHERE nombrecompañía='Antonio Moreno Taquería')

Ejemplo 4
Listar el nombrecompañía, ciudad y país de los clientes que residan en un país diferente al de
Antonio Moreno Taqueía

SELECT nombrecompañía,ciudad,país
FROM clientes
WHERE país NOT IN (SELECT país
FROM clientes
WHERE nombrecompañía='Antonio Moreno taquería')

Subconsultas con EXISTS


Cuando se presenta una subconsulta con la palabra clave EXISTS, funciona como una prueba de
existencia. La cláusula WHERE de la consulta externa comprueba la existencia de las filas
devueltas por una subconsulta. La subconsulta en realidad no produce ningún dato, devuelve el
valor TRUE o FALSE

Ing. CIP Edwin Iván Farro Pacífico Pag. 2


Universidad San Pedro
Ejemplo 5
Listar las columnas idcliente y nombrecompañía de todos los clientes que han realizado al menos un
pedido

SELECT idcliente,nombrecompañía
FROM clientes AS c1
WHERE EXISTS
(SELECT * FROM clientes AS c2 INNER JOIN pedidos AS p
ON c2.idcliente=p.idcliente
WHERE c1.idcliente=c2.idcliente)

Ejemplo 6
Muestrame lo clientes que no han realizado pedidos

SELECT c.idcliente,c.nombrecompañía
FROM clientes AS c
WHERE NOT EXISTS
(SELECT * FROM clientes as c1 INNER JOIN pedidos AS p
ON c1.idcliente=p.idcliente
WHERE c.idcliente=c1.idcliente)

SUBCONSULTAS ANIDADAS
Una subconsulta puede incluir en sí una o varias subconsultas. En una instrucción se puede añadir
cualquier número de consultas

Ejemplo 7
Muestrame los pedidos y fecha de pedido que hayan adquirido el café de Malasia

SELECT idpedido,fechapedido FROM pedidos


WHERE idpedido IN
(SELECT idpedido FROM [Detalles de Pedidos] AS dp
WHERE dp.idproducto IN
(SELECT idproducto FROM productos
WHERE nombreproducto='Café de Malasia'))

Ejemplo 8
Listar todos los empleados que atendieron a Antonio Moreno Taquería

SELECT apellidos,Nombre,cargo
FROM empleados
WHERE idempleado IN
(SELECT idempleado FROM pedidos
WHERE idcliente IN
(SELECT idcliente FROM clientes
WHERE nombrecompañía='Antonio Moreno Taquería'))

Ing. CIP Edwin Iván Farro Pacífico Pag. 3


Universidad San Pedro
CONSULTAS SUMARIAS
Explicaremos como SQL Server permite contestar a las siguientes peticiones:

SUM() Total de las columnas


AVG() Calcular el valor promedio de la columna
MIN() Retorna el valor más pequeño de la columna
MAX() Retorna el mayor valor en una columna
COUNT() Cuenta el número de valores en una columna
COUNT(*) Cuenta el número de filas resultados

Ejemplo 9
Muestra el número total de artículos pedidos y además el monto total

SELECT SUM(cantidad) AS "Total de productos",


SUM(preciounidad*cantidad-descuento) AS "Monto Total"
FROM [Detalles de Pedidos]

Ejemplo 10
Listar el promedio de precios de los artículos que abastece el proveedor Tokyo Traders

SELECT AVG(preciounidad) AS "Prom de Precios"


FROM productos
WHERE idproveedor IN
(SELECT idproveedor FROM proveedores
WHERE nombrecompañía='Tokyo Traders')

Ejemplo 11
Mostrar el precio máximo y el precio mínimo de los productos abastecidos por el proveedor
Pavlova,Ltd

SELECT MAX(preciounidad) AS "Prec. máximo",MIN(preciounidad) AS "Prec. mínimo"


FROM productos
WHERE idproveedor IN
(SELECT idproveedor FROM proveedores
WHERE nombrecompañía='Pavlova, Ltd.')

Ejemplo 12
Mostrar cuantos clientes residen en Alemania

SELECT COUNT(*) FROM clientes


WHERE país='Alemania'

Ejemplo 13
Mostar cuantos pedidos realizó HILARIÓN-ABASTOS

SELECT COUNT(*) FROM pedidos


WHERE idcliente IN
(SELECT idcliente FROM clientes
WHERE nombrecompañía='HILARIÓN-ABASTOS')

Ing. CIP Edwin Iván Farro Pacífico Pag. 4


Universidad San Pedro

AGRUPAR FILAS CON GROUP BY


Las consultas sumarias explicadas anteriormente retornan una única fila donde se condensan los
datos. Existen casos donde se necesitan presentar la información en forma de subtotales.

Ejemplo 14
Muéstrame cuantos productos existen por categoría

SELECT c.nombrecategoría,COUNT(p.idproducto) AS "Cantidad de productos"


FROM categorías As c INNER JOIN productos AS p
ON (c.idcategoría=p.idcategoría)
GROUP BY c.nombrecategoría
ORDER BY 2 DESC

Ejemplo 15
Listar el número de unidades vendidas de cada producto que pertenecen a la categoría 4

SELECT p.idproducto,SUM(dp.cantidad)
FROM productos As p INNER JOIN [detalles de pedidos] AS dp
ON p.idproducto=dp.idproducto AND p.idcategoría=4
GROUP BY p.idproducto
ORDER BY p.idproducto

Ejemplo 16
Listar los apellidos de los empleados y la cantidad de pedidos que atendió cada empleado.

SELECT e.apellidos,e.nombre,COUNT(p.idpedido)
FROM empleados As e INNER JOIN pedidos AS p
ON e.idempleado=p.idempleado
GROUP BY e.apellidos,e.nombre
ORDER BY e.apellidos

Ejemplo 17
Listar los idpedido, número de artículos en el pedido y el subtotal con la condición que el subtotal
sea superior a 1000

SELECT dp.idpedido,SUM(cantidad) AS "Prod por pedido",


SUM(cantidad*preciounidad-descuento)AS "Sub Total mayor a 1000"
FROM [detalles de pedidos] AS dp
GROUP BY dp.idpedido
HAVING SUM(cantidad*preciounidad-descuento)>1000

Operador CUBE

Ejemplo 18
Listar los empleados y el número de pedidos que atendieron por cada año.

SELECT e.apellidos,e.nombre,COUNT(p.idpedido) AS "Cantidad de pedidos",


YEAR(p.fechapedido) AS "Año de pedido"
FROM empleados As e INNER JOIN pedidos AS p

Ing. CIP Edwin Iván Farro Pacífico Pag. 5


Universidad San Pedro
ON e.idempleado=p.idempleado
GROUP BY e.apellidos,e.nombre,YEAR(p.fechapedido)
WITH CUBE
ORDER BY e.apellidos,e.nombre,YEAR(p.fechapedido) ASC

Operador ROLLUP

Ejemplo 19

SELECT e.apellidos,e.nombre,COUNT(p.idpedido) AS "Cantidad de pedidos",


YEAR(p.fechapedido) AS "Año de pedido"
FROM empleados As e INNER JOIN pedidos AS p
ON e.idempleado=p.idempleado
GROUP BY e.apellidos,e.nombre,YEAR(p.fechapedido)
WITH ROLLUP
ORDER BY e.apellidos,e.nombre,YEAR(p.fechapedido) ASC

Cláusula TOP

Ejemplo 20
Listar los 5 productos más caros

SELECT TOP 5 idproducto,nombreproducto,preciounidad


FROM productos
ORDER BY 3 DESC

Ing. CIP Edwin Iván Farro Pacífico Pag. 6

También podría gustarte