Documente Academic
Documente Profesional
Documente Cultură
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 SELECT
Este 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
PRÁCTICA DE LABORATORIO.6.1-
Elabore un nuevo Proyecto llamado Sistema SQL
El primer formulario grabe con el nombre del FrmSQL
Diseñ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
Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -58-
Option Explicit
Dim cadenaSQL As String
Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -59-
Nota :Es recomendable que no se escriba con espacios en blanco el nombre de los
campos , si hubiera blanco se debe poner entre corchetes
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
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
Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -61-
Option Explicit
Dim cadenaSQL As String
Dim i As Integer
Dim Numreg As Integer
Private Sub CmdGenerarSQL_Click()
__ Descrito Anteriormente
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.
1. Mostrar el campo Nombre del Producto Ordenado por el Nombre del Producto
2. Mostrar todos los campos Ordenados por el Nombre del Producto en forma
ascendente
El código Modificado es
Option Explicit
Dim cadenaSQL As String
Dim i As Integer
Dim Numreg As Integer
Dim CadenaOrdenamiento As String
Dim CampoOrdenamiento As String
Dim CadSQL As String
Dim CadSQLFinal As String
Exit Sub
Mensaje:
MsgBox Err.Description, vbCritical, "ERROR"
End If
End 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.
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
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
Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -66-
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')
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*'
6. Listar todos lo productos que Cuyo códigos sean P01, P02 o P04
SELECT * FROM Productos WHERE CodProducto IN ('P01','P02','P04')
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
Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -68-
Option Explicit
Dim opcion As String
Dim SubCadena As String
Dim CadenaSQl As String
Option Compare Text 'para que coicida mayusculas y minusculas
EJERCICIOS
Ejercicio 1.- Modifique la propiedad DatabaseName de sus controles Data a
BIBLIO.MDB luego capture y ejecute la siguiente Instrucción
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 JOIN
Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -70-
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 9
SELECT Titles.PubID AS CodigoPub, Titles.Title AS [Titulo del Libro],
Publishers.Name AS NombrePub ,Authors.Author AS NombreAuthor FROM
Titles, Publishers, Authors
WHERE Titles.PubID =Publishers.PubID AND Titles.PubId = Authors.Au_Id
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
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 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
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
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 Explicit
Dim i As Integer
Dim curso As String
Dim alumno As String
Dim CadenaSQl As String
Data1.Caption = "Cursos"
Data1.Refresh
curso = List1.List(List1.ListIndex)
Data1.Recordset.MoveFirst
Data1.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 = CadenaSQl
Data1.RecordSource = txtSql
Data1.Refresh
List1.Refresh
End Sub
Figura 11. Resultado de WHERE para limitar el alcance de las funciones agregadas
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.
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 curso
SELECT 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
También puede utilizar una sintaxis propia de visual Basic para combinar varis
columnas en un sola dentro de la vista (Figura 13-b)
También puede utilizar las funciones de Visual Basic como parte de la 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.
Si se incluye más de una columna en la lista SELECT, todas ellas serán evaluados
para obtener un registro único
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
Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -79-
Con estas funciones se podrá utilizar las funciones agregadas de SQL para crear una
lista de subtotales obtenidos de la tabla Origén
Sintaxis
SELECT listacampos
FROM tabla
WHERE criterioselección
GROUP 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
Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -80-
Si queremos listar todos los productos cuya suma sea mayor a 100 se podría escribir
una sentencia SQL de la siguiente forma
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
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
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 igual
SELECT Cursos.* FROM Notas INNER JOIN Cursos ON Notas.CodCurso =
Cursos.CodCurso
Figura 19.-
Uso de INNER
JOIN EN SQL
LEFT JOIN
2
Aprendiendo Progrmaciòn de bases de datos con Visual Basic 6.0 de Curtis Smith Michael Admusin p 245
Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -83-
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 la
figura 7.30:
RIGTH JOIN
Funciona 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
Permiten crear vistas que contienen datos resumidos de una forma conocida como
referencia cruzada
Ejemplo
PROBLEMAS
Solución del diseño de base de datos simple pag 147 usando SQL y reportes
Se tiene la base de datos mostrada en la página 47 elaborar una aplicación usando
Instrucciones SQL
1:- Diseñe un formulario como se muestra, elimine las opciones de ver Detalle y cerrar
detalle, además solo use dos controles data
Option Explicit
Dim consulta As String
Dim DETALLE As String
Dim NombreBase As String
Sub mostrar()
DBGrid1.Visible = True :DBGrid2.Visible = True
Data1.Visible = True :Data2.Visible = True
End Sub
Sub Ocultar()
DBGrid1.Visible = False :DBGrid2.Visible = False
Data1.Visible = False :Data2.Visible = False
End Sub
Private Sub ArcCerrarBase_Click()
Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -86-
Ocultar
End Sub
Version cd
SOLUCION DE LA TERCERA PREGUNTA DEL EXAMEN USANDO SQL
Option Explicit
Dim i As Integer, NReg As Integer
Dim libro As String, consulta As String
Private Sub CdmAutor_Click()
List1.Clear
consulta = "SELECT DISTINCT Autor FROM Libros "
Data2.RecordSource = consulta: Data2.Refresh
With Data2.Recordset
.MoveLast: NReg = .RecordCount
.MoveFirst
For i = 0 To NReg - 1
List1.AddItem .Fields("Autor")
.MoveNext
Next
End With
End Sub
Private Sub CmdEditorial_Click()
List2.Clear
consulta = "SELECT DISTINCT Editorial FROM Libros "
Data2.RecordSource = consulta: Data2.Refresh
With Data2.Recordset
.MoveLast: NReg = .RecordCount
.MoveFirst
For i = 0 To NReg - 1
Sistemas de Información /Guía de Prácticas en Visual Basic 6.0 2007A/ Ismael Véliz Vilca -88-
List2.AddItem .Fields("Editorial")
.MoveNext
Next
End With
End Sub
Private Sub List1_Click()
libro = List1.List(List1.ListIndex)
consulta = "SELECT * FROM Libros Where Autor LIKE '" & libro & "'"
Data2.RecordSource = consulta: Data2.Refresh
End Sub
Private Sub List2_Click()
libro = List2.List(List2.ListIndex)
consulta = "SELECT * FROM Libros Where Editorial LIKE '" & libro & "'"
Data2.RecordSource = consulta: Data2.Refresh
End Sub
Ejercicios
1 Se tiene una hbase de datos cuyos campos CodALumno. Nombre , Nota, listas todos
los alumnos aprobados