Base Datos Join Vistas

download Base Datos Join Vistas

of 30

Transcript of Base Datos Join Vistas

  • 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)