 |
|
 |
Consultar datos en Transact SQL
La sentencia SELECT
La sentencia SELECT nos permite consultar los datos almacenados en una tabla de la base de datos.
El formato de la sentencia select es:
SELECT [ALL | DISTINCT ][ TOP expression [ PERCENT ] [ WITH TIES ] ] <nombre_campos> FROM <nombre_tabla> [ INNER | LEFT [OUTER]| RIGHT [OUTER] | CROSS] [JOIN ] <nombre_tabla> ON <condicion_join>[ AND|OR <condicion>] [WHERE <condicion> [ AND|OR <condicion>]] [GROUP BY <nombre_campos>] [HAVING <condicion>[ AND|OR <condicion>]] [ORDER BY <nombre_campo> [ASC | DESC]
|
El siguiente ejemplo muestra una consulta sencilla que obtiene el código y la "familia" de una tabla llamada familias (representaría familias de productos por ejemplo).
SELECT CO_FAMILIA, FAMILIA FROM FAMILIAS
| El uso del asterisco indica que queremos que la consulta devuelva todos los campos que existen en la tabla.
Ahora vamos a realizar una consulta obteniendo además de los datos de familias, los datos de las categorias y los productos.
SELECT
* FROM FAMILIASINNER JOIN CATEGORIAS ON CATEGORIAS.CO_FAMILIA = FAMILIAS.CO_FAMILIAINNER JOIN PRODUCTOS ON PRODUCTOS.CO_CATEGORIA = CATEGORIAS.CO_CATEGORIA
|
La combinación se realiza a través de la clausula INNER JOIN, que es una clasula exclusiva, es decir las familias que no tengan categorias y productos asociados no se devolveran.
Si queremos realizar la consulta para que no sea exclusiva, tenemos que utilizar LEFT JOIN. El uso de la palabra reservada OUTER es opcional.
SELECT
* FROM FAMILIASLEFT OUTER JOIN CATEGORIAS ON CATEGORIAS.CO_FAMILIA = FAMILIAS.CO_FAMILIALEFT OUTER JOIN PRODUCTOS ON PRODUCTOS.CO_CATEGORIA = CATEGORIAS.CO_CATEGORIA
|
Los registros que no tengan datos relacionados en una consulta LEFT JOIN devolveran en valor null en los campos que correspondan a las tablas en las que no tienen dato.
También podemos forzar un producto cartesiano (todos con todos) a través de CROSS JOIN.
SELECT
* FROM FAMILIASCROSS JOIN CATEGORIAS
|
La cláusula WHERE
La cláusula WHERE es la instrucción que nos permite filtrar el resultado de una sentencia SELECT.
SELECT
CO_FAMILIA, FAMILIA FROM FAMILIASWHERE CO_FAMILIA = 1
|
Por supuesto, podemos especificar varias condiciones para el WHERE:
SELECT
* FROM FAMILIASWHERE CO_FAMILIA = 1 OR CO_FAMILIA = 2
| Podemos agrupar varias valores para una condicion en la clausula IN:
SELECT
* FROM FAMILIASWHERE CO_FAMILIA IN ( 1 , 2)
|
La clausula WHERE se puede utilizar conjuntamente con INNER JOIN, LEFT JOIN ...
SELECT FAMILIAS.CO_FAMILIA, FAMILIAS .FAMILIA FROM FAMILIASINNER JOIN CATEGORIAS ON CATEGORIAS.CO_FAMILIA = FAMILIAS.CO_FAMILIAWHERE FAMILIAS.CO_FAMILIA > 1
|
Siempre que incluyamos un valor alfanumerico para un campo en la condición WHERE este debe ir entre comillas simples:
SELECT * FROM FAMILIASWHERE FAMILIA = 'FAMILIA 1'
|
Para consultar campos alfanumericos, es decir, campos de texto podemos utilizar el operador LIKE conjuntamente con comodines.
SELECT * FROM FAMILIASWHERE FAMILIA LIKE 'FAM%'
|
Los comodines que podemos utilizar en son los siguientes:
- % , representa cualquier cadena de texto de cero o más caracteres de cualquier longitud.
- _ , representa un caracter.
- [a-d], representa cualquier caracter del intervalo a-d.
- [abcd], representa cualquier caracter del grupo abcd.
- [^a-d], representa cualquier caracter diferente del intervalo a-d.
- [^abcd], representa cualquier caracter distinto del grupo abcd.
También podemos obtener los valores distintos utilizando DISTINCT.
SELECT
DISTINCT FAMILIA -- Devuelve los distintos valores de FAMILIAFROM FAMILIAS
|
Podemos limitar el número de registros que devuelve la consulta a través de la clausula TOP. La clausula TOP admite como parámetros un valor numérico entero o un porcentaje (sólo a partir de la version 2005)
SELECT
TOP 10 * -- Devuelve 10 registrosFROM FAMILIAS
|
SELECT
TOP 50 PERCENT * -- Devuelve el 50% de los registrosFROM FAMILIAS
|
La clausula TOP se puede combinar con WITH TIES en consultas agregadas.
La cláusula ORDER BY
Podemos especificar el orden en el que serán devueltos los datos a través de la cláusula ORDER BY.
SELECT CO_FAMILIA, FAMILIA FROM FAMILIASORDER BY FAMILIA DESC
|
También podemos indicar el índice del campo en la lista de selección en lugar de su nombre :
SELECT CO_FAMILIA, FAMILIA FROM FAMILIASORDER BY 2 DESC -- Ordena por FAMILIA
| |
| Añadir comentario ... |
Para preguntar utiliza los foros
|
|

|
Consultar datos en Transact SQL |
|
Autor:
Pedro Herrarte Sánchez
|
|
Visitas:
30602 |
Fecha de publicación:
05/07/2007 |
Pedro Herrarte, es consultor independiente, ofreciendo servicios de consultoría, análisis, desarrollo y formación.
Posee mas de diez años de experiencia trabajando para las principales empresas de España.
Es especialista en tecnologías .NET, entornos Web, bases de datos (SQL Server y ORACLE) e integración de sistemas.
Es experto en desarrollo (C#, ASP.NET, VB.Net, T-SQL, PL/SQL, , ASP, CGI , C, Pro*C, Java, Essbase, Vignette, PowerBuilder y Visual Basic ...) y bases de datos (SQL Server y ORACLE).
Es fundador, diseñador y programador de www.devjoker.com. |
|
|
Visitas:
111
|
Comentarios:
3
|
Archivo:
Articulos
|
Visitas:
812
|
Comentarios:
2
|
Archivo:
Articulos
|
Visitas:
767
|
Comentarios:
3
|
Archivo:
Articulos
|
Visitas:
674
|
Comentarios:
2
|
Archivo:
Articulos
|
Visitas:
3185
|
Comentarios:
2
|
Archivo:
Articulos
|
Visitas:
14575
|
Comentarios:
7
|
Archivo:
Articulos
|
Visitas:
1502
|
Comentarios:
3
|
Archivo:
Articulos
|
|
Visitas:
697
|
Comentarios:
2
|
Archivo:
Articulos
|
|
Visitas:
369
|
Comentarios:
0
|
Archivo:
Articulos
|
Visitas:
2035
|
Comentarios:
2
|
Archivo:
Articulos
|
|
|
 |
|
 |