41
Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -57- PRACTICA 6 SELECCIÓN DE DATOS CON SQL 1 SELECCIÓN DE DATOS MEDIANTE SQL SQL.- Lenguaje de Consulta estructurada (SQL.- por sus siglas en inglés ). SQL es un poderoso lenguaje para manejo de bases de datos que puede utilizar en sus aplicaciones. las instrucciones SQL se encuentran organizadas en dos grandes categorías : Instrucciones para manipulación de datos (DML), se utilizan para seleccionar , clasificar , contar y calcular la información almacenada en las tablas Instrucciones para la Definición de datos (DDL) . Le permiten definir tablas, índices y relaciones en la base de datos Que es el SQL Se desarrolló en la década de los años 70 en IBM para permitir a los usuarios el uso de instrucciones estandarizadas en diversas bases de datos. La intención fue crear un lenguaje que no estuviera basada en ningún otro lenguaje de programación, pero que pudiera ser utilizado de manera indistinta en cualesquiera de ellos para actualizar y consultar la información de las bases de datos. Muchas instrucciones SQL devuelven conjuntos de registros a los que se les conoce como vistas. A pesar de todo SQL no es un lenguaje particularmente amigable punto que se acentúan si no se tiene conocimientos del idioma inglés. El SQL ANSI estándar comparada con el SQL del Jet La sintaxis de SQL se determina por un comité que forma parte del Instituto Nacional Americano de Estándares (ANSI) – El estándar SQL mas utilizado es el denominado SQL-89 y también se usa el SQL reformado SQL-92 Cada Conjunto de normas del SQL tiene tres niveles de conformidad. Un producto de bases de datos deberá cumplir con el nivel 1 para poderse considerar como compatible con SQL. El motor Jet cumple con la norma ANSI SQL -89 Nivel 1. Fundamentos de SQL 1 Smith Curtis,Amundsen M.. Aprendiendo programación de base datos con Visual Basic 6.0 . Pearson mexico 1999

Pract 6 Seleccion de Datos Con SQL

Embed Size (px)

Citation preview

Page 1: Pract 6 Seleccion de Datos Con SQL

Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -57-

PRACTICA 6 SELECCIÓN DE DATOS CON SQL1

SELECCIÓN DE DATOS MEDIANTE SQL

SQL.- Lenguaje de Consulta estructurada (SQL.- por sus siglas en inglés ). SQL es un poderoso lenguaje para manejo de bases de datos que puede utilizar en sus aplicaciones. las instrucciones SQL se encuentran organizadas en dos grandes categorías : Instrucciones para manipulación de datos (DML), se utilizan para seleccionar , clasificar , contar y calcular la información almacenada en las tablas Instrucciones para la Definición de datos (DDL) . Le permiten definir tablas, índices y relaciones en la base de datos

Que es el SQL

Se desarrolló en la década de los años 70 en IBM para permitir a los usuarios el uso de instrucciones estandarizadas en diversas bases de datos. La intención fue crear un lenguaje que no estuviera basada en ningún otro lenguaje de programación, pero que pudiera ser utilizado de manera indistinta en cualesquiera de ellos para actualizar y consultar la información de las bases de datos.Muchas instrucciones SQL devuelven conjuntos de registros a los que se les conoce como vistas. A pesar de todo SQL no es un lenguaje particularmente amigable punto que se acentúan si no se tiene conocimientos del idioma inglés. El SQL ANSI estándar comparada con el SQL del Jet

La sintaxis de SQL se determina por un comité que forma parte del Instituto Nacional Americano de Estándares (ANSI) – El estándar SQL mas utilizado es el denominado SQL-89 y también se usa el SQL reformado SQL-92

Cada Conjunto de normas del SQL tiene tres niveles de conformidad. Un producto de bases de datos deberá cumplir con el nivel 1 para poderse considerar como compatible con SQL. El motor Jet cumple con la norma ANSI SQL -89 Nivel 1.

Fundamentos de SQL

El comando SELECTEste comando le permite obtener registro de 1 o más tablas. Como resultado de su ejecución, obtendrá una serie de registros que se conocen como vistas. Esta vista es un subconjunto de los datos que sirven como origen de la consulta.

En las vistas que solo se pueden desplegar se usará recorsets de tipo snapshot

Un comando SELECT consta de dos seccionesUna lista de columnas (los campos por seleccionar)Una lista de tablas de dónde obtener tales columnas

PRÁCTICA DE LABORATORIO.6.1-Elabore un nuevo Proyecto llamado Sistema SQLEl primer formulario grabe con el nombre del FrmSQLDiseñe el formulario de la como se muestra en la figura 5

1 Smith Curtis,Amundsen M.. Aprendiendo programación de base datos con Visual Basic 6.0 . Pearson mexico 1999

Page 2: Pract 6 Seleccion de Datos Con SQL

Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -58-

Figura 5. Formulario de demostración de instrucciones SQLInserte tres controles y cambia las siguientes propiedadesControl Propiedad ValorData1 Nombre DatOrigen

DataBaseName F:\CD2006\SI2006A\GUIA DE PRACTICAS 2006 Mayo\PRACTICAS2006\BASE DE DATOS\Productos1.mdb

Recorsource Productos1Data1 Nombre DatSQL

DataBaseName F:\CD2006\SI2006A\GUIA DE PRACTICAS 2006 Mayo\PRACTICAS2006\BASE DE DATOS\Productos1.mdb

Text1 Nombre TxtSQLMultline TraeScrollBars 3. Both

DbGrid1 DataSource DatOrigenDbgrid2 DataSource DatSQl

Nota Importante: cambie la propiedad AllowAddNew, AllowArrows, AllowDelete,AllowUpdate del control DBGrid1 para poder agregar, eliminar y modificar registros de la base de datos Original

El código del formulario es el siguiente

Option ExplicitDim cadenaSQL As StringPrivate Sub CmdGenerarSQL_Click()On Error GoTo Mensaje:

Page 3: Pract 6 Seleccion de Datos Con SQL

Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -59-

cadenaSQL = TxtSQL.TextDatSQL.RecordSource = cadenaSQLDatSQL.RefreshExit SubMensaje:MsgBox Err.Description, vbCritical, "ERROR"End Sub

Private Sub TxtSQL_KeyPress(KeyAscii As Integer)If KeyAscii = 13 ThenOn Error GoTo Mensaje:cadenaSQL = TxtSQL.TextDatSQL.RecordSource = cadenaSQLDatSQL.RefreshExit SubMensaje:MsgBox Err.Description, vbCritical, "ERROR"End IfEnd Sub

