Você está na página 1de 7

Universidad Nacional Jorge Basadre Grohmann Facultad de Ingeniera / E.A.P.

de Ingeniera en Informtica y Sistemas Asignatura: Base de Datos y Sistemas Distribuidos Periodo: 2011

Prctica de Laboratorio: Tema: Consultas y mantenimiento


Objetivos: Aprender a realizar consultas bsica y avanzadas. Lectura de Columnas, Lectura de Filas Filtrar datos. Relacionar tablas Generar resmenes de datos. Generar subconsultas Enviar los resultados de una consulta a otro archivo Eliminar filas de una tabla Actualizacin de filas de una tabla

I.- Fundamento Terico:


Comandos de SQL. SQL proporciona comandos del lenguaje de definicin de datos (DDL) y del lenguaje de manipulacin de datos (DML). Aunque existen algunas reas solapadas, los comandos DDL permiten crear y definir nuevas bases de datos, campos e ndices, mientras que los comandos DML le permiten generar consultas para ordenar, filtrar y extraer datos de la base de datos. DDL: Las instrucciones DDL en SQL son expresiones generadas en torno a los siguientes comandos. Comando Descripcin CREATE Utilizado para crear nuevas tablas, campos e ndices. DROP Utilizado para eliminar tablas e ndices de la base de datos. ALTER Utilizado para modificar tablas agregando campos o cambiando la definicin de los campos. DML: Las instrucciones DML son expresiones generadas en torno a los comandos siguientes. Comando Descripcin SELECT Utilizado para consultar registros de la base de datos que satisfagan un criterio determinado. INSERT Utilizado para cargar lotes de datos en la base de datos en una nica operacin. UPDATE Utilizado para modificar los valores de determinados campos y registros. DELETE Utilizado para quitar registros de una tabla de base de datos. DCL: Las instrucciones DCL son generadas en torno a los comandos siguientes. Comando Descripcin GRANT Utilizado para crear una entrada en el sistema de seguridad y permite al usuario usar la base de datos REVOKE Utilizado para quitar un permiso otorgado o denegado previamente de un usuario de la base datos actual. DENY Utilizado para denegar un permiso de una cuenta de seguridad en la base de datos actual. Clusulas SQL. Las clusulas sql son condiciones de modificacin utilizadas para definir los datos que desea seleccionar o manipular. La siguiente tabla muestra las clusulas que puede utilizar.

Clusula
FROM WHERE seleccionar. GROUP BY HAVING ORDER BY

Descripcin
Utilizada para especificar la tabla de la cual se van a seleccionar los registros. Utilizada para especificar las condiciones que deben cumplir los registros que se van a Utilizada para separar los registros seleccionados en grupos especficos. Utilizada para expresar la condicin que debe satisfacer cada grupo. Utilizada para ordenar los registros seleccionados de acuerdo con un orden especificado.

SELECT : Crea una consulta de una o mas tablas. Recupera las filas (datos) desde una o mas tablas de una base de datos. Sintaxis Simple: SELECT lista_de_columnas Msc. Edgar Taya Acosta-etayaa@unjbg.edu.pe Pgina: 1

Universidad Nacional Jorge Basadre Grohmann Facultad de Ingeniera / E.A.P. de Ingeniera en Informtica y Sistemas Asignatura: Base de Datos y Sistemas Distribuidos Periodo: 2011

