Publicado el 02/May/2004
Actualizado el 26/May/2008
Autor: Guillermo 'guille' SomNota 26/May/08:
Aquí tienes más ejemplos de instrucciones de SQL usadas desde ADO.NET
Los links:
Sobre el contenido de esta sección
- Seleccionar los datos a cargar de una tabla (SELECT) (02/May/04)
- Clasificar los datos seleccionados (ORDER BY) (02/May/04)
- Indicar el número máximo de registros a devolver (TOP) (02/May/04)
- Actualizar los datos según un criterio (UPDATE) (02/May/04)
- Eliminar los datos según un criterio (DELETE) (02/May/04)
Seleccionar los datos a cargar de una tabla (02/May/04)
Esta es la forma más sencilla y habitual de usar las órdenes SQL.
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 = 'Madrid'
Este código SQL selecciona los registros de la tabla Clientes que residan en Madrid.
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, NIF FROM Clientes WHERE Provincia = 'Madrid'TIP:
Por rendimiento, es recomendable devolver sólo los campos que realmente necesitamos en lugar de devolver todos los campos.
Clasificar los datos seleccionados (ORDER BY) (02/May/04)
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, NIF FROM Clientes WHERE Provincia = 'Madrid' ORDER BY ApellidosPero 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, NIF FROM Clientes WHERE Provincia = 'Madrid' ORDER BY Apellidos DESCO si queremos que la clasificación se haga usando dos campos, esos campos los indicaremos separados por comas:
SELECT Nombre, Apellidos, NIF FROM Clientes WHERE Provincia = 'Madrid' ORDER BY Apellidos, NombreY 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 Provincia = 'Madrid' ORDER BY Apellidos DESC, Nombre DESCTambién podemos clasificar en distinto orden los campos indicados tras ORDER BY, por ejemplo:
SELECT * FROM Clientes ORDER BY Apellidos DESC, Nombre ASC, NIF DESC.
Indicar el número máximo de filas a devolver (TOP) (02/May/04)
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 Provincia = 'Madrid' ORDER BY Apellidos DESCTOP no diferencia 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, NIF FROM Clientes WHERE Provincia = 'Madrid' ORDER BY Apellidos DESCNota:
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.
No se si es que TOP se comporta de forma diferente en ADO.NET.
Actualizar los datos según un criterio (UPDATE) (02/May/04)
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 NPr = 28 WHERE Provincia = 'Madrid'
Esto hará que se asigne un valor 28 al campo NPr 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 NPr = 28, Patrón = 'San Isidro' WHERE Provincia = 'Madrid'
Una vez ejecutadas estas instrucciones SQL no se podrá deshacer los cambios, al menos si estamos trabajando con Recordsets DAO o ADO, 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 los datos según un criterio (DELETE) (02/May/04)
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 Madrid:
DELETE * FROM Clientes WHERE Provincia = 'Madrid'
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.
.
Sobre el contenido de esta sección.
En esta página te mostraré algunas instrucciones SQL que te permitirán manejar datos de forma más o menos fácil o al menos te servirán como punto de referencia cuando necesites hacer 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, en estos casos es posible que existan otros links (enlaces) a las páginas de ADO y DAO "normales", las que están en la sección de VB.Si no se indica nada (sobre todo si no hay ejemplos de código), las instrucciones SQL indicadas serán válidas tanto para DAO, ADO y ADO.NET y para bases de Access o SQL Server
Nota:
El que se llame órdenes SQL (o instrucciones SQL), no quiere decir que sólo sean válidos para bases de datos SQL Server, ya que el "lenguaje" SQL es un estándar (o casi) que se usa para manejar los datos de cualquier base de datos, (al menos las de Access y SQL Server).