El mismo problema puede resolver mediante el administrador Visual de datos Usando la Ventana SQLSELECT CodProducto, NombreProducto FROM PRODUCTOS WHERE UnidadesALmacen > 10

EJERCICIOS.- ESCRIBIR INSTRUCCIONES SQL PARACopiar las instrucciones a su aplicación y pruebe

1. Listar el campo Nro de la tabla ProductosSELECT Productos.Nro From Productos La tabla productos después de select es opcional por que por defecto es la tabla productos

2. Lista los campos CodProducto, NombreProducto y PrecioUnitario de la tabla productos

SELECT CodProducto, NombreProducto, PrecioUnitario From Productos

Nota :Es recomendable que no se escriba con espacios en blanco el nombre de los campos , si hubiera blanco se debe poner entre corchetes

Page 4: Pract 6 Seleccion de Datos Con SQL

Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -60-

SELECT CodProducto, [Nombre Producto], [Precio Unitario] From Productos

3. Listar los campos CodProducto, NombreProducto y PrecioUnitario de la tabla PRODUCTOS pero en el orden NombreProducto, PrecioUniitario y CodProducto

SELECT NombreProducto,PrecioUnitario,CodProducto FROM Productos

Nota.- el orden en el que indique los nombres de los campos en una Instrucción SELECT será el mismo en el que aparezca en la vista

Es de destacar en que se combinado la capacidad de cambiar el orden de aparición de los campos, con la de cambiar el orden en que aparecen los registros. Esto es parte de la magia de SQL.

4. Listar todos los campos de la tabla productos

SELECT * FROM Productos

Aplicación 1. Elaborar una Aplicación que permita listar los campos seleccionados en un cuadro de lista .Par ello utilice una lista multple de style= check box

El còdigo del formulario es

Option Explicit

Page 5: Pract 6 Seleccion de Datos Con SQL

Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -61-

Dim cadenaSQL As StringDim i As IntegerDim Numreg As IntegerPrivate Sub CmdGenerarSQL_Click()__ Descrito AnteriormenteEnd Sub

Private Sub TxtSQL_KeyPress(KeyAscii As Integer)---- Descrito anteriormenteEnd Sub

Private Sub Form_Activate()Numreg = DatOrigen.Recordset.Fields.CountFor i = 0 To Numreg - 1List1.AddItem DatOrigen.Recordset.Fields(i).NameNextEnd Sub

Private Sub List1_Click()Dim CadSQL As StringCadSQL = ""For i = 0 To List1.ListCount - 1If List1.Selected(i) = True ThenCadSQL = CadSQL & List1.List(i) & ","End IfNextIf Len(CadSQL) > 0 Then CadSQL = Left(CadSQL, Len(CadSQL) - 1)TxtSQL = "SELECT " & CadSQL & " FROM PRODUCTOS"End Sub

TAREA.- Elaborar un programa similar a la pagina 53 para listar los campos que se elijan en el segundo cuadro de lista

LA CLAUSULA ORDER BY

Se utiliza para ordenar los registros con base en algún campo en especial. En este cláusula puede establecer si el orden será ascendente o descendente mediante las palabras claves ASC y des respectivamente. Si no especifica ninguna opción, se asumirá un orden ascendente en la clasificación.Puede especificar más de una columna en la cláusula ORDER BY, como resultado obtendrá una vista que cumplirá con el orden especificado.

Ejercicios.- Utilizando la base de datos Productos escriba instrucciones SQL para

1. Mostrar el campo Nombre del Producto Ordenado por el Nombre del Producto

SELECT NombreProducto FROM Productos ORDER BY NombreProducto

2. Mostrar todos los campos Ordenados por el Nombre del Producto en forma ascendente

SELECT * FROM Productos ORDER BY NombreProducto Por Defecto

Page 6: Pract 6 Seleccion de Datos Con SQL

Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -62-

SELECT * FROM Productos ORDER BY NombreProducto ASC CompletoSELECT * FROM Productos ORDER BY [NombreProducto] si hay espacios en blanco

3. Mostrar todos los campos ordenados en forma descendente de acuerdo al campo Unidades en Almacen y luego de acuerdo al campo nombre ( pero el segundo campo ordenarlo debe ser ordenado en forma a ascendente

SELECT * FROM Productos ORDER BY UnidadesAlmacen DESC, NombreProducto ASC

4 Mostrar los campos en el orden UnidadesAlmacen y luego Nombre del producto Ordenados en forma descendente por UnidadesAlmacen

SELECT UnidadesAlmacen, NombreProducto FROM Productos ORDER BY UnidadesALmacen DESC

Ejercicio.- Modificar la aplicación anterior que permita escoger el campo a ordenar y escoger si es ascendente o descendente

El código Modificado es

Option ExplicitDim cadenaSQL As String

Page 7: Pract 6 Seleccion de Datos Con SQL

Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -63-

Dim i As IntegerDim Numreg As IntegerDim CadenaOrdenamiento As StringDim CampoOrdenamiento As StringDim CadSQL As StringDim CadSQLFinal As String

Private Sub CmdGenerarSQL_Click()On Error GoTo Mensaje:cadenaSQL = TxtSQL.TextDatSQL.RecordSource = cadenaSQLDatSQL.RefreshExit SubMensaje:MsgBox Err.Description, vbCritical, "ERROR"End SubPrivate Sub Combo1_Click()CampoOrdenamiento = Combo1.List(Combo1.ListIndex)TxtSQL = CadSQLFinal & " ORDER BY " & CampoOrdenamiento & " " & CadenaOrdenamientoEnd Sub

Private Sub Optasc_Click()If Optasc.Value = True ThenCadenaOrdenamiento = "ASC"ElseCadenaOrdenamiento = "DESC"End IfTxtSQL = CadSQLFinal & " ORDER BY " & CampoOrdenamiento & " " & CadenaOrdenamientoEnd Sub

Private Sub OptDESC_Click()If OptDESC.Value = True ThenCadenaOrdenamiento = "DESC"ElseCadenaOrdenamiento = "ASC"End IfTxtSQL = CadSQLFinal & " ORDER BY " & CampoOrdenamiento & " " & CadenaOrdenamientoEnd Sub

Private Sub TxtSQL_KeyPress(KeyAscii As Integer)If KeyAscii = 13 ThenOn Error GoTo Mensaje:cadenaSQL = TxtSQL.TextDatSQL.RecordSource = cadenaSQLDatSQL.RefreshExit SubMensaje:MsgBox Err.Description, vbCritical, "ERROR"End If

Page 8: Pract 6 Seleccion de Datos Con SQL

Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -64-

End Sub

Private Sub Form_Activate()Numreg = DatOrigen.Recordset.Fields.CountFor i = 0 To Numreg - 1List1.AddItem DatOrigen.Recordset.Fields(i).NameCombo1.AddItem DatOrigen.Recordset.Fields(i).NameNextList1.Selected(2) = True ' Escoge por defecto el campo 2Combo1.ListIndex = 2CadenaOrdenamiento = "ASC"CampoOrdenamiento = Combo1.List(Combo1.ListIndex)Call List1_ClickEnd Sub

Private Sub List1_Click()Dim CadSQL As StringCadSQL = ""For i = 0 To List1.ListCount - 1If List1.Selected(i) = True ThenCadSQL = CadSQL & List1.List(i) & ","End IfNextIf Len(CadSQL) > 0 Then CadSQL = Left(CadSQL, Len(CadSQL) - 1)CadSQLFinal = "SELECT " & CadSQL & " FROM PRODUCTOS"TxtSQL = CadSQLFinal & " ORDER BY " & CampoOrdenamiento & " " & CadenaOrdenamientoEnd Sub

LA CLAUSULA WHERE

Uno de lo más poderosos aspectos de la Instrucción SELECT es el que tiene que ver con el condicionamiento de los registros mediante la cláusula WHERE (donde). Hay dos formas de utilizarla.

Para limitar la cantidad de registros obtenidos en una lista (Filtrar) Para vincular dos o mas tablas dentro de una vista

Uso de WHERE para limitar la cantidad de registros

Esta cláusula le permite llevar a cabo comparaciones lógicas en los datos de cualquier columna de la tabla. En su forma mas simple , La cláusula WHERE luce de la siguiente forma:

WHERE columna = valor

Columna representa el nombre de una tabla establecida y el valor representa el valor literal que se requiere, como 45 o PEREZ. La cláusula WHERE siempre deberá estar precedido por la Instrucción SELECt

Ejercicios.- Utilizando la base de datos Productos escriba instrucciones SQL para:

Page 9: Pract 6 Seleccion de Datos Con SQL

Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -65-

1. Seleccionar todos aquellos registros que unidades de Almacén tenga 0 unidades

SELECT * FROM Productos WHERE UnidadesAlmacen =0

La consulta anterior devuelve un subconjunto de datos de la Tabla Productos. Es decir en esta vista no se encuentran todos los registros de la tabla Productos solo los que cumplieron con la condición establecida en WHERE

2. Seleccionar todos aquellos productos que en Unidades en Almacén Tenga Mayor a 10 unidades

SELECT * FROM Productos WHERE UnidadesAlmacen>503. Seleccionar todos aquellos productos cuyo campo Nombre del Producto sea

‘PAPAS’

SELECT * FROM Productos WHERE NombreProducto = 'PAPAS'

Puede establecer varias condiciones en WHERE mediante los operadores AND y OR. Puede utilizar no sólo los operadores lógicos =, <>, >, <, >=, >=, El SQL del Jet también soporta el uso de los operadores BETWEEN , IN y LIKE

4. Seleccionar todos aquellos productos que en Unidades en Almacén Tenga Mayor a 10 unidades pero menores a 50 unidades

SELECT * FROM Productos WHERE UnidadesAlmacen> 10 AND UnidadesAlmacen<= 50

5. Seleccionar todos aquellos productos que en Unidades en Almacén Tenga Menor a 10 unidades y que se llame PAPAS además ordenarlos de acuerdo al campo Nombre del Producto en forma Ascendente

SELECT * FROM Productos WHERE NombreProducto ='PAPAS’ AND UnidadesAlmacen<= 10 ORDER BY NombreProducto ASC

6. Seleccionar todos aquellos productos que el precio Unitario este en el rango 2 a 5 (inclusive)

SELECT * FROM Productos WHERE PrecioUnitario BETWEEN 2 AND 5

SQL también Puede utilizarse para obtener una vista cuyos registros cumplan con una lista de condiciones. Por ejemplo , se desearía obtener todos aquellos clientes con residencia en México, Venezuela y Argentina , tendría que poner todos esos países dentro de un paréntesis y separados por comas después del operador IN : Todo Esto formaría parte de la cláusula WHERE

Para ello a su Formulario FRMSQL Modifique la propiedad Database name del control Data A BIBLIO.MDB( de la base de datos de Visual Basic) y la propiedad Record Source a Publishers y debe escribir la siguiente instrucción SQL, puede usar también la ventana

SELECT PubID, Name , City, State FROM Publishers WHERE State IN ('NY','CA', 'RI')

Page 10: Pract 6 Seleccion de Datos Con SQL

Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -66-

Figura 6. Resultados del Uso de WHERE y IN en una consulta

También Puede usar el modo del operador LIKE para obtener una vista cuyos registros cumplan con una patrón especificado. Por ejemplo para obtener todos aquellos registros Cuya Columna State Tenga Una letra I en algún lado debe obtener la siguiente Instrucción Select

SELECT Pubid, Name, City, State FROM Publishers WHERE State LIKE '*I*'

Ejercicios Utilizando la base de datos Productos escriba instrucciones SQL para:

1. Listar todos lo productos que en el campo nombre tenga la cadena PA

SELECT * FROM Productos WHERE NombreProducto LIKE '*PA*'

2. Listar todos lo productos que cuyo nombre comienza con A

SELECT * FROM Productos WHERE NombreProducto LIKE 'A*'

3. Listar todos lo productos que cuyo Código de Producto comience P04

SELECT * FROM Productos WHERE CodProducto LIKE 'P04*'

4. Listar todos lo productos que cuyo Nombre comienza co A y además cuesta más de 2 soles

SELECT * FROM Productos WHERE NombreProducto LIKE 'A*' AND PrecioUnitario > 2

5. Listar todos los productos Cuyo Nombre contenga la palabra “Pollo”

SELECT * FROM Productos WHERE NombreProducto LIKE '*Pollo*'

6. Listar todos lo productos que Cuyo códigos sean P01, P02 o P04

Page 11: Pract 6 Seleccion de Datos Con SQL

Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -67-

SELECT * FROM Productos WHERE CodProducto IN ('P01','P02','P04')

7. Listar todos lo productos que contenga las palabras “Arequipa”, “Puno“ en el nombre del producto

SELECT * FROM Productos WHERE NombreProducto LIKE '*Arequipa*' OR NombreProducto LIKE '*Puno*'

Ejrcicio:_ Agregar un Formulario llamado frmFiltros que permita filtrar datos por el campo Nombre del Producto los siguientes criterios son dado en un cuadro de texto para ello use instrucciones SQL

Criterio Filtra todos aquellos registros

"Es igual " que son iguales al cuadro de texto

"Es Mayor" son mayores al cuadro de texto

"Que comienza Con "

que comienzan con las letras especificadas en el cuadro de texto

"Que Termina Con " que terminan con lo especificado en el cuadro de texto

"Que Contiene " que contiene la el cuadro de texto

Diseño del Formulario

Código del formulario

Option ExplicitDim opcion As String

Page 12: Pract 6 Seleccion de Datos Con SQL

Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -68-

Dim SubCadena As StringDim CadenaSQl As StringOption Compare Text 'para que coicida mayusculas y minusculas

Private Sub CmdLimpiar_Click()CadenaSQl = ""TxtSQL = CadenaSQlDatSQL.RecordSource = CadenaSQlDatSQL.RefreshDBGrid2.RefreshEnd Sub

Private Sub FILTRARSQL_Click()On Error GoTo Mensaje:opcion = Combo1.List(Combo1.ListIndex)Select Case opcionCase "Es igual "SubCadena = " LIKE '" & TxtFiltro.Text & "'"Case "Es Mayor"SubCadena = " >'" & TxtFiltro.Text & "'"Case "Que comienza Con "SubCadena = "LIKE '" & TxtFiltro.Text & "*'"Case "Que Termina Con "SubCadena = "LIKE '*" & TxtFiltro.Text & "'" Case "Que Contiene " SubCadena = "LIKE '*" & TxtFiltro.Text & "*'"End SelectCadenaSQl = "SELECT * FROM Productos WHERE NombreProducto " & SubCadenaTxtSQL = CadenaSQlDatSQL.RecordSource = CadenaSQlDatSQL.RefreshExit SubMensaje:MsgBox Err.Description, vbCritical, "ERROR"End Sub

Private Sub Form_Load()Combo1.AddItem "Es igual "Combo1.AddItem "Es Mayor"Combo1.AddItem "Que comienza Con "Combo1.AddItem "Que Termina Con "Combo1.AddItem "Que Contiene "Combo1.ListIndex = 0End Sub

Private Sub TxtFiltro_KeyPress(KeyAscii As Integer)Call FILTRARSQL_ClickEnd SubPrivate Sub TxtSQL_KeyPress(KeyAscii As Integer)If KeyAscii = 13 ThenDatSQL.RecordSource = TxtSQLDatSQL.Refresh

Page 13: Pract 6 Seleccion de Datos Con SQL

Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -69-

Exit SubMensaje:MsgBox Err.Description, vbCritical, "ERROR"End IfEnd Sub

Private Sub Salir_Click()Unload MeEndEnd Sub

USO DE WHERE PARA VINCULAR DOS O MAS TABLAS EN UNA VISTA

La funcionalidad de WHERE puede aprovecharse para comparar los campos de tablas distintas, crear un criterio, así le permitirá obtener una vista donde se conjunten los campos de dos tablas la sintaxis para su uso es la siguiente

SELECT Tabla1.columnaA, Tabla2.ColumnaA FROM Tabla1, Tabla2 WHERE Tabla1.columnaA = Tabla2.ColumnaATanto Tabla1 como tabla2 son tablas de la misma base de datos

EJERCICIOSEjercicio 1.- Modifique la propiedad DatabaseName de sus controles Data a BIBLIO.MDB luego capture y ejecute la siguiente Instrucción

SELECT Titles.Title , Publishers.Name FROM Publishers, Titles WHERE Publishers.PubID = Titles.pubId

Puede probar con el generador de Instrucciones SQL de Administrador Visual de datos Visdata (donde le informa la características del informe generado)

Figura 7 Combinación de Cláusulas WHERE de tipo vínculo y limitación con VisData

La instrucción anterior crea una vista que muestra el Título de un libro y el nombre de la editorial

La combinación de tablas mediante WHERE siempre arrojará una vista que no podrá actualizarse, es decir que no podrá hacer cambios en la información por este medio (en general las tablas que se obtiene con SELECT no se pueden eliminar registros tanto en las tablas fuentes como en la generada). Para abrir vistas que pueden ser modificadas, deberá utilizar la cláusula JOINEjercicio 2. Capture y ejecute la siguiente Instrucción

Page 14: Pract 6 Seleccion de Datos Con SQL

Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -70-

SELECT Titles.PubID, Titles.Title , Publishers.Name FROM Titles, Publishers WHERE Publishers.PubID = Titles.PubId AND Publishers.PubID BETWEEN 5 AND 10La instrucción anterior selecciona los registros, donde las columnas PubId de ambas tablas confluyan y sus valores se encuentran comprendidos entre 5 y 10: Si desea escribir una instrucción dividida en varias líneas oprima Control + Enter al final de cada Línea para pasar al siguiente renglón sin ejecutar la instrucción

WHERE puede vincular mas de dos tablas Ejercicio 3.- Escriba la siguiente instrucción SQLSELECT Titles.PubID , Titles.Title, Publishers.Name, Authors.Author FROM Titles,Publishers, Authors WHERE Titles.PubID =Publishers.PubIDAND Titles.PubId = Authors.Au_Id

Figura 8. Resultado de de utiliza WHERE para vincular 3 tablas

En SQL puede usar la cláusula AS para asignarles un nombre más adecuado a las columnas de la Vista

Ejercicio 4.- Ejecute la siguiente Instrucción y compare los resultados con la Figura 9SELECT Titles.PubID AS CodigoPub, Titles.Title AS [Titulo del Libro], Publishers.Name AS NombrePub ,Authors.Author AS NombreAuthor FROM Titles, Publishers, AuthorsWHERE Titles.PubID =Publishers.PubID AND Titles.PubId = Authors.Au_Id

Figura 9 Resultado de Usar AS para cambiar el nombre de las columnas en un conjunto de datos en VisData

Ejercicio Nro 4.- Cree una base de datos similar a lo que se muestra en la Página 147 (del libro) ponga de nombre BaseSimple.Mdb (los campos de las tablas son de tipo

Page 15: Pract 6 Seleccion de Datos Con SQL

Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -71-

texto, excepto el campo Nota de la tabla Notas que es de tipo numérico La figura 10 muestra el contenido y estructura de las tablas

(a)

(b)

(c) ( d ) Figura 10.- Estructura de la base de datos BaseSimple.MDb .a)Tabla Alumnos b) Tabla cursos c)Tabla Notas d)Estructura de la Base de datos Alumnos.mdb

