8/18/2019 Base Datos Join Vistas
1/30
24/09/2
La sintaxis completade la instrucción
SELECT
Sesión 05Jony Espinoza
Las cláusulas principales se puedenresumir del modo siguiente:
SELECT select_list [INTO new_table_name]
FROM table_list
[WHERE search_conditions]
[GROUP BY group_by_list ]
[HAVING search_conditions]
[ORDER BY order_list [ ASC | DESC] ]
8/18/2019 Base Datos Join Vistas
2/30
24/09/2
EJEMPLO
SELECT Enviar_via,Monto=SUM(Monto_pedido) INTO Ventas_VIA2003FROM PedidoWHERE Year (Fecha_Pedido)=2003
and Month(Fecha_Pedido) IN (6,7,8)GROUP BY Enviar_viaHAVING SUM(Monto_pedido)
8/18/2019 Base Datos Join Vistas
3/30
24/09/2
Mostrar a los clientes que hayan tenido 20 facturas o mas
ordenados por cantidad e facturas recibidas
SELECT cod_cliente, cantidad = count(*)
FROM comprobante_pago
WHERE tipo_comprobante='F'
GROUP BY cod_cliente
HAVING count(tipo_comprobante)>=20
ORDER BY cantidad
La cláusula HAVING se usa normalmente junto con la cláusulaGROUP BY, aunque se puede especificar sin GROUP BY.Especifica otros filtros que se aplican después de los de la cláusulaWHERE.Ejemplo: La cláusula WHERE filtra los pedidos de un producto cuyoprecio unitario supere los 10 S/., y la cláusula HAVING restringeposteriormente el resultado a aquellos pedidos que incluyan más de7 unidades:
SELECT DP1.ID_pedido,UnidadesVendidas = SUM(DP1.Cantidad),Importe = SUM(DP1.Precio_por_unidad * DP1.Cantidad)
FROM Detalle_pedido DP1WHERE DP1.ID_pedido IN (SELECT DISTINCT DP2.ID_pedido
FROM Detalle_pedido DP2WHERE DP2.Precio_por_unidad >10)
GROUP BY DP1.ID_pedidoHAVING SUM(DP1.Cantidad) > 7
8/18/2019 Base Datos Join Vistas
4/30
8/18/2019 Base Datos Join Vistas
5/30
24/09/2
La siguientes consultas, devuelven resultados similaresporque estos operadores incluyen filas que coincidan conlos valores que limitan el intervalo.
SELECT Cod_producto, Nombre_productoFROM ProductoWHERE Cod_Tipo_producto = 1
OR Cod_Tipo_producto = 4OR Cod_Tipo_producto = 5
SELECT Cod_producto, Nombre_productoFROM ProductoWHERE Cod_Tipo_producto IN (1, 4, 5)
Otro ejemplo:SELECT * FROM ClienteWHERE Pais IN ('Italia','Alemania')
Incluya los caracteres comodín y la cadena de caracteresentre comillas simples, por ejemplo:
LIKE 'Mc%' busca las cadenas que comiencen con las letras "Mc"(McBadden).LIKE '%inger ' busca las cadenas que finalicen con las letras "inger"(Ringer, Stringer).LIKE '%en%' busca las cadenas que contienen las letras "en" enalguna parte de la cadena (Bennet, Green, McBadden).LIKE ' _heryl' busca los nombres de seis letras que terminan conlas letras "heryl" (Cheryl, Sheryl).LIKE '[CK]ars[eo]n' busca Carsen, Karsen, Carson y Karson.
LIKE '[M-Z]inger ' busca los nombres que terminen por "inger" y queempiecen con cualquier letra entre M y Z (Ringer).LIKE 'M[^c] %' busca los nombres que empiecen con la letra M queno tengan la letra "c" como segunda letra (MacFeather).
8/18/2019 Base Datos Join Vistas
6/30
24/09/2
TOP n La palabra clave TOP especifica que se devolverán las primeras n
filas del conjunto de resultados.TOP n [PERCENT]Si se especifica PERCENT, n es el porcentaje de filas del
conjunto de resultados que se va a devolver:
TOP 12 -- Retorna 12 filas superiores del total de filasTOP 15 PERCENT -- Retorna el 15% superiores del total de filas
SELECT DISTINCT TOP 5 Enviar_via, Cantidad = count(*)FROM pedidoGROUP BY Enviar_viaORDER BY Cantidad
SELECT TOP 6 Pais,Cantidad = Count(*) FROM ClienteGROUP BY paisORDER BY Cantidad DESC
Crear una nueva columna (con SELECT INTO) que use la
propiedad IDENTITY, mediante la sintaxis especificada.Por e jemplo, para crear una nueva co lumna l lamadaNewCod_empleado en la tabla Empleado de tipo int, que empiececon el valor 100 y vaya aumentándolo en 1 por cada númerosucesivo; use NewCod_empleado = IDENTITY(int, 100, 1).
SELECT Nombres + ' ' + Apellidos AS "Nombre Empleado",NewCod_empleado = IDENTITY(int, 100, 1),--IDENTITYCOL AS "Cod_empleado",Tfno_particular,CArgo,10 AS Constant INTO identidad101
FROM EmpleadoORDER BY Apellidos, Nombres ASC
SELECT * FROM identidad101
Drop Table identidad101
8/18/2019 Base Datos Join Vistas
7/30
24/09/2
Los operadores lógicos comprueban la veracidadV de algunacondición. Éstos, como los operadores de comparación,devuelven el tipo de datos Boolean con valor TRUE o FALSE.
ALL (TRUE si el conjunto completo de comparaciones es V) AND (TRUE si ambas expresiones booleanas son V). ANY (TRUE si una cualquier miembro del conjunto decomparaciones es V).BETWEEN (TRUE si el operando está dentro de un intervalo.EXISTS (TRUE si una subconsulta contiene a cualquiera de lasfilas.IN (TRUE si el operando es igual a uno de la lista de expresiones.LIKE (TRUE si el operando coincide con un patrón.NOT Invierte el valor de cualquier otro operador booleano.OR (TRUE si cualquiera de las dos expresiones booleanas es V).
SOME (TRUE si alguna de las comparaciones de un conjunto V).
Una lista de selección puede contener expresionesconstruidas al aplicar operadores a una o más expresionessimples, son calculados a partir de los valores que sealmacenan. Estas columnas del conjunto de resultados sellaman columnas derivadas, e incluyen:• Cálculos que usan operadores o funciones matemáticasen las columnas o constantes numéricas:
SELECT ROUND( (Precio * 0.9), 2) AS PrecioDescuentoFROM productoWHERE Cod_producto = 2205
• Conversiones de tipos de datos:
SELECT( CAST(Cod_producto AS VARCHAR(10)) + ': '+ Nombre_producto ) AS Nombre_de_ProductoFROM Producto
8/18/2019 Base Datos Join Vistas
8/30
24/09/2
Funciones CASE:
SELECT Cod_producto, Nombre_producto,
CASE Cod_Tipo_ProductoWHEN 1 THEN ROUND( (Precio * 0.6), 2)WHEN 2 THEN ROUND( (Precio * 0.7), 2)WHEN 3 THEN ROUND( (Precio * 0.8), 2)ELSE ROUND( (Precio * 0.9), 2)
END AS PrecioConDescuentoFROM Producto
La cláusula AS se puede usar para asignar un nombredistinto, o alias, a la columna del conjunto de resultados.
Esto se puede hacer para mejorar la comprensión. Lomismo para las tablas.
Las expresiones con tipos de datos Boolean se utilizan en lacláusula WHERE para filtrar las filas que cumplen lascondiciones de búsqueda y en las instrucciones de lenguajes decontrol de flujo tales como IF y WHILE, por ejemplo:
DECLARE @MyProduct intSET @MyProduct = 1107IF (@MyProduct 0)SELECT *FROM Producto
WHERE Cod_producto = @MyProduct
Muestra el registro con cod_producto=1107
8/18/2019 Base Datos Join Vistas
9/30
24/09/2
Las instrucciones SELECT que no necesitan una cláusulaFROM son aquéllas que no seleccionan datos de ninguna
tabla de la base de datos, sólo seleccionan datos de lasvariables locales o de funciones Transact-SQL que no operanen una columna:
SELECT @MyIntVariableSELECT @@VERSION -- muestra la version del SQLServerSELECT DB_ID('academia') --muestra el Nro de orden de BDSELECT GETDATE() --Muestra la fecha del sistema
DECLARE @MyNumber intSET @MyNumber = 2 * 4 + 5SELECT @MyNumber
SUBCONSULTAS:
SELECT P.Cod_Producto AS Codigo, P.Nombre_producto AS Nombre,( SELECT SUM(DP.Precio_por_unidad * DP.Cantidad)
FROM Detalle_pedido AS DPWHERE DP.Cod_Producto = P.Cod_Producto) AS SumaDeVentas
FROM Producto AS PORDER BY P.Cod_Producto
Transact-SQL admite también la siguiente sintaxis por mantener lacompatibilidad con las versiones anteriores de SQL Server:
columna_alias = nombre_de_columna O bien nombre_columna_derivada = expresion_columna_resultante
8/18/2019 Base Datos Join Vistas
10/30
24/09/2
CREACIÓN DE SUB CONSULTAS:
(Consultas Anidadas)
1.1.- Mostrar el nombre y apellidos de los empleados queatienden los pedidos.
SELECT Nombres, Apellidos, Cargo
FROM Empleado
WHERE Cod_Empleado IN (SELECT Cod_Empleado
FROM Pedido)
1.3.- Cantidad de pedidos hechos el cliente ExtremeCycling cuyo código de cliente es el 25 pero deberáagruparlos de acuerdo a la agencia de envió.
SELECT Enviar_via, Cantidad=Count(*)
FROM Pedido
WHERE Cod_cliente IN (SELECT Cod_cliente FROM Cliente
WHERE Cod_cliente=25)
GROUP BY Enviar_via
8/18/2019 Base Datos Join Vistas
11/30
24/09/2
1.5- Realice una consulta que muestre los pedidos en el año 2002,en los meses de enero, febrero y diciembre, de todos los clientes dela ciudad de Madison ó Kingston de los Estados Unidos, donde elmonto del pedido sea mayor a $1,000 y el cliente tenga una
dirección conocida. La información a mostrar es: Nro de pedido,fecha de pedido, Monto de Pedido. Esta información debe estarordenada por fecha de pedido y el monto de pedido. Para estaconsulta Usted solo debe usar Subconsultas; La codificación seráde la siguiente manera:
SELECT Nro_Pedido, Fecha_pedido, Monto_pedidoFROM PedidoWHERE ( YEAR(Fecha_pedido) = 2002)
AND (MONTH(Fecha_pedido) IN (1, 2, 12))AND (Monto_pedido > 1000)AND ( Cod_cliente IN (SELECT cod_cliente FROM cliente
WHERE Ciudad = 'Madison'OR Ciudad = 'Kingston'AND Direccion_1 IS NOT NULL))
ORDER BY Fecha_pedido, Monto_pedido
SBC02.- cuantos pedidos se han hecho del producto cuyonombre es: Romeo y además se desea hallar el ingreso totalpor el pedido de dicho producto.
SELECT Nombre_Producto,Cantidad=Count(*),Sum(Precio) As Total
FROM ProductoWHERE Cod_Producto IN (SELECT Cod_Producto
FROM Detalle_PedidoWHERE Nombre_Producto='Romeo')
GROUP BY Nombre_Producto
8/18/2019 Base Datos Join Vistas
12/30
24/09/2
SBC05.- Cuantos Pedidos atendió el empleado de nombreRobert
SELECT Cod_Empleado, Cantidad_de_Pedidos=Count(*)
FROM Pedido
WHERE Cod_Empleado IN (SELECT Cod_Empleado
FROM Empleado
WHERE Nombres='Robert')
GROUP BY Cod_Empleado
Combinaciones de dos tablasLas combinaciones permiten recuperar datos de dos tablas omás según las relaciones lógicas entre ellas.Una condición de combinación define la forma en la que dostablas se relacionan en una consulta al:
Especificar la columna de cada tabla que debe usarse para lacombinación. Una condición de combinación típica especificauna clave externa de una tabla y su clave asociada en otratabla.
Especificar un operador lógico (=, , etc.) para usarlo en losvalores de comparación de las columnas
SELECT Cod_producto, PV.Cod_proveedor, NombreFROM Proveedor PV JOIN Producto PR
ON PV.Cod_Proveedor = PR.Cod_ProveedorWHERE Precio > 45 AND Nombre LIKE 'T%'
8/18/2019 Base Datos Join Vistas
13/30
24/09/2
Combinaciones de dos tablas
SELECT C.Cod_cliente, C.Nombre_Cliente, C.Ciudad,P.Fecha_envio, P.Monto_pedido
FROM Pedido PJOIN Cliente C ON (C.cod_cliente = P.cod_cliente)
TIPOS DE COMBINACIONES
Las combinaciones se pueden clasificar en :
A)Combinaciones Interna – INNER JOIN
B)Combinaciones Externas – LEFT OUTER JOIN – RIGTH OUTER JOIN
– FULL OUTER JOIN
8/18/2019 Base Datos Join Vistas
14/30
24/09/2
COMBINACION INTERNA
INNER JOIN
Conocida también como unión interna.
Las combinaciones equivalentes son las más comunes;éstas combinan los registros de dos tablas siempre quehaya concordancia de valores en un campo común aambas tablas.
Ejemplo 1.1
NOMBRE NUMERO
Karen 1
Sonia NULL
Rafael 5
ID NUMERO MARCA
50 1 BMW
51 2 Mercedes
53 NULL Wart
NOMBRE A.NUMERO ID B.NUMERO MARCA
Karen 1 50 1 BMW
A B
SELECT * FROM A
INNER JOIN B ON A.NUMERO =B.NUMERO
8/18/2019 Base Datos Join Vistas
15/30
24/09/2
COMBINACIONES EXTERNAS
LEFT OUTER JOIN (COMBINACION EXTERNA IZQUIERDA)
El conjunto de resultados de una combinación externaizquierda incluye todas las filas de la tabla de laizquierda especificada en la cláusula LEFT OUTERJOIN, y no solo aquellas en las que coincidan lascolumnas combinadas.
Cuando una fila de la tabla de la izquierda no tiene filascoincidentes en la tabla de la derecha, la fila asociadadel conjunto de resultados contiene valores NULL entodas las columnas de la lista de selección que procedande la tabla de la derecha.
Ejemplo 1.2
NOMBRE NUMERO
Karen 1
Sonia NULL
Rafael 5
ID NUMERO MARCA
50 1 BMW
51 2 Mercedes
53 NULL Wart
A B
NOMBRE A.NUMERO ID B.NUMERO MARCA
Karen 1 50 1 BMW
Sonia NULL NULL NULL NULL
Rafael 5 NULL NULL NULL
SELECT * FROM A
LEFT OUTER JOIN B ON A.NUMERO =B.NUMERO
8/18/2019 Base Datos Join Vistas
16/30
24/09/2
COMBINACIONES EXTERNAS
RIGHT OUTER JOIN(COMBINACION EXTERNA DERECHA)
Una combinación externa derecha es el inverso de unacombinación externa izquierda. Se devuelven todas lasfilas de la tabla de la derecha .
Cada vez que una fila de la tabla de la derecha no tengacorrespondencia en la tabla de la izquierda , se devuelvenlos valores NULL para la tabla izquierda
Ejemplo 1.3
NOMBRE NUMERO
Karen 1
Sonia NULL
Rafael 5
ID NUMERO MARCA
50 1 BMW
51 2 Mercedes
53 NULL Wart
A B
NOMBRE A.NUMERO ID B.NUMERO MARCA
Karen 1 50 1 BMW
NULL NULL 51 2 Mercedes
NULL NULL 53 NULL Wart
SELECT * FROM A
RIGHT OUTER JOIN B ON A.NUMERO =B.NUMERO
8/18/2019 Base Datos Join Vistas
17/30
24/09/2
COMBINACIONES EXTERNAS
FULL OUTER JOIN(COMBINACION EXTERNA COMPLETA )
Una combinación externa completa devuelve todas lasfilas de las tablas de la izquierda y la derecha . Cada vezque una fila no tenga coincidencia en la otra tabla , lascolumnas de la lista de selección de la otra tablacontendrán valores NULL .
Cuando haya una coincidencia entre las tablas, la filacompleta del conjunto de resultados contendrán losvalores de la tabla base.
Ejemplo 1.4
NOMBRE NUMERO
Karen 1
Sonia NULL
Rafael 5
ID NUMERO MARCA
50 1 BMW
51 2 Mercedes
53 NULL Wart
A B
NOMBRE A.NUMERO ID B.NUMERO MARCA
Karen 1 50 1 BMW
NULL NULL 51 2 Mercedes
NULL NULL 53 NULL Wart
Sonia NULL NULL NULL NULL
Rafael 5 NULL NULL NULL
SELECT * FROM A
FULL OUTER JOIN B ON A.NUMERO =B.NUMERO
8/18/2019 Base Datos Join Vistas
18/30
24/09/2
Ejemplo 2
Ejemplo 2.1
Combinaciones internas:(INNER JOIN)
8/18/2019 Base Datos Join Vistas
19/30
24/09/2
Ejemplo 2.2
Combinaciones externas:(LEFT OUTER JOIN)
Ejemplo 2.3
Combinaciones externas:(RIGH OUTER JOIN)
8/18/2019 Base Datos Join Vistas
20/30
24/09/2
Ejemplo 2.24
Combinaciones Completa (FULL OUTER JOIN)
INNER Especifica que se devuelvan todos los pares de filas coincidentes.Descarta las filas no coincidentes de las dos tablas. Éste es el valorpredeterminado si no se especifica ningún tipo de combinación.
LEFT [ OUTER ]Especifica que todas las filas de la tabla de la izquierda que no cumplan lacondición especificada se incluyan en el conjunto de resultados, ademásde todas las filas que devuelva la combinación interna. Las columnas desalida de la tabla de la izquierda se establecen a NULL.
RIGHT [ OUTER ]Especifica que todas las filas de la tabla de la derecha que no cumplan lacondición especificada se incluyan en el conjunto de resultados, ademásde las que devuelva la combinación interna. Las columnas de salida de latabla de la derecha se establecen a NULL.
FULL [ OUTER ]Si una fila de la tabla de la izquierda o de la derecha no coincide con loscriterios de selección, especifica que la fila se incluya en el conjunto deresultados y las columnas de resultados que corresponden a la otra tablase establezcan como NULL. Se trata de una adición a todas las fi las quenormalmente devuelve la combinación interna.
JOIN Indica que las tablas o vistas especificadas deben combinarse.
ON < search_condition >Especifica la condición en la que se basa la combinación. La condiciónpuede especificar cualquier predicado (columnas y operadores =)
RESUMEN
8/18/2019 Base Datos Join Vistas
21/30
24/09/2
Utilizar combinaciones internas
Las combinaciones internas sólo devuelven filas cuando hay unafila de ambas tablas, como mínimo, que coincide con la condición
de la combinación. Las combinaciones internas eliminan las filas que no coinciden con alguna fila de la otra tabla.Ejemplo de una combinación interna:
SELECT *FROM producto AS Pr INNER JOIN proveedor AS Pv
ON Pr.cod_proveedor = Pv.cod_proveedorORDER BY Pr.nombre_producto DESC
SELECT p.Cod_producto, p.nombre_producto, p.Precio, pv.*
FROM Producto p INNER JOIN Proveedor pvON p.cod_proveedor = pv.cod_proveedorORDER BY pv.nombre ASC
Utilizar combinaciones externas
Las combinaciones externas devuelven todas las filas de una de lastablas o vistas mencionadas en la cláusula FROM, como mínimo,siempre que tales filas cumplan con alguna de las condiciones debúsqueda de WHERE o HAVING.
SQL Server 2000 utiliza las siguientes palabras clave:
LEFT OUTER JOIN o LEFT JOINRIGHT OUTER JOIN o RIGHT JOINFULL OUTER JOIN o FULL JOIN
8/18/2019 Base Datos Join Vistas
22/30
24/09/2
Utilizar combinaciones exteriores izquierdas Imagine una combinación de la tabla cliente y de la tablapedido en sus columnas cod_cliente. Los resultados sólomuestran los clientes que hayan hecho un pedido.
Para incluir todos los clientes en el resultado, con independenciade que un cliente haya realizado un pedido o no, use unacombinación exterior izquierda:
SELECT C.Nombre_cliente, C.Ciudad, P.Nro_pedido,FROM Cliente C LEFT OUTER JOIN Pedido PON C.Cod_cliente = P.Cod_clienteORDER BY P.Nro_pedido, C.Nombre_cliente, C.Ciudad
LEFT OUTER JOIN incluye en el resultado todas las filas de latabla cliente, tanto si hay una coincidencia en la columnacod_cliente de la tabla pedido como si no la hay. Observe que,en los resultados, no hay datos coincidentes en uno de losclientes, con lo que esta fila contiene valor NULL en la columnaNro_pedido.
SELECT C.Nombre_cliente, C.Ciudad, P.Nro_pedido, P.Monto_pedidoFROM Cliente C LEFT OUTER JOIN Pedido PON C.Cod_cliente = P.Cod_cliente
ORDER BY P.Nro_pedido,C.Nombre_cliente, C.Ciudad
SELECT C.Nombre_cliente, C.Ciudad, P.Nro_pedido, P.Monto_pedidoFROM Cliente C INNER JOIN Pedido P
ON C.Cod_cliente = P.Cod_clienteORDER BY P.Nro_pedido,C.Nombre_cliente, C.Ciudad
8/18/2019 Base Datos Join Vistas
23/30
24/09/2
SELECT E.apellidos, E.nombres, P.Monto_pedido, P.Nro_pedidoFROM Empleado E LEFT OUTER JOIN Pedido PON E.Cod_empleado = P.Cod_empleado and Monto_pedido>1000ORDER BY P.Nro_pedido, E.apellidos, E.nombres
SELECT E.apellidos, E.nombres, P.Monto_pedido, P.Nro_pedidoFROM Empleado E INNER JOIN Pedido PON E.Cod_empleado = P.Cod_empleado and Monto_pedido>1000ORDER BY P.Nro_pedido, E.apellidos, E.nombres
8/18/2019 Base Datos Join Vistas
24/30
24/09/2
Utilizar combinaciones exteriores derechas Imagine una combinación de la tabla empleado y de la tabla pedido ensus columnas cod_empleado. Los resultados sólo muestran losempleados que han realizado pedido con monto superior a 5000. Eloperador de combinación exterior derecha, RIGHT OUTER JOIN, indicaque todas las fi las de la segunda tabla se deben incluir en los resultados,con independencia de si hay datos coincidentes en la primera tabla.
SELECT E.apellidos, E.nombres, P.Monto_pedido, P.Nro_pedidoFROM Empleado E RIGHT OUTER JOIN Pedido P
ON E.Cod_empleado = P.Cod_empleado AND Monto_pedido>5000ORDER BY P.Nro_pedido, E.apellidos, E.nombres
Una combinación externa se puede restringir aún más si se utiliza unpredicado (como comparar la combinación con una constante). En esteejemplo se muestra la combinación externa derecha, pero se descartan(empleados como NULLS) todos los Monto_pedidos menores a 5000
8/18/2019 Base Datos Join Vistas
25/30
24/09/2
Utilizar combinaciones externas completas Para retener la información que no coincida al incluir las filas nocoincidentes en los resultados de una combinación, utilice unacombinación externa completa. FULL OUTER JOIN, que incluyetodas las filas de ambas tablas, con independencia de que la otratabla tenga o no un valor coincidente.
SELECT E.apellidos, E.nombres, P.Nro_pedido, P.Monto_pedido
FROM Empleado E FULL OUTER JOIN Pedido P
ON E.Cod_empleado = P.Cod_empleado and Monto_pedido>5000
ORDER BY P.Nro_pedido, E.apellidos, E.nombres
8/18/2019 Base Datos Join Vistas
26/30
24/09/2
Combinar tres o más tablas Si bien cada especificación de combinación sólo combina dos tablas, lascláusulas FROM pueden contener múltiples especificaciones decombinaciones. Esto permite que se combinen muchas tablas en una consulta
única.Ejemplo realice una consulta que muestre los pedidos en el año 2003, en losmeses de enero, febrero y marzo, donde el monto del pedido sea mayor a$1,000. La información a mostrar es: Nro de pedido, nombre del cliente,Nombre producto, Cantidad, precio y el Importe. Ordenada por Nro depedido y el importe.
SELECT P.Nro_Pedido, C.Nombre_cliente, PR.Nombre_producto, DP.Cantidad,
DP.Precio_por_unidad,
Importe = DP.Cantidad * DP.Precio_por_unidad
FROM Pedido P
INNER JOIN Cliente C ON P.Cod_cliente = C.Cod_cliente
INNER JOIN Detalle_pedido DP ON P.Id_pedido = DP.Id_Pedido
INNER JOIN Producto PR ON DP.Cod_producto = PR.Cod_producto
WHERE (YEAR(P.Fecha_pedido) = 2003)
AND (MONTH(P.Fecha_pedido) IN (1, 2, 3))
AND (P.Monto_pedido > 1000)ORDER BY P.Nro_pedido, Importe
8/18/2019 Base Datos Join Vistas
27/30
24/09/2
2.1.- Realice una consulta que muestre los pedidos en el año2002, en los meses de enero, febrero y diciembre, de todos los
clientes de la ciudad de Madison ó Kingston de los EstadosUnidos, donde el monto del pedido sea mayor a $1,000 y elcliente tenga una dirección conocida.
La información a mostrar es: Nro de pedido, nombre delcliente, fecha de pedido (solo mostrar el día y el mes),Nombre producto, Cantidad, precio y el Importe.
Esta información debe estar ordenada por fecha de pedido y elimporte.
Examine: Los datos requeridos están en distintas tablas y la
relación que hay entre las tablas y los campos que en comúntienen estos
8/18/2019 Base Datos Join Vistas
28/30
24/09/2
SELECT P.Nro_Pedido,
C.Nombre_cliente,
Fecha=CAST(DAY(P.Fecha_pedido) as varchar(2))+'-'+CONVERT(varchar(2), MONTH(P.Fecha_pedido)),
PR.Nombre_producto,DP.Cantidad,
DP.Precio_por_unidad,
Importe = DP.Cantidad * DP.Precio_por_unidad
FROM Pedido P INNER JOIN Cliente C ON P.Cod_cliente = C.Cod_cliente
INNER JOIN Detalle_pedido DP ON P.Id_pedido = DP.Id_PedidoINNER JOIN Producto PR ON DP.Cod_producto = PR.Cod_producto
WHERE (YEAR(P.Fecha_pedido) = 2002)
AND (MONTH(P.Fecha_pedido) IN (1, 2, 12))AND (P.Monto_pedido > 1000)
AND (Ciudad = 'Madison' OR Ciudad = 'Kingston' AND Direccion_1 IS NOT NULL)
ORDER BY P.Fecha_pedido, Importe
Consulta que muestra los pedidos del año 2002, en los meses de enero,febrero y diciembre, de todos los clientes de la ciudad de Madison óKingston de los Estados Unidos, donde el monto del pedido es mayor a$1,000 y el cliente tiene una dirección conocida.
La información mostrada es: Nro de pedido, nombre del cliente, fechade pedido (día y mes), Nombre producto, Cantidad, precio e Importe.
8/18/2019 Base Datos Join Vistas
29/30
24/09/2
3.2.- Crear una nueva tabla denominada PersonalVentas en donde se pueda tener solamente a los Empleados cuyocargo sea el de Representante de Ventas.
SELECT Apellidos+', '+Nombres AS Nombres,Cargo,Fecha_Nacimiento INTO PersonalVentas
FROM EmpleadoWHERE Cargo = 'Representante de Ventas'ORDER BY Nombres DESC
VISTAS
5.2.- Crear una vista que permita ver la cantidad de pedidoshechos por cada cliente.
CREATE VIEW Cantidad_Pedidos_Por_ClienteASSELECT C.Nombre_cliente, Cantidad=COUNT(P.Nro_Pedido)FROM Cliente C
INNER JOIN Pedido PON C.Cod_cliente = P.Cod_cliente
GROUP BY C.Nombre_cliente
8/18/2019 Base Datos Join Vistas
30/30
24/09/2
V02.- Cantidad de empleados por AFP
CREATE VIEW Empleados_x_AFP
ASSELECT AFP, Empleados_por_AFP = COUNT(*)FROM PLANILLAGROUP BY AFP
V07.- Cantidad de empleados que no hicieron pedidos en el 2002
CREATE VIEW NroPedidos2002 ASSELECT COUNT(*) AS NroPedidos2002
FROM EMPLEADOWHERE COD_EMPLEADO NOT IN (SELECT COD_EMPLEADOFROM PEDIDOWHERE YEAR(FECHA_PEDIDO)=2002)
PROXIMAMENTE:
Procedimientos Almacenados
(Stored Procedures)
Top Related