viernes, 1 de abril de 2011

INSTRUCCIONES SQL para manejar datos desde Visual Basic .NET

En esta página te mostraré algunas instrucciones SQL que te permitirán manejar datos de forma clara y te servirán como punto de referencia cuando necesites programar algo en concreto.

Algunas de estas instrucciones (u órdenes) servirán tanto para bases de datos del tipo Access como de SQL Server (e incluso otros proveedores de datos), en la medida de lo posible, intentaré indicar si hay alguna restricción para algunos de los proveedores.

También intentaré informarte cómo usar esas instrucciones, ya que algunas simplemente servirán para seleccionar datos y otros harán cambios en las tablas afectadas.

Los ejemplos principalmente serán para usar con ADO.NET, pero en otras ocasiones también serán válidas para ADO e incluso para DAO.

Si no se indica nada (sobre todo si no hay ejemplos de código), las instrucciones SQL indicadas serán válidas tanto para ADO.NET como para bases de Access o SQL Server

 

PARA CONSULTA Y SELECCION DE DATOS

Normalmente usaremos este tipo de instrucciones para cargar los datos en un DataTable (si trabajamos con ADO.NET o en un Recordset si trabajamos con ADO o DAO).

Por ejemplo:

SELECT * FROM Clientes WHERE Provincia = 'Toluca'

Este código SQL selecciona los registros de la tabla Clientes que residan en Toluca. Los campos que devolvería serían todos, ya que hemos indicado * después de SELECT.

Si sólo queremos que devuelva los datos contenidos en los campos Nombre, Apellidos y NIF haríamos esto otro:

SELECT Nombre, Apellidos, NIP FROM Clientes WHERE Municipio = 'Toluca'

TIP:
Por rendimiento, es recomendable devolver sólo los campos que realmente necesitamos en lugar de devolver todos los campos.

 

CLASIFICACION DE DATOS SELECCIONADOS (ORDER BY)

También podemos indicar que esos datos se devuelvan clasificados por cualquier campo, por ejemplo por los Apellidos de forma ascendente (la forma predeterminada):

SELECT Nombre, Apellidos, NIP FROM Clientes WHERE Municipio = ‘Toluca' ORDER BY Apellidos

 

Pero si queremos los datos de mayor a menor (descendente), le añadimos la instrucción DESC después del campo por el que queremos clasificar:

SELECT Nombre, Apellidos, NIP FROM Clientes WHERE Municipio = 'Toluca' ORDER BY Apellidos DESC

 

O si queremos que la clasificación se haga usando dos campos, esos campos los indicaremos separados por comas:

SELECT Nombre, Apellidos, NIP FROM Clientes WHERE Municipio = 'Toluca' ORDER BY Apellidos, Nombre

 

Y si queremos que el orden sea descendente, le añadimos a continuación la instrucción DESC detrás de cada campo:

SELECT Nombre, Apellidos, NIF FROM Clientes WHERE Municipio = 'Toluca' ORDER BY Apellidos DESC, Nombre DESC

 

También podemos clasificar en distinto orden los campos indicados tras ORDER BY, por ejemplo:

SELECT * FROM Clientes ORDER BY Apellidos DESC, Nombre ASC, NIP DESC

 

INDICAR EL NUMERO MAXIMO DE FILAS A DEVOLVER EN UNA CONSULTA (TOP)

Al realizar una selección de datos clasificados (usando ORDER BY), podemos indicar el número de filas (registros) máximos que queremos devolver, para ello indicaremos TOP y el número de filas o el porcentaje de filas a devolver:

Con las siguientes instrucciones se devolverán los primeros 50 registros (si los hay) que cumplan las condiciones indicadas:

SELECT TOP 50 Nombre, Apellidos, NIF FROM Clientes WHERE Municipio = 'Toluca' ORDER BY Apellidos DESC

TOP no diferencía filas que sean iguales, es decir, si la fila 50 y la 51 tienen los mismos Apellidos, devolverá 51.

 

En este otro ejemplo, se devolverá el 20% de las filas que coincidan con las instrucciones SQL indicadas:

SELECT TOP 20 PERCENT Nombre, Apellidos, NIP FROM Clientes WHERE Municipio = 'Toluca' ORDER BY Apellidos DESC

Nota:
Dependiendo de que estemos usando DAO o ADO el número de filas devueltas puede que sea distinto de cuando usamos ADO.NET, al menos en una misma tabla, usando TOP 150, con ADO me devolvía 151 filas y con ADO.NET me devolvía 150.

Actualizar o Modificar los datos según un criterio (UPDATE)

Si lo que quieres es actualizar el contenido de un campo cuando se cumpla un criterio indicado, en lugar de recorrer todas las filas, podemos usar UPDATE / SET, por ejemplo:

UPDATE Clientes SET NIP = 28 WHERE Municipio = 'Toluca'

Esto hará que se asigne un valor 28 al campo NIP de todos los clientes que cumplan lo que se indica después de WHERE, es decir que cumplan el criterio indicado.

 

También podemos indicar (después de SET) varios campos a actualizar, separándolos por comas:

UPDATE Clientes SET NIP = 28, Patrón = 'San Isidro Metepec' WHERE Municipio = 'Toluca'

Una vez ejecutadas estas instrucciones SQL no se podrá deshacer los cambios, ya que si trabajamos con ADO.NET, esos datos sólo se harán permanentes al actualizar "físicamente" los datos con el DataAdapter.

 

ELIMINAR DATOS SEGUN CRITERIO (DELETE)

De la misma forma que podemos actualizar la información mediante un criterio WHERE, podemos eliminar los registros de forma "masiva" usando la instrucción DELETE.

Por ejemplo para eliminar todos los Clientes de Toluca:
DELETE * FROM Clientes WHERE Municipio = 'Toluca'

Nota:
Ni que decir tiene que este tipo de instrucciones SQL hay que usarla con muchísima precaución, ya que si la tabla está ligada a otra, también se perderán los datos relacionados.
Y una vez eliminados los datos... ya no se pueden recuperar.

El uso de DELETE no elimina la tabla, aunque se eliminaran todos los registros.

No hay comentarios:

Publicar un comentario