Ejercicio 5 Pruebe los siguientes comandos SQLa) SELECT * FROM alumnos Genere 6 registros de la tabla alumnos y dos camposb) SELECT * FROM alumnos,cursos Genera 30 registros (6x 5) y cuatro camposc) SELECT SELECT * FROM alumnos,cursos,notasSe obtiene 240 registros (6 x 5 x 8) y 8 campos (2+2+4)d) SELECT Notas.codalu, Notas.CodCurso, Notas.Nota FROM alumnos,cursos,notas

Page 16: Pract 6 Seleccion de Datos Con SQL

Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -72-

Se Obtiene 240 registros y 3 campos (las que se enumeran ) y son registros de solo lectura

Ejercicio 6 genere una tabla de consulta que con todos los datos de la tabla notas y de acuerdo al código del alumno busque el nombre del alumno en la tabla alumnos y de acuerdo al código del curso busque el nombre del curso en la tabla cursos

SELECT Notas.codalumno, Alumnos.Apenom, Notas.CodCurso, Cursos.NomCurso ,Notas.Nota FROM alumnos,cursos,notas WHERE Notas.CodAlumno = Alumnos.CodAlumno AND Notas.CodCurso = Cursos.CodCurso ORDER BY notas.codalumno

Remplace con SELECT * FROM (luego sigue igual) y vea que pasa

