Suplemento 4

November 9, 2022 | Author: Anonymous | Category: N/A
Share Embed Donate


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

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF