Suplemento 4
November 9, 2022 | Author: Anonymous | Category: N/A
Short Description
Download Suplemento 4...
Description
SISTEMAS DE INFORMACION GERENCIAL
CARLOS ROMERO S.
4 SUPLEMENTO 4
CONSULTAS EN SQL SERVER 1.
INTRODUCCIÓN
Empezaremos por estudiar la sentencia SE L E CT , que permite recuperar datos de una o varias tablas. La sentencia SELECT es la más compleja y potente de las sentencias SQL. Empezaremos por ver las consultas más simples, basadas en una sola tabla. Esta sentencia forma parte del Lenguaje de Manipulación de Datos o D ML (data manipulation language), en este tema veremos cómo seleccionar columnas de una tabla, cómo seleccionar filas y cómo obtener las filas ordenadas por el criterio que queramos.
2.
SINTAXIS DE LA SENTENCIA SELECT SE L E CT [ALL] [ALL] [DISTINCT] [TOP n [PERCENT]]
nombretabla.* [nombretabla.nombrecolumna [nombretabla.nombrecolumna]] AS aliascolumna, aliascolumna, …
FROM especificación de tabla WHERE condición condición de selección ORDE R BY nombrecolumna nombrecolumna [N°columna] [ASC] [DESC], … ;
Para realizar las consultas con la sentencia SELECT o cualquier otra sentencia del SQL Server se utiliza el siguiente procedimiento: a) Abrir el SQL Server Management Studio b) Conectarse empleando la Autenticación de Windows c) Hacer clic en el botón (nueva consulta) de la barra de herramientas estándar para crear una nueva consulta en SQL Server. d) Escribir el código correspondiente.
3.
LA TABLA ORIGEN
Con la cláusula FROM indicamos en qué tabla se tiene que buscar la información. En este capítulo de consultas simples el resultado se obtiene de una única tabla. La sintaxis de la cláusula es: FROM especificación de tabla
Una especificación de tabla puede ser el nombre de una consulta guardada (las que aparecen en la ventana de base de datos), o el nombre de una tabla que a su vez puede tener el siguiente formato: nombretabla [ AS A S] aliastabla I N basedatosexterna basedatosexterna aliastabla es como un segundo nombre que le asignamos a la tabla. Si en una consulta definimos un alias para la tabla, esta se deberá nombrar utilizando ese nombre y no su nombre real, además ese nombre sólo es válido en la consulta donde se define. El alias se suele emplear en consultas basadas en más de una tabla t abla como veremos más adelante.
seningún puede efecto. poner delante del nombre de alias es opcional y es el valor por palabra defectoLapor lo que AS no que tienen Ejemplo: SE L E CT ... ... FROM Oficinas$ ofi; 107
SISTEMAS DE INFORMACION GERENCIAL
CARLOS ROMERO S.
equivalente a: SE L E CT ... ... FROM Oficinas$ AS ofi
Esta sentencia me indica que se van a buscar los datos en la tabla Oficinas que queda renombrada en esta consulta con ofi. En una SE L E CT podemos podemos utilizar tablas que no están definidas en la base de datos (siempre que tengamos los permisos adecuados claro), si la tabla no está en la base de datos activa, debemos indicar en qué base de datos se encuentra con la cláusula I N . el nombre de la base de datos debe incluir el camino completo, la extensión En la cláusula I N el (.mdb), y estar entre comillas simples. Supongamos que la tabla Empleados estuviese en otra base de datos llamada Negocio en la carpeta c:\mis documentos\, habría que indicarlo así: SE L E CT * * FROM Empleados$ I N 'c:\mis 'c:\mis documentos\Negocio.m documentos\Negocio.mdb' db'
Generalmente tenemos las tablas en la misma base de datos y no es necesario utilizar la cláusula I N .
4.
SELECCIÓN DE COLUMNAS
La lista de columnas que queremos que aparezcan en el resultado es lo que llamamos lista de selección y se especifica delante de la cláusula FROM . nombretabla.* [nombretabla.nombrecolumna] [ AS AS aliascolumna], …
4.1. UTILIZACIÓN DEL * Se utiliza el asterisco (*) en la lista de selección para indicar 'todas las columnas de la tabla'. Tiene dos ventajas:
Evitar nombrar las columnas una a una (es más corto). Si añadimos una columna nueva en la tabla, esta nueva columna saldrá sin tener que modificar la consulta. Se puede combinar el * con el nombre de una tabla (ej. Oficinas$.*), pero esto se utiliza más cuando el origen de la consulta son dos tablas:
SE L E CT * FROM Oficinas$
En forma similar se puede utilizar lo siguiente: SE L E CT Oficinas$. Oficinas$.** FROM Oficinas$
Cuadro 4.20. Reporte de la tabla t abla Oficinas$
108
SISTEMAS DE INFORMACION GERENCIAL
CARLOS ROMERO S.
4.2. COLUMNAS DE LA TABLA ORIGEN Las columnas se pueden especificar mediante su nombre simple (nombrecolumna) o su nombre cualificado (nombretabla.nombrecolumna, el nombre de la columna está precedido del nombre de la tabla que contiene la columna y separados por un punto). Cuando el nombre de la columna o de la tabla contiene espacios en blanco, hay que poner el nombre entre corchetes [ ] y además el número de espacios en blanco debe coincidir. Por ejemplo [código de cliente] no es lo mismo que [ código de cliente] (el segundo lleva un espacio en blanco delante de código). Ejemplos: SE L E CT Nombre, Nombre, IdOfic IdOfic,, FechCont FROM Empleados$
Cuadro 4.21. Reporte de la consulta a la tabla Empleados$
Lista el nombre, identificación de la oficina y fecha del contrato de todos los empleados.
4.3. ALIAS DE COLUMNA Cuando se visualiza el resultado de la consulta, normalmente las columnas toman el nombre que tiene la columna en la tabla, si queremos cambiar ese nombre lo podemos hacer definiendo un alias de columna mediante la cláusula AS será el nombre que aparecerá como título de la columna. Ejemplo: ASS fabricante, IdProducto, Descripción SE L E CT IdFab IdFab A FROM Productos$
Como título de la primera columna aparecerá fabricante en vez de IdFab.
4.4. COLUMNAS CALCULADAS. Además de las columnas que provienen directamente de tabla origen, una consulta puede incluir columnas calculadas cuyos valores se calculan a partir de los valores de datos almacenados. Para solicitar una columna calculada, se especifica en la lista de selección una expresión aritmética en vez de un nombre de columna (usar los operadores del cuadro 4.22). Ejemplos: SE L E CT Ciudad, Ciudad, Región, (Ventas-Objetivo) AS superávit FROM Oficinas$
Lista la ciudad, región y el superávit de cada oficina.
109
SISTEMAS DE INFORMACION GERENCIAL
CARLOS ROMERO S.
Cuadro 4.22. Operadores aritméticos.
Operador Símbolo Suma + Resta Multiplicación * División / Agrupación () IdFab, IdProducto, Descripción, (Existencias * Precio) A ASS valoración SE L E CT IdFab, FROM Productos$ De cada producto se obtiene su IdFab, IdProducto, Descripción y valor del inventario. SE L E CT IdOfic, 'tiene ventas de ', Ventas FROM Oficinas$
Lista las ventas en cada oficina con el formato: 22 tiene ventas de 123,500.00 nuevos soles (concatenación).
5.
ORDENACION DE LAS FILAS Para ordenar las filas del resultado de la consulta, tenemos la cláusula ORDE R BY . ORDE R BY nombrecolumna [N° columna] [ASC] [DESC], …
Con esta cláusula se altera el orden de visualización de las filas de la tabla pero en ningún caso se modifica el orden de las filas dentro de la tabla. La tabla no se modifica. a)
Podemos indicar la columna por la que queremos ordenar utilizando su nombre de columna (nombrecolumna) o utilizando su número de orden que ocupa en la lista de selección (Nº columna). Ejemplo: SE L E CT Nombre, Nombre, IdOfic, FechCont FROM Empleados$ ORDER BY IdOfic IdOfic
es equivalente a: SE L E CT Nombre, Nombre, IdOfic, FechCont FROM Empleados$ ORDER BY 2 2
b)
Por defecto el orden será ascendente (ASC) (de menor a mayor si el campo es numérico, por orden alfabético si el campo es de tipo texto, de anterior a posterior si el campo es de tipo fecha/hora, etc. ... Ejemplos: Nombre, IdEmp, IdOfic SE L E CT Nombre, FROM Empleados$ ORDER BY Nombre Nombre Obtiene un listado alfabético de los empleados. SE L E CT Nombre, Nombre, IdEmp, FechCont FROM Empleados$ ORDER BY FechCont FechCont 110
SISTEMAS DE INFORMACION GERENCIAL
CARLOS ROMERO S.
Obtiene un listado de los empleados por orden de antigüedad en la empresa (los de más antigüedad aparecen primero). Nombre, IdEmp, Ventas SE L E CT Nombre, FROM Empleados$ ORDER BY Ventas
c)
Obtiene un listado de los Empleados ordenados por volumen de ventas sacando los de menores ventas primero. (DESCendente), en Si queremos podemos alterar ese orden utilizando la cláusula DESC (DESCendente), este caso el orden será el inverso al ASC. Ejemplos: SE L E CT Nombre, Nombre, IdEmp, FechCont FROM Empleados$ ORDER BY FechCont FechCont DESC
Obtiene un listado de los empleados por orden de antigüedad trabajando en la empresa empezando por los más recientemente incorporados. SE L E CT Nombre, Nombre, IdEmp, Ventas FROM Empleados$ ORDER BY Ventas Ventas DESC
d) e)
Obtiene un listado de los empleados ordenados por volumen de ventas sacando primero los de mayores ventas. También podemos ordenar por varias columnas, en este caso se indican las columnas separadas por comas. Se ordenan las filas por la primera columna de ordenación, para un mismo valor de la primera columna, se ordenan por la segunda columna, etc. La cláusula DESC o ASC se puede indicar para cada columna y así utilizar una ordenación distinta para cada columna. Por ejemplo ascendente por la primera columna y dentro de la primera columna, descendente por la segunda columna. Ejemplos: SE L E CT Región, Región, Ciudad, Ventas FROM Oficinas$ ORDER BY Región, Ciudad
Muestra las ventas de cada oficina, ordenadas por orden alfabético de región y dentro de cada región por ciudad. SE L E CT Región, Región, Ciudad, (Ventas - Objetivo) AS superávit FROM Oficinas$ ORDER BY Región, 3 DESC
Lista las oficinas clasificadas por región y dentro de cada región por superávit, de modo que las de mayor superávit aparezcan las primeras.
6.
SELECCIÓN DE FILAS
A continuación veremos las cláusulas que nos permiten indicar qué filas queremos visualizar. Para ello utilizamos la siguiente sintaxis: [ALL] [DISTINCT] [TOP n [PERCENT] ] WHERE condición condición de selección
111
SISTEMAS DE INFORMACION GERENCIAL
CARLOS ROMERO S.
6.1. LAS CLÁUSULAS DISTINCT / ALL Al incluir la cláusula DISTINCT en la SELECT, se eliminan del resultado las repeticiones de filas. Si por el contrario queremos que aparezcan todas las filas incluidas las duplicadas, podemos incluir la cláusula ALL o nada, ya que ALL es el valor que SQL asume por defecto. Por ejemplo queremos saber los códigos c ódigos de los directores de oficina. SE L E CT Dir Dir FROM Oficinas$ Dir Oficinas$ SE L E CT AL L FROM Lista los códigos de los directores de las oficinas. El director 108 aparece en cuatro oficinas, por lo tanto aparecerá cuatro veces en el resultado de la consulta. SE L E CT DI D I ST STII NC T Dir Dir FROM Oficinas$
En este caso el valor 108 aparecerá una sola vez ya que le decimos que liste los distintos valores de directores.
6.2. LA CLÁUSULA TOP La cláusula TOP permite sacar las n primeras filas de la tabla origen. No elige entre valores iguales, si pido los 25 primeros valores pero el que hace 26 es el mismo valor que el 25, entonces devolverá 26 registros en vez de 25 (o los que sea). Siempre se guía por la columna de RDER BY o ordenación, laPor que aparecequeremos en la cláusula o en sumás defecto la clave ejemplo saber O los dos empleados antiguos de laprincipal empresa.de la tabla. SE L E CT TOP 2 IdEmp, Nombre FROM Empleados$ FechCont ORDER BY FechCont
Lista la identificación y el nombre de los empleados ordenándolos por fecha de contrato, sacando únicamente los dos primeros (serán los dos más antiguos). SE L E CT TOP 2 IdEmp, Nombre FROM Empleados$ ORDER BY FechCont FechCont DESC
En este caso tiene que sacar los dos primeros mayores, pero si nos fijamos en las fechas de contrato tenemos 13/01/2007, 12/10/2006 y 12/10/2006, la segunda fecha es igual que la tercera, en este caso sacará estas tres filas en vez de dos, y sacaría todas las filas que tuviesen el mismo valor que la segunda fecha de contrato. El número de filas que queremos visualizar se puede expresar con un número entero o como un porcentaje sobre el número total de filas que se recuperarían sin la (porcentaje en inglés). cláusula TOP . En este último caso utilizaremos la cláusula TOP n PERCENT (porcentaje SE L E CT TOP 20 PERCENT Nombre Nombre FROM Empleados$ ORDER BY FechCont FechCont
Lista el nombre de los empleados ordenándolos por fecha de contrato, sacando únicamente un 20% del total de empleados. Como tenemos 10 empleados, sacará los dos primeros, si tuviésemos 100 empleados sacaría los 20 primeros.
7.
OBTENCION DE FILAS CON UNA CONDICION DE SELECCIÓN ESPECIFICADA
La cláusula WHERE selecciona únicamente las filas que cumplan con la condición de selección especificada. 112
SISTEMAS DE INFORMACION GERENCIAL
CARLOS ROMERO S.
WHERE condición condición de selección
En la consulta sólo aparecerán las filas para las cuales la condición es verdadera ( TRUE ), ), los valores nulos (NULL ) no se incluyen por lo tanto en las filas del resultado. Cuadro 4.23. Operadores condicionales.
Significado
Operador
Igual quede Distinto Menor que Menor o igual Mayor que Mayor o igual
= < >=
La condición de selección puede ser cualquier condición válida o combinación de condiciones utilizando los operadores lógicos: NOT (no), (no), AN D (y) y OR (o). Para empezar veamos un ejemplo: SE L E CT Nombre Nombre FROM Empleados$ WHERE IdOfic IdOfic = 31
Lista los nombres de los empleados de la oficina 31 SE L E CT Nombre Nombre FROM Empleados$ A ND edad > 40 WHERE IdOfic IdOfic = 31 AND
Lista el nombre de los empleados de la oficina 31 que tengan más de 40 años (identificación de oficina igual a 31 y edad mayor que 40)
8.
CONDICIONES DE SELECCIÓN
Las condiciones de selección son las condiciones que pueden aparecer en la cláusula cl áusula WHERE : (1) el test de comparación, (2) el test de rango, (3) el test de pertenencia a un conjunto, (4) el test de valor nulo y (5) el test de correspondencia con patrón .
8.1. EL TEST DE COMPARACIÓN Compara el valor de una expresión con el valor de otra. La sintaxis es la siguiente: expresión1 [=] [] [=] expresión2 SE L E CT IdEmp, IdEmp, Nombre FROM Empleados$ Ventas > Cuota WHERE Ventas
Lista los empleados cuyas ventas superan su cuota SE L E CT IdEmp, IdEmp, Nombre FROM Empleados$ WHERE YEAR (FechCont) < 2005
Lista los empleados contratados antes del año 2005
113
SISTEMAS DE INFORMACION GERENCIAL
CARLOS ROMERO S.
Cuadro 4.24. Funciones básicas de fecha.
Significado Día de una fecha dada Mes de una fecha dada Año de una fecha dada
Función DAY(fecha) MONTH(fecha) YEAR(fecha)
SE L E CT IdOfic IdOfic FROM Oficinas$ WHERE Ventas Ventas < Objetivo * 0.9
Lista las oficinas cuyas ventas estén por debajo del 90% de su objetivo. Hay que utilizar siempre el punto decimal aunque tengamos definida la coma como separador de decimales. SE L E CT IdOfic IdOfic FROM Oficinas$ WHERE Dir Dir = 108
Lista las oficinas dirigidas por el empleado 108.
8.2. EL TEST DEL RANGO (BETWEEN) si elTiene valorladesiguiente la expresión está comprendido entre los dos valores definidos por expresión1 yExamina expresión2. sintaxis: expresión1 AND expresión2 expresión [NOT] BETWEEN expresión1 Ejemplos: SE L E CT IdEmp, IdEmp, Nombre FROM Empleados$ WHERE Ventas Ventas BETWEEN 20000 20000 AN D 30000
Lista los empleados cuyas ventas estén comprendidas c omprendidas entre 20000 y 30000 SE L E CT IdEmp, IdEmp, Nombre FROM Empleados$ WHERE (Ventas (Ventas >= 20000) AN D (Ventas 7
Cuadro 4.28. Respuesta al ejemplo 1 (b). 1 2 3 4 5 c)
idm 31 32 58 71 74
nombrem López Alández Rubio Zuazo Horacio
categ 8 8 10 10 9
edad 55.5 25.5 35 16 35
Averiguar el nombre de los marineros que han reservado el barco 103. 121
SISTEMAS DE INFORMACION GERENCIAL
CARLOS ROMERO S.
Soluc ución ión Sol SE L E CT M.nombrem M.nombrem FROM Marineros M, Reservas R WHERE M.idm M.idm = R.idm AND R.idb=103
Cuadro 4.29. Respuesta al ejemplo 1 (c).
nombrem Domínguez López Horacio
1 2 3
Una manera equivalente de escribir esta consulta es: nombrem SE L E CT nombrem FROM Marineros, Reservas WHERE Marineros.idm Marineros.idm = Reservas.idm AND idb=103 d)
Averiguar el idm de los marineros que han reservado barcos rojos. Sol Soluc ución ión SE L E CT DI D I ST STII NC T R.idm FROM Barcos B, Reservas R WHERE B.idb B.idb = R.idb AND B.color='rojo'
Cuadro 4.30. Respuesta al ejemplo 1 (d) 1 2 3 e)
idm 22 31 64
Averiguar el nombre de los marineros que han reservado barcos rojos. Soluc ución ión Sol SE L E CT DI D I ST STII NC T M.nombrem M.nombrem FROM Marineros M, Reservas R, Barcos B M.idm = R.idm AN D R.idb = B.idb AN D B.color='rojo' WHERE M.idm
Cuadro 4.31. Respuesta al ejemplo 1 (e). 1 2 3
f)
idm Domínguez Horacio López
Averiguar el color de los barcos alquilados por López.
122
SISTEMAS DE INFORMACION GERENCIAL
CARLOS ROMERO S.
Soluc ución ión Sol SE L E CT DI D I ST STII NC T B.color FROM Marineros M, Reservas R, Barcos B WHERE M.idm = R.idm AN D R.idb = B.idb AN D M.nombrem = 'López'
Cuadro 4.32. Respuesta al ejemplo 1 (f).
idm rojo verde
1 2 g)
Averiguar el nombre de los marineros que han reservado, como mínimo, un barco. Soluc ución ión Sol SE L E CT DI D I ST STII NC T M.nombrem FROM Marineros M, Reservas R WHERE M.idm M.idm = R.idm
Cuadro 4.33. Respuesta al ejemplo 1 (g). 1 2 3 h)
nombrem Domínguez Horacio López
Calcular el incremento de categoría de marinos que han navegado en 2 barcos diferentes el mismo día. Sol Soluc ución ión SE L E CT DI D I ST STII NC T M.nombrem, M.categ+1 AS categ FROM Marineros M, Reservas R1, Reservas R2 WHERE M.idm=R1.idm AND ND R1.fecha=R2.fecha M.idm=R1.idm AN D M.idm=R2.idm A AND A ND R1.idb R2.idb
Cuadro 4.34. Respuesta al ejemplo 1 (h). 1 i)
Nombrem Domínguez
Categ 8
Averiguar la edad y los nombres de los marineros cuyo nombre comienza con B, acaba por O y tiene como mínimo, seis caracteres.
Solución SE L E CT M.nombrem, M.edad FROM Marineros M WHERE M.nombrem M.nombrem L I K E 'B_%___O' 'B_%___O'
123
SISTEMAS DE INFORMACION GERENCIAL
CARLOS ROMERO S.
Cuadro 4.35. Respuesta al ejemplo 1 (i). 1 2)
nombrem Benito
edad 63.5
Con la base de datos denominada , creada en el capitulo anterior (suplemento 3) y con sus tablas denominadas: Clientes$, Empleados$, Oficinas$, Productos$ y Pedidos$. Crear consultas redactando sentencias en SQL, de acuerdo a lo que se pide en cada ejercicio siguiente: a) Obtener una lista de todos t odos los productos indicando para cada uno su idfab, idproducto, descripción, precio y precio con IGV incluido inclui do (precio anterior aumentado en un 16%). Soluc ución ión: Sol
IdFab, IdProducto, Descripcion, Precio, (Precio * 1.16) AS A S igv_incluido SE L E CT IdFab, FROM Productos$ Los paréntesis son opcionales, también se puede poner como fórmula de cálculo: precio + precio * 16 /100. b)
De cada pedido queremos saber su número de pedido, fab, producto, cantidad, precio unitario e importe. Solución: Soluc ión: SE L E CT IdPedido, IdPedido, IdFab, IdProducto, Cant, Importe / Cant A ASS precio_unitario, Importe FROM Pedidos$
c)
Obtener la lista de los clientes agrupados por código de representante asignado, visualizar todas la columnas de la tabla.
Solución: SE L E CT * * FROM Clientes$ ORDER BY RepClie RepClie
d)
Obtener las oficinas ordenadas por orden alfabético de región y dentro de cada región por ciudad, si hay más de una oficina en la misma ciudad, aparecerá primero llaa que tenga el número de oficina mayor. Soluc ución: ión: Sol SE L E CT * * FROM Oficinas$ ORDER BY Región, Ciudad, IdOfic DESC
e) Obtener los pedidos ordenados por fecha de pedido. Soluc Solucii ón: SE L E CT * * FROM Pedidos$ ORDE R BY FechaPedido FechaPedido 124
SISTEMAS DE INFORMACION GERENCIAL
f)
CARLOS ROMERO S.
Listar las cuatro líneas de pedido más caras (las de mayor importe). Soluc ución: ión: Sol SE L E CT TOP 4 * FROM Pedidos$ ORDER BY Importe Importe DESC
Para obtener las máslascaras que ordenar por importe y enqueremos orden descendente para que aparezca más tenemos caras primero. Además como sólo las cuatro primeras utilizamos la cláusula TOP 4. 4. g)
Obtener las mismas columnas que en el ejercicio 2 pero sacando unicamente las 5 líneas de pedido de menor precio unitario. Soluc ución ión: Sol SE L E CT TOP 5 numpedido, fab, producto, cant, importe/cant ASS precio_unitario, importe A FROM pedidos ORDER BY 5 5
Ordenamos los pedidos por precio unitario utilizando el nº de columna, el precio unitario la quinta columna dentro de la lista de selección. En este caso la ordenación debe ser es ascendente. h)
Listar toda la información de los pedidos de marzo. Soluc ución: ión: Sol SE L E CT * * FROM pedidos MONT NTH H (fechapedido) = 3 WHE RE MO M MONT ONTH H (fecha) devuelve el número de mes de la fecha.
i)
Listar los números de los empleados que tienen una oficina asignada. Sol Soluc ución ión: SE L E CT numemp numemp FROM empleados oficina I S NOT NOT NULL WHERE oficina
Los empleados que tienen asignada una oficina son los que tienen un valor en el campo oficina. j)
Listar los números de las oficinas que no tienen director. Soluc ución ión: Sol SE L E CT oficina oficina FROM oficinas NULL WHERE dir dir I S NULL
El campo dir es el que nos dice quién es el director de la oficina. 125
SISTEMAS DE INFORMACION GERENCIAL
k)
CARLOS ROMERO S.
Listar los datos de las oficinas de las regiones del norte y del este (tienen que aparecer primero las del norte y después las las del este). Soluc ución ión: Sol SE L E CT * * FROM oficinas WHERE region region I N ('norte','este') ('norte','este') ORDER BY region DESC Los valores se ponen entre comillas simples si mples o dobles ya que son valores alfanuméricos. También se puede poner WHERE region region = 'norte' OR region = 'este'. Ordenamos desc para que primero aparezcan las del norte.
l)
Listar los empleados de nombre Julia. Sol Soluc ución: ión: SE L E CT * * FROM empleados WHERE nombre nombre L I K E 'Julia 'Julia *'
Los empleados cuyo nombre empiece por Julia, observar que antes del * hay un espacio en blanco para forzar a que el siguiente carácter después de la a sea un blanco y no coja por ejemplo Julián. m)
Listar los productos cuyo idproducto acabe en x. Soluc ución: ión: Sol SE L E CT * * FROM productos WHERE idproducto L I K E '*x' '*x'
3)
¿Cuál es la cuota media y las ventas medias de todos los empleados? Solucii ón: Soluc A V G (Cuota) AS CuotaMedia, AV G (Ventas) AS A S VentasMedia SE L E CT AV FROM Empleados$
Cuadro 4.36. Resultado del problema ilustrativo 3
Sale una única fila con el resultado deseado. Siempre que se utilicen expresiones o funciones en la lista de selección, queda mejor utilizar un alias de columna para que ese aparezca en el encabezado del resultado. 4)
Hallar el importe medio de pedidos, el importe total de pedidos y el precio medio de venta (el precio de venta es el precio unitario en cada pedido). Soluc Solucii ón:
126
SISTEMAS DE INFORMACION GERENCIAL
CARLOS ROMERO S.
SELECT Importe)) AS ImporteMedio AS ImporteMedio,, SUM (Importe Importe)) AS AS ImporteTotal ImporteTotal,, SELECT AVG (Importe AVG (Importe Importe//Cant Cant)) AS PrecioVentaMedio AS PrecioVentaMedio FROM FROM Pedidos$ Pedidos$ Cuadro 4.37. Resultado del problema ilustrativo 4
5)
El precio medio de venta es la media aritmética de los precios unitarios de cada pedido. El precio unitario se calcula dividiendo el importe del pedido por la cantidad del pedido: AVG VG (Importe/Cant). Importe/Cant, por lo que ponemos A Hallar el precio medio de los productos del fabricante ACI. So Soluc lucii ón: SE L E CT AV A V G (Precio Precio)) AS A S PrecioMedioACI FROM Productos$ WHERE IdFab IdFab = 'aci' 'aci'
Cuadro 4.38. Resultado del problema ilustrativo 5
6)
Ahora no nos interesan todos los productos sino únicamente los del fabricante ACI, por lo que añadimos la cláusula WHERE para para que antes de calcular la media, elimine del origen de datos los registros que no cumplan la condición. Hallar en qué fecha se realizó el primer pedido (suponiendo que en la tabla de pedidos tenemos todos los pedidos realizados hasta la fecha). Soluc Solucii ón:
SELECT MIN SELECT MIN((FechaPedido FechaPedido)) AS PrimerPedido AS PrimerPedido FROM FROM Pedidos$ Pedidos$ Cuadro 4.39. Resultado del problema ilustrativo 6
7)
La fecha del primer pedido es la fecha más antigua de la tabla de pedidos. Hallar cuántos pedidos hay de más de 25000 nuevos soles. Soluc lucii ón: So
SELECT COUNT SELECT COUNT(*) (*) AS AS CuantosPedidosM CuantosPedidosMayores ayores FROM Pedidos$ FROM Pedidos$ WHERE WHERE Importe Importe > 25000 Cuadro 4.40. Resultado del problema ilustrativo 7
127
SISTEMAS DE INFORMACION GERENCIAL
8)
CARLOS ROMERO S.
(IdPedido) o cualquier nombre de columna que no Se podía haber utilizado también COUNT (IdPedido) (*) es mejor por ser más rápido (la diferencia se pueda contener valores nulos, pero COUNT (*) nota con tablas muy voluminosas). Saber cuántas oficinas tienen empleados con ventas superiores a su cuota, no queremos saber cuáles sino cuántas hay. So Soluc lucii ón:
Consulta: distintas_oficinas SE L E CT DISTINCT IdOfic FROM Empleados$ WHERE Ventas Ventas > Cuota Cuadro 4.41. Resultado del problema ilustrativo 8
Consulta: sumaria SELECT COUNT COUNT(*) (*) AS CuantasOficinas AS CuantasOficinas SELECT FROM Oficinas$ FROM Oficinas$
P ROPUESTOS OS 14. PROBLEMAS PROPUEST 1)
Se tiene una base de datos de películas reflejada por las siguientes tablas: Película (título_película, año_película, duración, nombre_estudio) Estrella (nombre_estrella, dirección_estrella, sexo, fecha_nacimiento) f echa_nacimiento) Estudio (nombre_estudio, dirección_estudio) Protagoniza (título_película, año_película, nombre_estrella) Se pide realizar las siguientes consultas en SQL (Se supone que todos los datos necesarios se encuentran almacenados en las tablas): 1.1) Encontrar la dirección de los estudios MGM. 1.2) Encontrar todas las estrellas que participaron en películas realizadas en el 2010 o en alguna película que contenga la ppalabra alabra “Amor” “Amor” en el título. 1.3) ¿Quién fue la estrella masculina de “El nombre de la rosa”? 1.4) ¿Qué películas tienen mayor duración que “Lo que el viento se llevó”? 1.5) Encontrar el título y la duración de todas las películas producidas por los estudios Disney en el año 2020, ordenando la salida por su duración. 1.6) Encontrar todas las estrellas que son hombres o viven en Malibu (tienen Malibu como parte de su dirección). 1.7) ¿Qué estrellas distintas aparecen en las películas producidas por la MGM en el 2008? (Si una aparece varias veces, mostrarla sólo una vez). 1.8) Encontrar la suma de la duración de todas las películas de cada estudio.
2)
Dada una base de datos de ordenadores e impresoras con las siguientes tablas:
128
SISTEMAS DE INFORMACION GERENCIAL
CARLOS ROMERO S.
Producto (fabricante, modelo, tipo) PC (modelo, velocidad, ram, hd, cd, precio) Impresora (modelo, color, tipo, precio) Realizar en SQL las siguientes consultas: 2.1) Encontrar el modelo, velo velocidad cidad y tamaño de ddisco isco duro (hd) de todas las PC’s cuyo precio sea inferior a $1600. 2.2) Repetir la consul consulta de (a), pero cambiando el nombre a las columnas velocidad como Megaherzios y hdtacomo Gigabytes. 2.3) Encontrar todas las filas de la tabla de Impresoras Impresoras que son en color. El valor de la columna color es booleano con los valores ’V’ y ’F’. 2.4) Encontrar la velocidad media de las PC’s. 2.5) Decir los fabricantes y la velocidad de las PC’s con disco duro de tamaño mayor o igual a 1 Gigabyte. 2.6) Encontrar los fabricantes de las PC’s con velocidad superior a 160 MHz. 3)
Dadas las siguientes tablas, dar una expresión SQL para cada una de las siguientes consultas: Vive (nombre, calle, ciudad) Trabaja (nombre, compañía, salario) Situada (compañía, ciudad) Dirige (nombre, nombre_director) 3.1) Encontrar el nom nombre bre y la ciudad de todos los empleados que trabajan en El Corte Inglés. 3.2) Encontrar todos los empleados que viven en la m misma isma ciudad que la compañía en la que trabajan. 3.3) Encontrar el sa salario lario y la co compañía mpañía de todos los ddirectores. irectores. 3.4) Encontrar a todos los empleados que viven en la m misma isma ciudad y en la misma calle que su director.
4)
Dadas las siguientes tablas relacionales: Cigarrillo (marca, filtro, nombre_fabricante, precio) Estanco (CIF, nombre, dirección) Fabricante (nombre, país) Compras (CIF, marca, filtro, año, cantidad, precio) Ventas (CIF, marca, filtro, año, cantidad, precio) Plantear las siguientes preguntas utilizando SQL: 4.1) 4.2) 4.3) 4.4)
5)
Obtener todas las marcas de cigarrillos extranjeros. Obtener el total de compras de cigarrillos con filtro filt ro (filtro = ’S’ ) realizadas por marca.
Obtener una relación com completa pleta de todas las comp compras ras y ventas rea realizadas. lizadas. Obtener la relación de estancos que no han vendido cigarrillos ’Ducados’ con filtro.
Dadas las siguientes tablas relacionales: Persona (DNI, nombre, apellidos, DNI_cabeza, calle, número, escalera, planta, puerta) Piso (calle, número, escalera, planta, puerta, metros, código_postal) Zona (código_postal, nombre) Persona (DNI, calle, número, escalera, planta, puerta, fecha_compra) Plantear las siguientes preguntas utilizando SQL: 5.1) Obtener el DNI de todos los prop propietarios ietarios de una casa en la zona Centro Centro.. 129
SISTEMAS DE INFORMACION GERENCIAL
CARLOS ROMERO S.
5.2) Obtener el DN DNI, I, nombre y apellidos ddee los propi propietarios etarios de un ppiso iso en la calle Dámaso, número 20. 5.3) Obtener todos los pisos de más de 50m2 cuyo propietario tiene el DNI número 44.351.312. 5.4) Obtener el número de personas qque ue viven en el número 14 de Felipe II. 5.5) Obtener eell tamaño medio de las casas de la zona Latina. 6)
Se dispone de la tabla ALUMNOS, con los datos de los alumnos que están matriculados en la
Universidad. Exped nombre 123456 Juan Miguel Soler Balero 654321 Laura Gómez Fernández 765432 Beatriz Martínez Pérez 987654 Diego Marín Llorente 445544 Juan Francisco Cano 223322 Raquel Riquelme Rubio 334455 Cristina Sánchez Bermejo 998877 Pedro Jesús Rodríguez 334400 Gema Rubio Calero 993322 Javier Ramírez Rodríguez 554411 Joaquín Hernández
lugar Trujillo Piura Trujillo Chiclayo Trujillo Piura Trujillo Chiclayo Trujillo Piura Piura
fech_nac 13-10-95 09-10-94 23-05-93 11-03-90 28-01-92 05-04-93 17-09-94 09-10-90 23-05-93 21-09-92 15-12-94
dirección Almagro 147 Av. Grau 1375 Bolognesi 639 E. Aguirre 387 Colón 497 América 693 Bolognesi 713 Lampa 474 Unión 695 Sullana 849 Catacaos 385
curso 1 2 3 1 4 1 1 2 3 1 2
nivel Ms Ms Ms Br Ms Br Dr Dr Ms Br Br
falta 15 25 5 34 13 7 1 11 0 19 14
A partir de esta tabla realiza las siguientes consultas en SQL. 6.1) Muestra todos los datos de todos los alumnos. 6.2) Muestra eell nombre, localidad y fecha de nacimiento ddee todos los aalumnos. lumnos. 6.3) Muestra el nom nombre bre de todos los alumnos. En el res resultado ultado de la consulta, la ccolumna olumna “Nombre” debe aparecer con la etiqueta “Nombre y apellidos” (ALIAS DE
6.4) 6.5) 6.6) 6.7) 6.8) 6.9) 6.10) 6.11) 6.12) 6.13) 6.14) 6.15) 6.16) 6.17)
COLUMNAS). Obtén el nom nombre bre y el nú número mero de faltas multiplicado por 2 de todos los alumnos (COLUMNAS CALCULADAS). En el resultado de la consulta, la columna falta debe aparecer con la etiqueta “Faltas de asistencia” (ALIAS DE COLUMNAS) Consulta los datos de los alumnos que son de Piu Piura. ra. Obtén los datos de los alumnos que son de Trujillo o Ch Chiclayo. iclayo. Obtén los datos de los alum alumnos nos que son de Piura y están en el pr primer imer curso ddee Ms (maestría). Muestra losdealumnos Piura, iura, están en segundo curso de Br (Bachillerato) y tienen más 10 faltas.que son de P Obtén los datos de aquellos alum alumnos nos que son de Trujillo ordenados por nom nombre. bre. Obtén los datos de todos los alumnos ordenados por nivel, y dentro de cada nivel por curso. Muestra los datos de aquellos alumnos que tengan más de 10 faltas faltas en primer o segundo curso. Muestra los datos de todos aquellos alumnos que tengan menos de 10 faltas en 3º o 4º curso y además sean de Chiclayo. Obtén con una consulta todos los cursos que hay ssin in repeticiones (DISTIN (DISTINCT). CT). Obtén los datos de los alum alumnos nos que no tengan 10 faltas en 1º de Dr (Doctorado). Muestra los datos de aquellos alumnos cuyo nombre empiece por la letra ‘B’. Con una consulta obtén los alum alumnos nos que son de Trujillo y cuyo nombre nombre termina con una letra ‘O’. Muestra los datos de todos aquellos alumnos que están en 1º curso de Dr (Docto (Doctorado) rado) y
tienen una letra ‘U’ en la segunda posición del nombre. 6.18) Obtén los datos de los l os alumnos cuya columna “Faltas” es nula.
130
SISTEMAS DE INFORMACION GERENCIAL
CARLOS ROMERO S.
6.19) Muestra los datos de aquellos alumnos que tienen entre 10 y 20 faltas (BETWEEN). Ordena el resultado por nombre. 6.20) Muestra los datos de los aalumnos lumnos que tienen entre 10 y 20 20 faltas y además son de Piura. 6.21) Muestra los datos de los alumnos que tienen entre 10 y 20 faltas, son de Chiclayo y están matriculados en 1º de Maestría. 6.22) Con una consulta muestra los datos de los alumnos cuyas faltas sean menores que 10 y mayores que 20. 6.23) Muestra los datos de los alumnos cuya fecha de nacimiento comprenda los años 1993 y 1994. Ordena el resultado por nombre. 6.24) Muestra los datos de los alumnos que sean de primer o segundo curso (no importa que sean de Bachiller, Maestria o Doctorado). Utiliza el operador IN. 6.25) Obtén los datos de aquellos alumnos que sean de tercer o cuarto curso y sean de Trujillo. Utiliza el operador IN. 6.26) Muestra los datos de los alumnos que no sean de Doctorado, ordenados por curso y por nombre descendentemente. Utiliza el operador IN. 6.27) Muestra los datos de los alumnos que sean de primer o segundo curso y no sean de Bachiller. Ordena el resultado por nombre. 6.28) Obtén los datos de los alumnos cuyo nombre empiece por la letra ‘J’, que tengan más de 10 faltas y no sean de Bachiller. Ordena el resultado por curso, y dentro de cada curso, por nombre. 6.29) Con una consulta obtén el expediente (exped), nombre, curso y nivel de todos los alumnos ordenado por curso, nivel ascendentemente y nombre descendentemente cuyo nivel no sea ‘BACHILLER’. ‘BACHILLER’. 6.30) Con una consulta obtén el nombre de cada alumno en mayúscula cuya localidad sea Chiclayo. 6.31) Muestra el nombre de cada alumno en mayúscula y la localidad a la que pertenecen en minúscula, ordenados por localidad. 6.32) Con una consulta concatena el nombre de cada alumno y la localidad y sustituye ‘Br ’ por ‘Bachillerato’. ‘Bachillerato’. 6.33) Con una consulta obtén el nomb nombre re de cada alumno y la longitud de la cadena “Nombre”. 6.34) Con una consulta obtén el nom nombre, bre, año de nacimiento y mes de nacimiento nacimiento de cada uno de los alumnos. 6.35) Con una consulta muestra el nombre y edad de cada uno de los alumnos (la edad se calcula restando al año de nacimiento 2013) 7)
Crear la base de datos Negocio, hacer una nueva consulta y en ella escribir la instrucción y el resultado para los siguientes si guientes casos: a) b) c) d) e) f) g) h) i) j) k)
Mayor entero inferior o igual a: 123, 123.45, 1.2345E2, -123.45, -1.2345E2 y $123.45. Menor entero superior o igual a: 123.45, -123.45, 1.2345E2, -1.2345E2 y $123.45. Valor absoluto de: 123.45, -123.45 y $123.45. Signo de: 123.45, -123.45 y 0. Raíz cuadrada de: 121 y 123.45. El número 12 elevado a las potencias: 3, 5 y 0.6. Cuadrado de 17 y 19. Valor de pi. Convertir 1.5709 radianes a grados Convertir 30, 45 y 60 grados a radianes Encontrar el seno, coseno, tangente y cotangente de: 0.523599 0.785398 y 1.047198 radianes respectivamente. l) Encontrar el arcoseno, arcocoseno y arcotangente de: 0.5, 0.707 y 0.866 respectivamente.
8)
En la base de datos Negocio, crearylallenar tablalos denominada: Compras:Float, Fecha Fecha:DateTime), :DateTime), datos de laClientes(NumCliente:Integer, siguiente manera:
131
SISTEMAS DE INFORMACION GERENCIAL
CARLOS ROMERO S.
NumCliente 101 103 108 109 111 113
Compras 320.00 240.00 490.00 120.00 560.00 450.00
Fecha 10/07/2009 21/08/2009 05/09/2009 17/10/2009 26/12/2009 11/01/2010
114 116
NULL 240.00
18/02/2010 21/04/2010
Responder a las siguientes consultas: a) b) c) d) e) f) 9)
Contar el número de líneas asignadas no nulas a la columna Compras Sumar los valores asignados a la columna Compras Promedio de los valores asignados a la columna Compras Valor mínimo y máximo de los l os valores asignados a la columna Compras Desviación estándar de la muestra y de la población de los valores asignados a la columna Compras Varianza de la muestra y de la población de los valores asignados a la columna Compras
En la tabla Clientes de la base de datos Negocio realizar una nueva consulta y responder a las siguientes consultas: a) b) c) d)
Reportar la fecha y hora del sistema Reportar el número del día de los valores asignados en la columna Fecha Reportar el número del mes de los valores asignados en la columna Fecha Reportar el año de los valores asignados en la columna Fecha
10) MNO Incorporated está considerando adquirir sus propias líneas arrendadas para manejar sus comunicaciones de voz y datos entre sus 14 sitios de distribución, en tres regiones a lo largo del país. Se espera que la carga máxima de comunicaciones para cada sitio este en función del número de conexiones telefónicas y del número de computadoras de ese sitio. Se le ha pedido que recopile esta información, como se muestra en la primera tabla, y que la coloque en un archivo de base de datos. Ubicación del sitio Boston Nueva York Richmond Atlanta Detroit Cincinnati Nueva Orleans Chicago San Luis Houston Denver Los Ángeles San Francisco Seattle
Región Este Este Este Este Este Este Central Central Central Central Oeste Oeste Oeste Oeste
Líneas de teléfono 228 468 189 192 243 156 217 383 212 238 202 364 222 144
Computadoras 95 205 84 88 97 62 58 160 91 88 77 132 101 54
132
SISTEMAS DE INFORMACION GERENCIAL
a) b)
CARLOS ROMERO S.
Elabore en una tabla de base de datos con una estructura apropiada para almacenar los datos siguientes. Introduzca los siguientes registros e imprima una lista l ista de su tabla. Los resultados de encuestas sugieren que el tráfico pesado al sitio, y desde él, será alrededor de 2 kilobits por segundo para cada línea de teléfono, más 10 kilobits por segundo para cada computadora. Elabore un reporte que muestre la demanda pico estimada para el sistema de telecomunicaciones en cada sitio, en kilobits. Elabore un segundo reporte agrupado por regiones, que muestre subtotales regionales y un total para el sistema como un todo.
133
View more...
Comments