Figura 11.- Uso de WHERE para eliminar datos que se repiten ( quedan 8 registros)Ejercicio 7. Escribir una sentencia SQL para listar todos los alumnos que llevan el curso 1(C1)SELECT Notas.codalumno, Alumnos.Apenom, Notas.CodCurso, Cursos.NomCurso ,Notas.Nota FROM alumnos,cursos,notas WHERE Notas.CodAlumno = Alumnos.CodAlumno AND Notas.CodCurso = Cursos.CodCurso AND Cursos.CodCurso ='C1' ORDER BY notas.codalumno

Page 17: Pract 6 Seleccion de Datos Con SQL

Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -73-

Ejercicio 8.- Elaborar una aplicación donde se carga en un cuadro de lista la lista de cursos y otro cuadro de lista la lista de alumnos. Generar Sentencias SQL para ambos casos

Option ExplicitDim i As IntegerDim curso As StringDim alumno As StringDim CadenaSQl As String

Private Sub CmdAlumnos_Click()Data1.RecordSource = "Alumnos"Data1.Caption = "Alumnos"Data1.Refreshalumno = List2.List(List2.ListIndex)Data1.Recordset.MoveFirstData1.Recordset.FindFirst "CodAlumno = '" & alumno & "'"DBGrid1.Caption = "Alumno " & alumno & " " & Data1.Recordset.Fields("Apenom")CadenaSQl = " SELECT Notas.codalumno, Alumnos.Apenom, Notas.CodCurso, Cursos.NomCurso ,Notas.Nota FROM alumnos,cursos,notas WHERE Notas.CodAlumno = Alumnos.CodAlumno AND Notas.CodCurso = Cursos.CodCurso AND Alumnos.CodAlumno = '" & alumno & "' ORDER BY notas.codcurso"txtSql = CadenaSQlData1.RecordSource = txtSqlData1.RefreshList2.RefreshEnd Sub

Private Sub CmdCurso_Click()Data1.RecordSource = "Cursos"

Page 18: Pract 6 Seleccion de Datos Con SQL

Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -74-

Data1.Caption = "Cursos"Data1.Refreshcurso = List1.List(List1.ListIndex)Data1.Recordset.MoveFirstData1.Recordset.FindFirst "Codcurso = '" & curso & "'"DBGrid1.Caption = "Curso " & curso & " " & Data1.Recordset.Fields("nomcurso")CadenaSQl = " SELECT Notas.codalumno, Alumnos.Apenom, Notas.CodCurso, Cursos.NomCurso ,Notas.Nota FROM alumnos,cursos,notas WHERE Notas.CodAlumno = Alumnos.CodAlumno AND Notas.CodCurso = Cursos.CodCurso AND Cursos.CodCurso = '" & curso & "' ORDER BY notas.codalumno"txtSql = CadenaSQlData1.RecordSource = txtSqlData1.RefreshList1.RefreshEnd Sub

Private Sub Form_Activate()' llenar el cuadro de lista cursosData1.RecordSource = "Cursos"Data1.Caption = "Alumnos"Data1.RefreshData1.Recordset.MoveFirstFor i = 0 To Data1.Recordset.RecordCount - 1List1.AddItem Data1.Recordset.Fields("CodCurso").ValueData1.Recordset.MoveNextNext i' llenar el cuadro de lista alumnosData1.RecordSource = "Alumnos"Data1.RefreshData1.Recordset.MoveFirstFor i = 0 To Data1.Recordset.RecordCount - 1List2.AddItem Data1.Recordset.Fields("CodAlumno").ValueData1.Recordset.MoveNextNext iEnd Sub

FUNCIONES AGREGADAS DE SQL

Los estándares de SQL, definen un conjunto de funciones que deberán encontrarse en todos los sistemas que acaten las normas de SQL. Tales funciones que están disponibles en el Jet Son.AVG.- Devuelve el promedio de los valores que se encuentran en una columnaCOUNT Devuelve la cantidad de registros y se suele utilizar para determinar la cantidad de ellos en una vista. Esta e la única función estándar que puede utilizarse con columnas que no sean numéricas).SUM.- Devuelve una sumatoria de los valores de una columnaMAX devuelve el mayor valor encontrado en una columnaMIN devuelve el menor valor encontrado en una columnaStDev, StDevP.- Devuelve n estimaciones de la desviación estándar de una población o una muestra. Var, VarP.- Devuelve n estimaciones de la varianza de una población o una muestra.

Page 19: Pract 6 Seleccion de Datos Con SQL

Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -75-

Ejercicio 7. Usando la base de datos productos escriba

