Академический Документы
Профессиональный Документы
Культура Документы
Prctica No. 8
Objetivo: Que el Participante disee una Base de Datos y al menos una tabla, que construya el formulario y los
objetos necesarios para llevar a cabo una buena administracin de sus datos.
Instrucciones: Capture la siguiente Informacin considerando que el diseo de la Base de Datos y las Tablas
alternas se llevara a cabo utilizando el Manejador de Bases de Datos Acces.
Desarrollo:
Objeto Name
form
frmSql
Objeto
TextBox
Caption
Ejecucin de Sentencias SQL
Name
TxtSql
Text
(Nada)
Multiline
True
Objeto
DBGrid
Name
cmdEjecuta
Name
dbgSql
DataSource
DbSql
Caption
Ejecutar
[Hoja 1 de 7]
!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!
Cdigo para el Botn de Comando:
Private Sub cmdEjecuta_Click()
dbSql.RecordSource = txtSql.Text
dbSql.Refresh
End Sub
Instruccin SELECT
La instruccin SELECT lanza consultas, determinando cules son los campos (columnas) que queremos leer y su
organizacin. La sintaxis es:
SELECT <columnas>
FROM <tablas>
[WHERE <condiciones>]
[GROUP BY <columnas>]
[HAVING <condiciones>]
[ORDER BY <columnas>]
Slo son obligatorias las clusulas que no estn entre corchetes. Por ejemplo para obtener el nombre y la direccin de todos
los registros de una tabla: SELECT NOMBRE, DIRECCION FROM CLIENTES
Si quisieramos recuperar todos los campos de todos los registros, escribiramos: SELECT * FROM CLIENTES
Donde el asterisco representa todos los campos de la tabla.
Para leer todos los clientes que sean de Monterrey: SELECT * FROM CLIENTES WHERE POBLACION=Monterrey
Tambin se pueden utilizar frmulas para obtener datos. SELECT ARTICULO, PRECIO*16/100 FROM ARTICULOS,
nos ofrece directamente el IVA y el precio final de todos los artculos de la tabla
SELECT SUM(PRECIO*16/100) FROM LINEASFACTURA WHERE NUMFACTURA=100, nos proporciona el precio
final de na factura a partir de la suma de los precios de las lneas de la factura nmero 100.
SELECT COUNT(NOMBRE) WHERE POBLACION=Monterrey. Cuenta los registros que cumplen una condicin.
SELECT * FROM ARTICULOS ORDER BY VENTAS. Se solicitan los datos en un orden concreto.
Podemos utilizar un sistema de consultas multitabla. Solicitaremos todos los libros de un autor determinado junto con su
nombre.
SELECT Authors.Au_ID, Authors. Author, Titles.Au_ID, Titles.Title
FROM Authors, Titles
WHERE Authors.Au_ID = Titles.Au_ID
La clusula GROUP BY se utiliza para agrupar filas cuando se emplean funciones como SUM y COUNT, las cuales no
toman campos Lnea por Lnea, sino resultados globales de suma de todas las filas.
!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!
Por ejemplo, la sentencia SELECT * FROM Clientes WHERE Nombre LIKE C* Localizar todos los clientes cuyo
nombre empiece con C. Tendramos a Carlos, Carolina, Cleofas, Cleotilde, etc. Estamos utilizando como patrn de
bsqueda el asterisco. EL asterisco solo sirve para el motor de Access. En el resto de los sistemas gestores de bases de datos
relacionales se emplea el smbolo de porcentaje %.
Cuando se utilice el ODBC se ver que si atacamos el motor de Access, deberemos utilizar la sintaxis LIKE con el
asterisco. Si atacamos a ODBC deberemos utilizar la sintaxis LIKE con el porcentaje. Y si estamos atacando al motor de
Access a travs de ODBC debemos utilizar tambin el porcentaje. La misma sentencia que selecciona los clientes que
empiezan con C, actuando contra ODBC sera SELECT * FROM Clientes WHERE Nombre LIKE C%
La clusula LIKE tambin permite seleccionar todos los artculos cuyo cdigo contiene en cualquier posicin -C1,
SELECT * FROM Articulos WHERE Codigo LIKE *-C1-*
EL motor de Access tambin nos permite buscar todos los cdigos de artculos que tengan dos dgitos cualquiera y slo
dos y despus -C1- seguido de cualquier nmero de caracteres:
SELECT * FROM Articulos WHERE Codigo LIKE ??-C1-*
SELECT de fechas
SQL emplea el carcter de almohadilla (tambin llamado sostenido o makoki) para delimitar fechas. Por ejemplo
SELECT * FROM Apuntes WHERE Fecha > #10/02/1996#
Deseamos ver las ventas de un producto registradas entre los das 3 y 4 de febrero
SELECT * FROM Ventas WHERE Fecha BETWEEN #03/02/1997# AND #04/02/1997#
Solo aparecern las ventas del da 3 de febrero y no las del da 4. Por qu ? Porque cuando nosotros le especificamos 3 de
Febrero, el motor de Access entiende 3 de Febrero a las cero horas, cero minutos, cero segundos. Lo mismo sucede con el 4
de Febrero. En el caso de la fecha inicial no hay problema, pero en la fecha final est excluyendo las veinticuatro horas del
segundo da.
!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!
Iniciemos:
Teclear en el cuadro de texto SELECT * FROM Titles (visualice los resultados en el Grid)
Calcular cuantos ttulos de libros tiene la tabla SELECT COUNT(Title) FROM Titles (visualice los resultados en el
Grid)
Preguntemos cual es la media de edad de los autores de los cules tenemos el dato de la edad.
Podemos tener campos con nombres compuestos de varias palabras separadas por espacios. Muchos analistas optan por
eliminar este tipo de nombres para los campos, pero frecuentemente nos vemos en la tesitura de tener que utilizarlos. Para
esos casos hay que evitar que el analizador sintctico de SQL se equivoque, viendo dos campos en lugar de uno.
Para solucionarlos encerraremos la expresin entre corchetes cuadrados y convertiremos a enteros.
SELECT INT(AVG(1999-[Year Born])) FROM Authors WHERE [Year Born] > 0
Lancemos una consulta que nos de el cdigo de autor y el cdigo de cada libro que ha escrito ese mismo author,
ordenndolos por sus respectivos cdigos.
SELECT Authors.au_id [Title author].au_id, ISBN FROM Authors, [Title Author]
WHERE Authors.au_id=[Title Author].au_id
!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!
!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!
En el resultado de la consulta aparecen primero los campos que cumplen con la condicin. Los registros que no estn
vinculados aparecen siempre al final. Y es aqu donde aparecen los ltimos dos registros que capturamos.
Si ahora cambiamos la orden a right join, veremos que la tabla que manda ahora es la de ttulo y autor:
SELECT * FROM Authors
right join [Title Author] on Authors.Au_ID=[Title Author].Au_Id
ya que todos los ttulos estn vinculados al autor, no se vern registros sin campo Au_ID
Crear la siguiente Tabla. Nombre Explosivos
Ao Toneladas Millones_1987
Tipo
1987
2887
1915 Explosivos
1986
3389
3915 Explosivos
1985
7674
6827 Explosivos
1984
3331
2124 Explosivos
1983
7674
8270 Explosivos
1982
4908
1892 Explosivos
1981
2618
948 Explosivos
1980
5343
1421 Explosivos
1987
5342
6147 Armas y Municiones
1986
3342
5334 Armas y Municiones
1985
3881
7200 Armas y Municiones
1984
4673
7311 Armas y Municiones
1983
3881
8721 Armas y Municiones
1982
4714
10811 Armas y Municiones
1981
1831
5596 Armas y Municiones
1980
1623
7161 Armas y Municiones
Configure la interfaz para que responda al GRID
!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!
Para forzar la existencia de columnas concretas se utiliza la clusula IN a continuacin de PIVOT
PIVOT Explosivos.Ao IN (1986,1987,1988)
Generar las siguientes tablas dentro de la base de datos Armas
BajaCalifornia
Cdigo Cliente
1 Beatriz
2 Bernardo
3 Bonifacio
4 Braulio
Colima
Cdigo
Cliente
5 Carlos
6 Concepcin
7 Carla
8 Clara
Guadalajara
Cdigo Cliente
13 Gabriela
14 Gonzalo
15 Gerardo
16 Guillermo
Torren
Cdigo Cliente
9 Toms
10 Thala
11 Teresa
12 Telsforo