Sei sulla pagina 1di 5

Universidad Nacional del Callao

Práctica Dirigida Nº 08

Objetivo : Crear consultas avanzadas

CONSULTAS AVANZADAS
Es la extracción de datos de 2 o más tablas, las cuales se unen mediante diferentes tipos de
combinaciones.

Tipos de combinaciones
a) Combinaciones internas INNER JOIN
Las combinaciones internas usan un operador de comparación para hacer coincidir las
filas de dos tablas según los valores de las columnas comunes de cada tabla.
b) Combinaciones externas OUTER JOIN
 Combinaciones externa izquierda LEFT OUTER JOIN
Incluye todas las tablas de la tabla de la izquierda especificada en la cláusula LEFT
OUTER JOIN, y no sólo aquellas en las que coincidan las columnas combinadas.
 Combinaciones externa derecha RIGHT OUTER JOIN
Es el inverso de una combinación izquierda. Se devuelven todas las filas de la tabla
de la derecha. Cada vez que una fila de l atabla de la derecha no tenga
correspondencia en la tabla de la izquierda, se devuelven valores NULL para la
tabla de la izquierda.
 Combinaciones externa completa FULL OUTER JOIN
Una combinación externa completa devuelve todas las filas de las tablas de la
izquierda y la derecha. Cada vez que una fila no tenga coincidencias en la otra tabla,
las columnas de la lista de selección de la otra tabla contendrán valores NULL.
Cuando haya una coincidencia entre las tablas, la fila completa del conjunto de
resultados contendrá los valores de datos de las tablas base.

Ejercicios
1. Listar los nombres de los proveedores y los productos que estos suministran
ordenados por el nombre del proveedor.

SELECT pv.nombrecompañía,p.nombreproducto
FROM proveedores AS pv INNER JOIN productos AS P
ON pv.idproveedor=p.idproveedor
ORDER BY pv.nombrecompañía

2. Listar el idproducto, nombreproducto y el nombrecategoría.

SELECT p.idproducto,p.nombreproducto,c.nombrecategoría
FROM categorías AS c INNER JOIN productos AS p
ON c.idcategoría=p.idcategoría

Ing Osmart Morales Chalco Guía Nº07 -Pag 1


Universidad Nacional del Callao
3. Listar todos los números de pedido, fecha de pedido y los datos de los clientes que
hizo el pedido.

SELECT p.idpedido,p.fechapedido,c.*
FROM pedidos AS p INNER JOIN clientes AS c
ON p.idcliente=c.idcliente

4. Listar el idproducto, nombreproducto, nombre de la categoría, nombrecompañía


donde el idproveedor es iguala 1

SELECT p.idproducto,p.nombreproducto,c.nombrecategoría,pv.nombrecompañía
FROM proveedores AS pv INNER JOIN productos AS p
ON pv.idproveedor=p.idproveedor
INNER JOIN categorías AS c
ON c.idcategoría=p.idcategoría
WHERE pv.idproveedor=1

5. Listar las columnas idclientes,nombrecompañía de la tabla clientes utilizando la


combinación externa LEFT OUTER JOIN con la tabla pedidos. De esta tabla
obtiene las combinaciones impedido y fechapedido.

SELECT c.idcliente,c.nombrecompañía,p.idpedido,p.fechapedido
FROM clientes AS c LEFT OUTER JOIN pedidos as P
ON p.idcliente=c.idcliente
ORDER BY p.idcliente

6. Listar los clientes que no realizaron pedidos

SELECT c.idcliente,c.nombrecompañía,p.idpedido,p.fechapedido
FROM clientes AS c LEFT OUTER JOIN pedidos AS p
ON c.idcliente=p.idcliente
WHERE p.idpedido IS NULL

Agregar los siguientes registros a la tabla Compañía de envíos

INSERT [compañías de envíos] VALUES (4,'Aero Condor','(503)555-8831')


INSERT [compañías de envíos] VALUES (5,'American express','(503)555-9761')
INSERT [compañías de envíos] VALUES (6,'Amazonas S.A.','(503)555-2231')

Listar registros

SELECT * FROM [compañías de envíos]

Ing Osmart Morales Chalco Guía Nº07 -Pag 2


Universidad Nacional del Callao
7. Listar la columna idpedido de la tabla Pedidos y NombreCompañía, de la tabla
Compañías de envíos utilizando RIGHT OUTER JOIN