SELECT COUNT (NombreProducto) AS [TOTAL PRODUCTOS] ,AVG (PrecioUnitario) AS [Promedio Precio Unitario] , SUM (UnidadesAlmacen) AS [Suma Unidades Almacen] ,MAX(UnidadesAlmacen) From Productos

Figura 10 Uso de las funciones Agregadas de SQLNota:-en MAX([Unidades en Almacen]) al no poner AS el Nombre del campo sale expr. 1003Es posible Utilizar WHERE y las funciones agregadas en un mismo select

Ejercicio 8. trabajando con la base de datos productos pruebe la sentencia

SELECT COUNT([NombreProducto]) AS [TOTAL PRODUCTOS] ,AVG ([PrecioUnitario]) AS [Promedio Precio Unitario] ,SUM ([UnidadesAlmacen]) AS [Suma Unidades Almacen] ,MAX([UnidadesAlmacen]) As MayorUnidAlmacen From Productos WHERE [NombreProducto] LIKE '*P*'

Figura 11. Resultado de WHERE para limitar el alcance de las funciones agregadas

Page 20: Pract 6 Seleccion de Datos Con SQL

Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -76-

Ejercicio 1. Con la base de datos Base simple escriba una Instrucción SQL para listar los tabla alumnos con al cantidad de cursos que lleva cada uno.

SELECT Alumnos.Apenom , Count (Notas.CodCurso) As Total FROM Alumnos,Cursos ,notas WHERE Notas.CodAlumno = Alumnos.CodAlumno AND Notas.CodCurso = Cursos.CodCurso GROUP BY Alumnos.Apenom ORDER BY alumnos.Apenom

Ejercicio 2. Con la base de datos Base simple escriba una Instrucción SQL para listar los tabla cursos con el promedio de notas por cursoSELECT Cursos.Nomcurso , AVG (Notas.Nota) As PromNotal FROM Alumnos,Cursos ,notas WHERE Notas.CodAlu = Alumnos.CodAlu AND Notas.CodCurso = Cursos.CodCurso GROUP BY Cursos.NomCurso ORDER BY Cursos.Nomcurso

Figura 12.- Resultados de funciones agregadas en la Base de datos de alumnos

Uso de las funciones de visual Basic en una Instrucción Select

Al cargar cualquier base de datos mediante el Jet en una aplicación de VB , es posible utilizar cualesquiera de las funciones propias del entorno como parte de una Instrucción SQL (Figura 13-a)Select Left (NombreProducto,3) AS Iniciales, NombreProducto From Productos

También puede utilizar una sintaxis propia de visual Basic para combinar varis columnas en un sola dentro de la vista (Figura 13-b)

Select NombreProducto & " : " & PrecioUnitario AS [Descripcion del producto] From Productos

Figura 13 a) Uso de las funciones propias de Visual Basic en una instrucción SQL b) Uso de recursos de Visual Basic para combinar columnas

Page 21: Pract 6 Seleccion de Datos Con SQL

Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -77-

También puede utilizar las funciones de Visual Basic como parte de la cláusula WHERE

SELECT NombreProducto From Productos WHERE Mid(NombreProducto,3,2)='PA'

Figura 14.- Uso de funciones de Visual Basic en una Cláusula WHERE

Nota.- Aunque es muy útil poder utilizar las funciones y sintaxis de Visual Basic tiene sus desventajas. La Principal es que toda aquella consulta SQL que incluye porciones específicas de VB, carecerá por completo de compatibilidad y, por lo tanto portabilidad. Si intenta utilizar tales consultas en alguna otra base de datos (como SQL Server) , deberá eliminar tales Instrucciones y reemplazarlas por aquellas que funcionan en ella. Pero si se utiliza solo bases de datos del Jet no será problema

Es mejor utilizar la menor cantidad de funciones de Visual Basic en sus consultas SQL. Así no afectará significativamente ni la portabilidad de su código SQL, ni su rapidez de su ejecución.

Otras instrucciones DML de SQLAlguna características extra de SELECT

Page 22: Pract 6 Seleccion de Datos Con SQL

Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -78-

Los predicados DISTINCT y DISTINCTROW

Si Utiliza el Predicado DISTINCT para asegurarse que no aparezcan nombres duplicados en la vista

SELECT DISTINCT NombreProducto From Productos ORDER BY NombreProducto

Figura 15.- Uso de DISTINCT para evitar duplicados en un conjunto de datos

Si se incluye más de una columna en la lista SELECT, todas ellas serán evaluados para obtener un registro único

SELECT DISTINCT Nro, NombreProducto From ProductosLista todos los campos, por lo que DISTINC solo se puede usar para listar un solo campo

DISTINTNCTROW .- Omite los datos basados en registros duplicados completos, no sólo campos duplicados.SELECT ALL DISTINCTROW * FROM Productos

El predicado TOP y la clave PERCENT

TOP Devuelve cierto número de registros que se encuentran entre la parte superior e inferior de un intervalo especificado por una cláusula ORDER BY.(los primeros n registros), si hubiera dos registros con el mismo nombre , devolverá ambos ,al utilizar el

Page 23: Pract 6 Seleccion de Datos Con SQL

Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -79-

predicado TOP si la cláusula ORDER BY es omitido muestra un conjunto arbitrario de registros.

SELECT ALL TOP 4 * From Productos ORDER BY UnidadesAlmacen ASC

Selecciona los primeros 4 registros

PERCENT.- Realiza la misma acción que el predicado TOP para un porcentaje de registros.SELECT TOP 50 PERCENT * From Productos WHERE UnidadesALmacen > 0Muestra el 50 % de los registros que cumplen la condición especificado en WHERE ( si hay 5 registros listara 3)

Las cláusulas GROUP BY HAVING

Con estas funciones se podrá utilizar las funciones agregadas de SQL para crear una lista de subtotales obtenidos de la tabla Origén

SintaxisSELECT listacamposFROM tablaWHERE criterioselecciónGROUP BY grupolistacampos[HAVING grupocriterio]Donde grupolistacampos Los nombres de hasta 10 campos que se van a utilizar para agrupar registros. El orden de los nombres de los campos en grupolistacampos determina los niveles de agrupamiento desde el más alto hasta el más bajo.grupocriterio Una expresión que determina qué registros agrupados se van a mostrar.Ejemplo.- encontrar subtotales

Page 24: Pract 6 Seleccion de Datos Con SQL

Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -80-