FROM lista_de_tablasWHERE condiciones_de_bsqueda Ejemplo 1: SELECT * FROM cliente Ejemplo 2: SELECT Articulo.Cod_articulo, articulo.nom_articulo FROM Articulo WHERE Articulo.stk_minimo < 10 Sintaxis MS-SQL : SELECT [ALL | DISTINCT] select_list [INTO [new_table_name]] [FROM {table_name | view_name}[(optimizer_hints)] [[, {table_name2 | view_name2}[(optimizer_hints)] [..., {table_name16 | view_name16}[(optimizer_hints)]]] [WHERE clause] [GROUP BY clause] [HAVING clause] [ORDER BY clause] [COMPUTE clause] [FOR BROWSE] Sintaxis ANSI-SQL: SELECT [ALL | DISTINCT] Elemento_Seleccin [AS Nombre_Columna] [, Elemento_Seleccin [AS Nombre_Columna] ...] FROM Tabla [Alias] [[INNER | LEFT [OUTER] | RIGHT [OUTER] | FULL [OUTER] JOIN Tabla [Local] [ON Tabla [Alias].Nombre_Columna = Tabla [Alias].Nombre_Columna [INTO Destino] [WHERE CondicinCombinacin [AND CondicinCombinacin ...] [AND | OR CondicinFiltro [AND | OR CondicinFiltro ...]]] [GROUP BY ColumnaGrupo [, ColumnaGrupo ...]] [HAVING CondicinFiltro] [UNION [ALL] ComandoSELECT ] [ORDER BY Elemento_Orden [ASC | DESC] [, Elemento_Orden [ASC | DESC] ...]] Ejemplo: A. Simple SELECT: todas las filas, todas las columnas SELECT * FROM cliente B. Simple SELECT: subconjunto de Columnas, todas las filas SELECT cod_cliente, nom_cliente, ruc_cliente FROM cliente C. Simple SELECT: Subconjunto de filas, Subconjunto de Columnas SELECT cod_articulo, total = sum (pu_articulo) FROM articulo WHERE pu_articulo < $10000 AND stk_minimo_articulo IS NOT NULL

D. SELECT con clausulas GROUP BY, COMPUTE, y ORDER BY


SELECT cod_articulo, des_articulo, pu_articulo, Unidad_Medida_Articulo FROM articulo WHERE pu_articulo IS NOT NULL ORDER BY Unidad_Medida_Articulo DESC COMPUTE AVG(pu_articulo) BY Unidad_Medida_Articulo E. Todas las filas con Computed Sums SELECT nro_boleta, cod_articulo, precio_unitario FROM detalle_boleta COMPUTE SUM(precio_unitario) Msc. Edgar Taya Acosta-etayaa@unjbg.edu.pe Pgina: 2

Universidad Nacional Jorge Basadre Grohmann Facultad de Ingeniera / E.A.P. de Ingeniera en Informtica y Sistemas Asignatura: Base de Datos y Sistemas Distribuidos Periodo: 2011

F. Crear un tabla temporal con SELECT INTO SELECT * INTO #ArtParaPedir FROM articulo WHERE stk_actual_articulo < stk_minimo_articulo go SELECT des_articulo FROM ArtParaPedir go

G. Crear una tabla Permanente con SELECT INTO


SELECT * INTO ArticulosCaros FROM articulo WHERE pu_articulo > $25 go

OR pu_articulo < $200

H. Optimizar Hints: TABLOCK y HOLDLOCK


BEGIN TRAN SELECT count(*) FROM t1 (TABLOCK HOLDLOCK) END TRAN

I. Optimizar Hints: Usando el Nombre de un Index


This example shows how to force the optimizer to use a nonclustered index to retrieve rows from a table. SELECT cod_proveedor, nom_proveedor, tel_proveedor FROM proveedor (INDEX = nom_proveedor) WHERE nom_proveedor = 'Paracas S.A.'

J. Optimizando Hints: Forzando a explorar una Tabla


SELECT nro_boleta, cod_cliente, fec_boleta FROM BoletaVenta (index = 0) WHERE fec_boleta > '10/1/1998' Nota:
INNER JOIN especifica que el resultado de la consulta contenga slo filas para una tabla con la que coincidan una o varias filas en otra tabla. LEFT [OUTER] JOIN especifica que el resultado de la consulta contenga todas las filas de la tabla a la izquierda de la palabra clave JOIN y slo las filas que concuerden procedentes de la tabla a la derecha de la palabra clave JOIN. RIGHT [OUTER] JOIN especifica que el resultado de la consulta contenga todas las filas desde la tabla hasta la derecha de la palabra clave JOIN y slo las filas que concuerden desde la tabla hasta la izquierda de la palabra clave JOIN. FULL [OUTER] JOIN especifica que el resultado de la consulta contenga todas las filas, concuerden o no, de ambas tablas.

II.- Practica Primeramente verificar que las tablas contengan los datos de las practica anterior Lectura de columnas seleccionadas de una tabla 2.1.1. Lectura de todas las columnas de una tabla - Ejecutar una consulta que muestre todos los datos de la tabla proveedores SELECT * FROM proveedor 2.1.2. Consultando las columnas Seleccionadas - Efectuar una consulta que muestre, Ruc, nombre y telfono de cada cliente

2.1.3. Cambiando los ttulos de las columnas - Efectuar la consulta anterior de manera que muestre los siguientes ttulos: RUC, Nombre y Telfono - Realice una consulta que calcule el importe de cada artculo vendido 2.1.4. Obteniendo columnas calculadas o computadas - Efectuar una consulta que muestre el cdigo, nombre y telfono del cliente, pero en una sola columna Lectura de filas seleccionadas de una tabla 2.2.1. Seleccionando filas en base a comparaciones - Obtener una lista de todas las ciudades cuyo DDN sea 054 SELECT * FROM ciudad Msc. Edgar Taya Acosta-etayaa@unjbg.edu.pe Pgina: 3

Universidad Nacional Jorge Basadre Grohmann Facultad de Ingeniera / E.A.P. de Ingeniera en Informtica y Sistemas Asignatura: Base de Datos y Sistemas Distribuidos Periodo: 2011

WHERE cod_ddn = '054' 2.2.2. Seleccionado filas en base a rangos - Obtener un listado de todas las ventas realizadas entre el 1 de enero y entre 20 de abril de 1999 SELECT * FROM BoletaVenta WHERE fec_boleta BETWEEN '01/01/99' AND '20/04/99' - Realice una consulta que muestre las ventas realizadas en el mes de enero y febrero de ao 1999 2.2.3. Seleccionado filas en base a listas - Obtener el ruc y el nombre de todos los proveedores cuyo cdigo de la ciudad donde residen sea 002 o 007 SELECT ruc_proveedor, nom_proveedor FROM proveedor WHERE cod_ciudad IN ('02','07') 2.2.4. Seleccionado filas en base a cadena de caracteres - Obtenga el cdigo y nombre de todos los clientes cuyo nombre contenga la palabra UNJBG SELECT cod_cliente, nom_cliente FROM cliente WHERE nom_cliente LIKE '%UNJBG%' - Realice una consulta que muestre todos los artculos cuyo nombre empiece con la letra D 2.2.5. Seleccionado filas y eliminando los duplicados de la seleccin

- Obtener un listado de todos artculos vendidos (solo muestre el cdigo) en las boletas
SELECT DISTINCT cod_articulo FROM detalle_boleta Ordenando los resultados 2.3.1. Obtener la lista de clientes mostrando el nombre y Ruc, la lista deber estar ordenado por Ruc. 2.3.2. Obtener la lista de los datos de detalle de boleta, ordene la lista por cantidad, cdigo de articulo SELECT * FROM detalle_boleta ORDER BY Cantidad_vendida, cod_articulo Generacin de resmenes 2.4.1. Usando funciones resumen COUNT - Averige cuntas artculos existen? SELECT COUNT(*) FROM articulo - Cuntos artculos han sido vendidos?. SELECT COUNT(DISTINCT cod_articulo) FROM detalle_boleta 2.4.2. Usando GROUP BY y HAVING. Uso de COMPUTE BY - Cuntos proveedores hay en cada ciudad? SELECT cod_ciudad, nro_proveedores = COUNT(*) FROM proveedor GROUP BY cod_ciudad - Qu boletas de venta tienen por lo menos 2 artculos vendidos? SELECT nro_boleta, nro_articulos_vendidos = COUNT(*) FROM detalle_boleta GROUP BY nro_boleta HAVING COUNT(*) >= 2 - Realice una consulta que calcule la suma total de los importes de cada detalle de boleta SELECT nro_boleta, cod_articulo, TotalImporte=Cantidad_Vendida * Precio_Unitario FROM detalle_boleta ORDER BY nro_boleta COMPUTE SUM(Cantidad_Vendida * Precio_Unitario) BY nro_boleta - Haga una consulta que permita saber Cuntas veces un artculo ha sido vendido?. Lectura de datos de tablas relacionadas 2.5.1. Usando INNER JOIN - Obtener un listado de todos los artculos vendidos indicando el cdigo y nombre del articulo. Usando sintaxis ANSI (Estandar) SELECT detalle_boleta.cod_articulo, articulo.des_articulo FROM Detalle_boleta INNER JOIN Articulo Msc. Edgar Taya Acosta-etayaa@unjbg.edu.pe Pgina: 4

Universidad Nacional Jorge Basadre Grohmann Facultad de Ingeniera / E.A.P. de Ingeniera en Informtica y Sistemas Asignatura: Base de Datos y Sistemas Distribuidos Periodo: 2011

ON detalle_boleta.cod_articulo = articulo.cod_articulo Usando sintaxis MS-SQL SELECT detalle_boleta.cod_articulo, articulo.des_articulo FROM Detalle_boleta, Articulo WHERE detalle_boleta.cod_articulo = articulo.cod_articulo 2.5.2. Usando CROSS JOIN - Obtenga todas las combinaciones posibles para las tablas boleta venta y detalle de boleta Usando sintaxis ANSI (Estandar) SELECT boletaventa.*, detalle_boleta.* FROM BoletaVenta CROSS JOIN Detalle_boleta Usando sintaxis MS-SQL SELECT boletaventa.*, detalle_boleta.* FROM BoletaVenta, Detalle_boleta 2.5.3. Usando OUTER JOIN: Nota: Right Outer Join (*=) y Left Outer Join (=*)

Usando sintaxis ANSI (Estandar) SELECT articulo.des_articulo, detalle_boleta.cantidad_vendida FROM Detalle_Boleta RIGHT OUTER JOIN Articulo ON articulo.cod_articulo = detalle_boleta.cod_articulo Usando sintaxis MS-SQL SELECT articulo.des_articulo, detalle_boleta.cantidad_vendida FROM Detalle_Boleta, Articulo WHERE articulo.cod_articulo *= detalle_boleta.cod_articulo

- Obtener un listado de los artculos vendidos indicando la nombre y la cantidad vendida de cada uno. La lista debe incluir los artculos que no registran ventas

Realice una consulta que muestre las boletas emitidas en el mes de febrero y en el 18 de abril de 1999 y adems que muestre el nombre del cliente que hizo la compra. SubConsultas 2.6. Obtener un listado de todos los artculos que tienen ventas registradas. SELECT des_articulo FROM Articulo WHERE cod_articulo IN ( SELECT cod_articulo FROM Detalle_Boleta ) - Realice una consulta que muestre el nombre del cliente que hizo compras pero que no tiene RUC Enviando el resultado de una consulta a otro archivo 2.7. Obtenga un listado de todos los clientes que no tienen RUC y enve el resultado a la tabla ClientesSinRuc -Qu requisito debe verificarse para que esta operacin sea permitida? Sp_dboption 'Tienda72m', 'select into/bulkcopy', true -A hora si podr realizar esta operacin SELECT * INTO ClientesSinRuc FROM Cliente WHERE ruc_cliente IS NULL or ruc_cliente=' ' Eliminando filas de una tabla DELETE: Elimina registros de una tabla Sintaxis: DELETE FROM NombreTabla [WHERE CondicinFiltro1 [AND | OR CondicinFiltro2 ...]]

2.8. Primeramente obtenga una copia de la tabla articulo: sp_dboption 'Tienda72m', 'select into/bulkcopy', true SELECT * INTO Articulo2 Msc. Edgar Taya Acosta-etayaa@unjbg.edu.pe Pgina: 5

Universidad Nacional Jorge Basadre Grohmann Facultad de Ingeniera / E.A.P. de Ingeniera en Informtica y Sistemas Asignatura: Base de Datos y Sistemas Distribuidos Periodo: 2011

FROM Articulo

/* tambin puede ser FROM Tienda72m..Articulo */

- Eliminar en la tabla articulo2, todos los artculos cuyo stock actual sea menor a 25 DELETE FROM Articulo2 WHERE stk_actual_articulo < 25 - Verificar si los articulos fueron eliminados Actualizacin de filas de una tabla UPDATE: Actualiza registros de una tabla con nuevos valores. Sintaxis: UPDATE NombreTabla SET Nombre_Columna1 = eExpresin1 [, Nombre_Columna2 = eExpresin2 ...] WHERE CondicinFiltro1 [AND | OR CondicinFiltro2 ...]]

2.9. Cambiar el stock actual de los artculos incrementndolo en 10 para cada uno de los artculos, siempre y cuando su precio unitario sea por lo menos 30 soles UPDATE Articulo2 SET stk_actual_articulo = stk_actual_articulo + 10 WHERE pu_articulo >= 30 - Verificar si los articulos tienen actualizado sus respectivos stock actuales Calcular el importe en detalle de boleta Calcular Total boleta con la suma total de importe de detalle boleta respectivo
update boletaventa set Tot_boleta = ( select sum(importe) from detalle_boleta where boletaventa.nro_boleta = detalle_boleta.nro_boleta ) from boletaventa, detalle_boleta

III.- Tarea Encargada: Para realizar la tarea lea el libro de Anlisis y Diseo de Sistemas de Kendall y Kendall (Diseo de Consultas), Analisis y Diseo de sistemas de James Senn y el Libro Anlisis Estructurado de GanneSarson. Responda lo siguiente: -Qu es consulta de tipo 1? -Qu es consulta de tipo 2? -Qu es consulta de tipo 3? -Qu es consulta de tipo 4? -Qu es consulta de tipo 5? -Qu es consulta de tipo 6? Hacer un ejemplo para cada tipo de consulta, teniendo en cuenta las tablas de la tienda comercial Que realizan los siguientes comandos. sqlservr -c -de:\mssql7\data\master.mdf -ee:\mssql7\log\errorlog odbcping /Sserver81 /Usa /P net pause mssqlserver net continue mssqlserver net stop mssqlserver (En version 6.x use: NET STOP SQLSERVER) osql /U sa /P /Q "EXIT(SELECT * FROM cliente)" /d tienda85m /s server81 En Query Analyser: SHUTDOWN sp_helplanguage SET LANGUAGE Spanish En la clusula: expresin [NOT] LIKE 'cadena' que permite los sgtes. caracteres comodines?:
carcter Comod n % _ [] Descripcin Cualquier cadena de cero o ms caracteres. Cualquier carcter individual Cualquier carcter individual del intervalo ([a-f]) o el conjunto ([abcdef]) especificado.

Ejemplo
WHERE ttulo LIKE %equipo% busca todos los ttulos de libros que contengan la palabra equipo en cualquier parte del ttulo. WHERE nombre LIKE _ean busca todos los nombres de cuatro letras que finalicen con ean. WHERE apellido LIKE [C-P]arsen busca apellidos de autores que terminen con arsen y comiencen con cualquier carcter individual entre C y P, por ejemplo Carsen, Larsen, Karsen, etc.

Msc. Edgar Taya Acosta-etayaa@unjbg.edu.pe Pgina: 6

Universidad Nacional Jorge Basadre Grohmann Facultad de Ingeniera / E.A.P. de Ingeniera en Informtica y Sistemas Asignatura: Base de Datos y Sistemas Distribuidos Periodo: 2011 [^] Cualquier carcter individual que no se WHERE apellido LIKE de[^l]% busca todos los apellidos de autores que encuentre en el intervalo ([^a-f]) o el comienzan con de y en los que la siguiente letra no sea l. conjunto ([^abcdef]) especificado.

Msc. Edgar Taya Acosta-etayaa@unjbg.edu.pe Pgina: 7

Você também pode gostar