InicioArticulos y noticiasBases de datosProgramaciónForosInternetServiciosContratacionEmail
Tutorial de Transact SQL
Introducción a Transact SQL
Programación con Transact SQL
Fundamentos de Transact SQL
Tipos de datos en Transact SQL
Variables en Transact SQL
Equivalencia de datos de SQL Server y .NET
Operadores en Transact SQL
Estructuras de control en Transact SQL
Control de errores en Transact SQL
Consultar datos en Transact SQL
Consultas agregadas
Select FOR XML
Operaciones con conjuntos.
Insertar datos en Transact SQL
Actualizar datos en Transact SQL
Borrar datos en Transact SQL
Transacciones en Transact SQL
Procedimientos almacenados en Transact SQL
Funciones en Transact SQL
Funciones integradas de Transact SQL (I)
Triggers en Transact SQL
Cursores en Transact SQL
SQL dinámico en Transact SQL
SQL
  Tutorial SQL
SQL Server
  Tutorial de Transact-SQL
ORACLE
  Tutorial PL/SQL
.NET
  Introducción a.NET
  Conceptos generales .NET
  Tutorial C#
  LinQ
  WCF
Reina Roja
  Humor
  Bibliografia
  Acerca de ...

Afiliados
La Web del programador
MundoProgramacion


 

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.


SELECT
*

FROM FAMILIAS

    Ahora vamos a realizar una consulta obteniendo además de los datos de familias, los datos de las categorias y los productos.


SELECT
*
FROM
FAMILIAS

INNER JOIN CATEGORIAS

ON CATEGORIAS.CO_FAMILIA = FAMILIAS.CO_FAMILIA

INNER 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 FAMILIAS

LEFT OUTER JOIN CATEGORIAS

ON CATEGORIAS.CO_FAMILIA = FAMILIAS.CO_FAMILIA

LEFT 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 FAMILIAS

CROSS 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 FAMILIAS

WHERE CO_FAMILIA = 1

    Por supuesto, podemos especificar varias condiciones para el WHERE:


SELECT
*

FROM FAMILIAS

WHERE CO_FAMILIA = 1

OR CO_FAMILIA = 2

    Podemos agrupar varias valores para una condicion en la clausula IN:


SELECT
*

FROM FAMILIAS

WHERE CO_FAMILIA IN ( 1 , 2)

    La clausula WHERE se puede utilizar conjuntamente con INNER JOIN, LEFT JOIN ...


SELECT
FAMILIAS.CO_FAMILIA,

FAMILIAS.FAMILIA

FROM FAMILIAS

INNER JOIN CATEGORIAS

ON CATEGORIAS.CO_FAMILIA = FAMILIAS.CO_FAMILIA

WHERE 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 FAMILIAS

WHERE FAMILIA = 'FAMILIA 1'

    Para consultar campos alfanumericos, es decir, campos de texto podemos utilizar el operador LIKE conjuntamente con comodines.


SELECT
*

FROM FAMILIAS

WHERE 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 FAMILIA

FROM 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 registros

FROM FAMILIAS


SELECT
TOP 50 PERCENT * -- Devuelve el 50% de los registros

FROM 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 FAMILIAS

ORDER 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 FAMILIAS

ORDER BY 2 DESC -- Ordena por FAMILIA


Inicio | Tutorial de Transact SQL Control de errores en Transact SQLTutorial de Transact SQLConsultas agregadas Versión para imprimir Foros de consulta


Añadir comentario ... Para preguntar utiliza los foros
Autor:

Título:


Para preguntar utiliza los foros.



Inicio | Tutorial de Transact SQL Control de errores en Transact SQLTutorial de Transact SQLConsultas agregadas Versión para imprimir

Consultar datos en Transact SQL
Autor: Pedro Herrarte Sánchez
Visitas: 11234 Fecha de publicación: 05/07/2007
Pedro Herrarte, es consultor independiente, ofreciendo sercivios 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.




18/08/2008 SQL Server 2008
Visitas: 272 | Comentarios: 0 | Archivo: Articulos
Categorias: Transact-SQL
Visitas: 233 | Comentarios: 0 | Archivo: Articulos
Categorias: C#|ADO.NET|LinQ
Visitas: 268 | Comentarios: 1 | Archivo: Articulos
Categorias: Humor
Visitas: 185 | Comentarios: 0 | Archivo: Articulos
Categorias: WCF
Visitas: 162 | Comentarios: 0 | Archivo: Articulos
Categorias: WCF
Visitas: 247 | Comentarios: 0 | Archivo: Articulos
Categorias: ASP.NET
Visitas: 325 | Comentarios: 5 | Archivo: Articulos
Categorias: ASP.NET
Visitas: 5225 | Comentarios: 4 | Archivo: Articulos
Categorias: C#|Transact-SQL|LinQ
Visitas: 658 | Comentarios: 1 | Archivo: Articulos
Categorias: Visual Studio
Visitas: 1551 | Comentarios: 1 | Archivo: Articulos
Categorias: Transact-SQL

Útimos temas recibidos en los foros ...
INSTALAR VB.NET 2005 EXPRESS EN WINDOWS VISTA por tito2701 ... [Visual Basic .NET] 13 05/07/2007
LLave Primaria por Martin ... [ORACLE] 6 22/06/2007
dar formato a mail por Pako ... [C#] 4 16/03/2007
MP3 en Windows Vista por Alf ... [Actualidad] 3 20/04/2008
autogenerado por mily ... [Visual Basic .NET] 0 27/08/2008
Instalación de Oracle por Tatatn ... [ORACLE] 0 27/08/2008
For Update, existe alguna otra forma? por Sus ... [ORACLE] 1 27/08/2008
Cambiar el color del nodo de un treeview por Moises Bermdez Contreras ... [ASP.NET] 3 15/10/2007
librerias dinamicas por lupitaor ... [C#] 2 26/08/2008
Vista SQL 2005 limitada por Factor ... [SQL] 2 26/08/2008
Combobox por Corven ... [C#] 4 10/07/2008
Datagrid view por Jazmin ... [ASP.NET] 5 25/08/2008

Access CGI JSP ORACLE UNIX
Actualidad HTML/DHTML/XHTML LINUX PHP Visual Basic .NET
ASP ISAPI MS DOS Power Builder Visual Basic 6.0
ASP.NET Java mySQL SQL WIN 98/NT/2000/XP
C# JavaScript Opinion SQL Server

devjoker  Te recomendamos además ...
21/02/2007 Subconsultas    forma parte de...Tutorial SQL
27/08/2007 Enviar email con C#
09/05/2006 Como leer XML con C#
13/04/2008 String.Format
27/02/2007 ¿Permite Windows Vista reproducir peliculas descargadas o "Piratas"? SI, si lo permite
03/10/2006 Creación de objetos    forma parte de...Tutorial C#
29/09/2006 Assemblies    forma parte de...Conceptos generales .NET
18/08/2008 SQL Server 2008
09/10/2006 Cadenas de texto    forma parte de...Tutorial C#
12/01/2006 Introducción a PLSQL    forma parte de...Tutorial PL/SQL

 

Encuesta
¿A que perfil te adaptas mejor?
[Ver] [Votar]