SELECT NombreProducto, SUM (UnidadesAlmacen) As Totales FROM Productos GROUP BY NombreProducto

Figura 16 Uso de GROUP BY para crear Subtotales

Si queremos listar todos los productos cuya suma sea mayor a 100 se podría escribir una sentencia SQL de la siguiente forma

SELECT NombreProducto SUM (Unidades Almacen) As Totales FROM Productos WHERE SUM (UnidadesAlmacen)>100 GROUP BY NombreProducto

Si se intenta ejecutarlo el detector de errores lanza un mensaje de que no se permite el uso de funciones agregadas en WHERE

HAVING .- tiene un efecto similar similar a WHERE , pero solo trabaja de acuerdo a los resultados obtenidos por GROUP BY . Con la siguiente Instrucción

SELECT [Nombre del Producto], SUM ([Unidades en Almacen]) As Totales FROM Productos GROUP BY [Nombre del Producto] HAVING SUM([Unidades en Almacen])>50

Page 25: Pract 6 Seleccion de Datos Con SQL

Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -81-

Figura 17. Uso de Having en Grupo By

No es necesario que las columnas indicadas en las cláusula HAVING se encuentre en SELECT, con HAVING se siguen las mismas reglas que con WHERE : A su vez , puede utilizar los operadores AND , OR, NOT , y puede incluir funciones propias de VB.

Con la base productos antiguoSELECT [Nombre del Producto], SUM ([Unidades en Almacen]) As Totales FROM Productos GROUP BY [Nombre del Producto] HAVING SUM([Unidades en Almacen])>50 AND InStr([Nombre del Producto], "R") >0

Con la base productos Nuevo

SELECT NombreProducto, SUM (UnidadesAlmacen) As Totales FROM Productos GROUP BY NombreProducto HAVING SUM(UnidadesAlmacen)>50 AND InStr(NombreProducto, "R") >0

Figura 18.- Uso de una condición compleja en HAVING

Nota.- Es mala idea utilizar espacios en los nombres de las columnas y de las tablas, no solo necesita utilizar corchetes, sino también porque el asistente para convertir tablas de Access en Microsoft SQL Server no funcionará adecuadamente con aquellas tablas que tengas espacios en sus nombres

La operación JOIN

Page 26: Pract 6 Seleccion de Datos Con SQL

Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -82-

En la vinculación de dos tablas se podía seguir la siguiente sintaxis WHERE Tabla1.columna1= Tabla2.columna1 por este método la vista resultante es de solo lectura, para una vista que puede ser actualizada usar JOINExisten tres tipos de operaciones JOIN en el SQL del Jet

INNER JOIN(fusión Interna).-Combina registros de dos tablas siempre que existan valores coincidentes en un campo común.SintaxisFROM tabla1 INNER JOIN tabla2 ON tabla1.campo1 operadorcomp tabla2.campo2

La operación INNER JOIN consta de las siguientes partes:Parte Descripcióntabla1, tabla2 Los nombres de las tablas cuyos registros se van a combinar.campo1, campo2 Los nombres de los campos que se van a combinar. Si no son numéricos, los campos deben ser del mismo tipo de datos y contener la misma clase de datos, pero no tienen porqué tener el mismo nombre.

operadorcomp Cualquier operador de comparación relacional: "=," "<," ">," "<=," ">=," o "<>."

INNER JOIN2 se utiliza para generar una vista que contenga sólo aquellos registros que tengan una correspondencia exacta en ambas tablas.

Ejercicio .- Juntar las tablas Cursos y Notas si el código del curso es igualSELECT Cursos.* FROM Notas INNER JOIN Cursos ON Notas.CodCurso = Cursos.CodCurso

Figura 19.- Uso de INNER JOIN EN SQL

2 Aprendiendo Progrmaciòn de bases de datos con Visual Basic 6.0 de Curtis Smith Michael Admusin p 245

Page 27: Pract 6 Seleccion de Datos Con SQL

Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -83-

LEFT JOIN

LEFT JOIN es otro tipo de operación de fusión conocida como fusión externa. Recapitulemos: la fusión interna devolverá una vista con los registros correspondientes en ambas tablas. Una fusión extema devolverá todos los registros de una tabla, haya o no registros correspondientes en la otra. LEFT JOIN es una fusión exlerna que devolverá todos los registros de la tabla indicada primero (a la izquierda) y aquellos registros que se encuentren en la segunda tabla (a la derecha) y que coincidan. La figura 7,30 muestra el resultado de la misma instrucción SQL que se utilizó para la figura 7.28, excepto que INNER ha sido reemplazado por LEFT. Ejecute esta instrucción y compare sus resultados con los de lafigura 7.30:

SELECT Cursos.* FROM Notas LEFT JOIN Cursos ON Notas.CodCurso = Cursos.CodCurso

RIGTH JOINFunciona igual que LEFT JOIN excepto que la tabla principal será la de la derecha

OPERACIÓN UNION

Con ella es posible crear dos tablas o consultas que contengan datos similares, pero no relacionados. Una operación UNION es conveniente cuando desee cotejar información obtenida de dos consultas en una sola vista .UNION puede mezclar el resultado de dos o más consultas.Ejemplo 1

TABLE alumnos UNION TABLE Cursos ORDER BY Alumnos.Codalu

Figura 20. Resultado de mezclar dos tablas en 1 con UNION

Ejercicio 2 Vea el siguiente ejercicio

TABLE Cursos UNION TABLE Alumnos ORDER BY Cursos.CodCurso

Ejercicio 3. Mezclar 2 consultas

SELECT Notas.Codcurso, Cursos.Nomcurso FROM Notas,Cursos UNION SELECT Cursos.CodCurso ,Cursos.Nomcurso FROM Cursos

Page 28: Pract 6 Seleccion de Datos Con SQL

Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -84-

Ejercicio 4. Puede utilizar UNION en la misma tabla

SELECT Productos.[nombre del Producto] FROM Productos UNION SELECT Productos.[Unidades en Almacen] FROM Productos

REFERENCIAS CRUZADAS CON TRANSFORM

Permiten crear vistas que contienen datos resumidos de una forma conocida como referencia cruzadaEjemplo

TRANSFORM SUM([Unidades en Almacen]) SELECT [Nombre del Producto] FROM Productos GROUP BY [Nombre del Producto] PIVOT [Unidades en Almacen]

Figura 21 Ejemplo de Uso de Transform