SELECT p.idpedido,ce.nombrecompañía
FROM pedidos AS p RIGHT OUTER JOIN [Compañías de Envíos] AS ce
ON p.formaenvío=ce.idcompañíaenvíos
ORDER BY 2

Listar idcliente ,nombrecompañía de la tabla clientes y el idpedido de la tabla pedidos


utilizando una combinación externa completa (FULL OUTER JOIN) ordenado por el
número de pedido

SELECT c.idcliente,c.nombrecompañía,p.idpedido
FROM clientes AS c FULL OUTER JOIN pedidos AS p
ON c.idcliente=p.idcliente
ORDER BY 3

Ahora agregaremos dos tablas para los ejemplos posteriores

--Verificar la existencia de la tabla ClienteB y la eliminamos, luego crearla


IF OBJECT_ID('clientesB') IS NOT NULL
DROP TABLE clientesB
CREATE TABLE ClientesB
(
Idcliente char(5),
Nombre char(20),
Telefono char(7)
)

--Verificar la existencia de la tabla Facturas y la eliminamos, luego crearla


IF OBJECT_ID('Facturas') IS NOT NULL
DROP TABLE Facturas
CREATE TABLE Facturas
(
idFactura char(5),
idCliente char(5),
Fecha datetime,
Total Money
)

--Ingreso de datos a la tabla ClientesB


INSERT ClientesB VALUES('C0001','Luis perez','4532222')
INSERT ClientesB VALUES('C0002','Ana Rosales','5532522')
INSERT ClientesB VALUES('C0003','Jose Martinez','8539229')
INSERT ClientesB VALUES('C0004','Raul Gomez','4532227')
INSERT ClientesB VALUES('C0005','Gloria Morales','9532789')

Ing Osmart Morales Chalco Guía Nº07 -Pag 3


Universidad Nacional del Callao

--Ingreso de datos a la tabla Facturas


INSERT Facturas VALUES('F0001','C0001','01-08-2001',600)
INSERT Facturas VALUES('F0002','C0002','02-08-2001',50)
INSERT Facturas VALUES('F0003','C0003','02-08-2001',100)
INSERT Facturas VALUES('F0004','C0001','03-08-2001',300)
--Registrar sin clientes
INSERT Facturas VALUES('F0005','C0009','03-08-2001',1600)
INSERT Facturas VALUES('F0006','C0008','03-08-2001',1000)
INSERT Facturas VALUES('F0007','C0007','05-08-2001',800)

--Usando INNER JOIN


Listar las columnas idcliente y nombre de ClientesB y además idFactura de la tabla
facturas

SELECT c.idcliente,c.nombre,f.idfactura
FROM clientesb AS c INNER JOIN facturas AS f
ON c.idcliente=f.idcliente
ORDER BY 1

Listar el idcliente y nombre de la tablas ClientesB y además IdFactura de la tabla


Facturas utilizando LEFT OUTER JOIN

SELECT c.idcliente,c.nombre,f.idfactura
FROM clientesb AS c LEFT OUTER JOIN facturas AS f
ON c.idcliente=f.idcliente
ORDER BY 1

Listar el idcliente y nombre de la tablas ClientesB y además IdFactura de la tabla


Facturas utilizando RIGHT OUTER JOIN

SELECT c.idcliente,c.nombre,f.idfactura
FROM clientesb AS c RIGHT OUTER JOIN facturas AS f
ON c.idcliente=f.idcliente
ORDER BY 1

Listar el idcliente y nombre de la tablas ClientesB y además IdFactura de la tabla


Facturas utilizando FULL OUTER JOIN

SELECT c.idcliente,c.nombre,f.idfactura
FROM clientesb AS c FULL OUTER JOIN facturas AS f
ON c.idcliente=f.idcliente
ORDER BY 1

Ing Osmart Morales Chalco Guía Nº07 -Pag 4


Universidad Nacional del Callao
Listar el idcliente y nombre de la tablas ClientesB y además IdFactura de la tabla
Facturas utilizando CROSS JOIN

SELECT c.idcliente,c.nombre,f.idfactura
FROM clientesb AS c CROSS JOIN facturas AS f
ORDER BY 1

Nota: esto incluye todas las filas de la tabla ClienteB (5 filas) y cada fila se combina con
todas las filas de la tabla de la derecha (7 filas)

Ing Osmart Morales Chalco Guía Nº07 -Pag 5

Potrebbero piacerti anche