Figura 22. Uso de Transform para base de datos alumnos

Desventaja de Transform.- no es una instrucción propia de la norma ANSI-SQL

CONSULTAS SELECT ANIDADAS

Las consultas anidadas SELECT se conoce como subconsultas son consultas contenidas en otra

Ejemplo realizar un consulta en otra

Page 29: Pract 6 Seleccion de Datos Con SQL

Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -85-

SELECT Notas.*, Alumnos.Apenom from Notas , alumnos WHERE Notas.codalu IN ( SELECT Notas.CodAlu FROM Notas WHERE Notas.CodAlu=Alumnos.CodALu )

La instrucción SELECT que se encuentra fuera del paréntesis ( La consulta principal) se ejecuta de acuerdo a los resultados obtenidos por la subconsulta (paréntesis interna).

PROBLEMAS

Solución del diseño de base de datos simple pag 147 usando SQL y reportesSe tiene la base de datos mostrada en la página 47 elaborar una aplicación usando Instrucciones SQL1:- Diseñe un formulario como se muestra, elimine las opciones de ver Detalle y cerrar detalle, además solo use dos controles data

Figura 23.- Nuevo diseño del formulario de la base datos alumns

El código del formulario es

Option ExplicitDim consulta As StringDim DETALLE As StringDim NombreBase As String

Sub mostrar()DBGrid1.Visible = True :DBGrid2.Visible = TrueData1.Visible = True :Data2.Visible = TrueEnd SubSub Ocultar()DBGrid1.Visible = False :DBGrid2.Visible = FalseData1.Visible = False :Data2.Visible = FalseEnd SubPrivate Sub ArcCerrarBase_Click()Ocultar

Page 30: Pract 6 Seleccion de Datos Con SQL

Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -86-

End Sub

Private Sub ArcMostrar_Click()' el data1 se usara como datos de trabajo relacionado a dbgrid1Data1.RecordSource = "Alumnos"Data1.Refresh: Data1.Caption = "Alumnos"Data1.Visible = TruemostrarEnd SubPrivate Sub Data1_Reposition()Dim Nombre As StringWith Data1.RecordsetSelect Case Data1.CaptionCase "Alumnos"Nombre = .Fields("Apenom").Valueconsulta = DETALLE & " AND Alumnos.Apenom LIKE '" & Nombre & "'"Case "Cursos"Nombre = .Fields("NomCurso").Valueconsulta = DETALLE & " AND Cursos.Nomcurso LIKE '" & Nombre & "'"Case "Notas"consulta = DETALLEEnd SelectData2.RecordSource = consultaData2.RefreshEnd WithEnd Sub

Private Sub Form_Load()NombreBase = "c:\cd2002b\SI2002B\BasedeDatos\BaseSimple1.mdb"Data1.DatabaseName = NombreBaseData2.DatabaseName = NombreBaseDETALLE = " SELECT Notas.codalu,Alumnos.Apenom, Notas.CodCurso, " & _ " Cursos.NomCurso , Notas.Nota FROM alumnos,cursos,notas WHERE " & _ " Notas.CodAlu = Alumnos.CodAlu And Notas.CodCurso = Cursos.CodCurso"End Sub

Private Sub MnuALUMNOS_Click()Data1.RecordSource = "Alumnos"Data1.Caption = "Alumnos"Data1.RefreshEnd SubPrivate Sub MnuCursos_Click()Data1.RecordSource = "Cursos"Data1.Caption = "Cursos"Data1.RefreshEnd SubPrivate Sub MnuNotas_Click()Data1.RecordSource = "Notas"Data1.Caption = "Notas"Data1.RefreshEnd Sub

Page 31: Pract 6 Seleccion de Datos Con SQL

Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -87-

Version cdSOLUCION DE LA TERCERA PREGUNTA DEL EXAMEN USANDO SQL

PREGUNTA 3 TEMA A EXAMEN DEL JUEVES 19 /12 02 Modifique la siguiente sentencia

Private Sub Combo1_Click()promo = Right(Combo1.List(Combo1.ListIndex), 2)consulta = "SELECT * FROM Alumnos WHERE left(Alumnos.Cui,2) LIKE '" & promo & "'"Data2.RecordSource = consultaData2.RefreshEnd Sub

PREGUNTA 3 TEMA B Modifique el siguiente procedimientoPrivate Sub Combo2_Click()Nacimiento = Combo2.List(Combo2.ListIndex)'consulta = "SELECT * FROM Alumnos Where Right(Alumnos.[Fecha de Nacimiento], 4) LIKE '" & Nacimiento & "'"consulta = "SELECT * FROM Alumnos Where Right(Alumnos.[Fecha Nacimiento] , 4) LIKE '" & Nacimiento & "'"Data1.RecordSource = consulta :Data1.RefreshEnd Sub

EXAMEN VIERNES 20 de diciembre del 2002PREGUNTA 3 TEMAS A y B .El nuevo código del formulario es

Option ExplicitDim i As Integer, NReg As IntegerDim libro As String, consulta As StringPrivate Sub CdmAutor_Click()List1.Clearconsulta = "SELECT DISTINCT Autor FROM Libros "Data2.RecordSource = consulta: Data2.RefreshWith Data2.Recordset.MoveLast: NReg = .RecordCount.MoveFirstFor i = 0 To NReg - 1List1.AddItem .Fields("Autor").MoveNextNextEnd WithEnd SubPrivate Sub CmdEditorial_Click()List2.Clearconsulta = "SELECT DISTINCT Editorial FROM Libros "Data2.RecordSource = consulta: Data2.RefreshWith Data2.Recordset.MoveLast: NReg = .RecordCount.MoveFirstFor i = 0 To NReg - 1List2.AddItem .Fields("Editorial")

Page 32: Pract 6 Seleccion de Datos Con SQL

Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -88-

.MoveNextNextEnd WithEnd SubPrivate Sub List1_Click()libro = List1.List(List1.ListIndex)consulta = "SELECT * FROM Libros Where Autor LIKE '" & libro & "'"Data2.RecordSource = consulta: Data2.RefreshEnd SubPrivate Sub List2_Click()libro = List2.List(List2.ListIndex)consulta = "SELECT * FROM Libros Where Editorial LIKE '" & libro & "'"Data2.RecordSource = consulta: Data2.RefreshEnd Sub

Ejercicios 1 Se tiene una hbase de datos cuyos campos CodALumno. Nombre , Nota, listas todos los alumnos aprobados