Maestros del Web


Estás en Inicio / Editorial / Bases de Datos

15.08.2003

Consultas de Selección

Las consultas de selección se utilizan para indicar al motor de datos que devuelva información de las bases de datos, esta información es devuelta en forma de conjunto de registros que se pueden almacenar en un objeto recordset.

2. Consultas de Selección

Las consultas de selección se utilizan para
indicar al motor de datos que devuelva información de las bases de
datos, esta información es devuelta en forma de conjunto de registros
que se pueden almacenar en un objeto recordset. Este conjunto de registros
es modificable.

2.1 Consultas básicas

La sintaxis básica de una consulta
de selección es la siguiente:

SELECT Campos FROM Tabla; 

En donde campos es la lista de campos
que se deseen recuperar y tabla es el origen de los mismos, por ejemplo:

SELECT Nombre, Telefono FROM Clientes;

Esta consulta devuelve un recordset con
el campo nombre y teléfono de la tabla clientes.

2.2 Ordenar los registros

Adicionalmente se puede especificar el
orden en que se desean recuperar los registros de las tablas mediante la claúsula
ORDER BY Lista de Campos. En donde Lista de campos representa los campos a ordenar.
Ejemplo:

SELECT CodigoPostal, Nombre, Telefono
FROM Clientes ORDER BY Nombre;

Esta consulta devuelve los campos CodigoPostal,
Nombre, Telefono de la tabla Clientes ordenados por el campo Nombre.

Se pueden ordenar los registros por mas
de un campo, como por ejemplo:

SELECT CodigoPostal, Nombre, Telefono
FROM Clientes ORDER BY
CodigoPostal, Nombre;

Incluso se puede especificar el orden
de los registros: ascendente mediante la claúsula (ASC -se toma este valor por defecto) ó descendente (DESC)

SELECT CodigoPostal, Nombre, Telefono
FROM Clientes ORDER BY
CodigoPostal DESC , Nombre ASC;

2.3 Consultas con Predicado

El predicado se incluye entre la claúsula
y el primer nombre del campo a recuperar, los posibles predicados son:

Predicado Descripción
ALL Devuelve todos
los campos de la tabla
TOP Devuelve un determinado número
de registros de la tabla
DISTINCT Omite los registros cuyos
campos seleccionados coincidan totalmente
DISTINCROW Omite los registros duplicados
basandose en la totalidad del registro y no sólo en los campos
seleccionados.

ALL:

Si no se incluye ninguno
de los predicados se asume ALL.
El Motor de base de datos selecciona todos los registros que cumplen las condiciones
de la instrucción SQL. No se conveniente abusar de este predicado ya
que obligamos al motor de la base de datos a analizar la estructura de la tabla
para averiguar los campos que contiene, es mucho más rápido indicar
el listado de campos deseados.

SELECT ALL FROM Empleados;
SELECT * FROM Empleados;

TOP:

Devuelve un cierto número de registros que entran entre al principio
o al final de un rango especificado por una cláusula ORDER
BY
. Supongamos que queremos recuperar los nombres de los 25
primeros estudiantes del curso 1994:

SELECT TOP 25 Nombre, Apellido FROM
Estudiantes
ORDER BY Nota DESC;

Si no se incluye la cláusula ORDER
BY
, la consulta devolverá un conjunto arbitrario de 25
registros de la tabla Estudiantes .El predicado TOP no elige entre valores iguales. En el ejemplo anterior, si la nota media número
25 y la 26 son iguales, la consulta devolverá 26 registros. Se puede
utilizar la palabra reservada PERCENT para devolver un cierto porcentaje de registros que caen al principio o al final
de un rango especificado por la cláusula ORDER
BY
. Supongamos que en lugar de los 25 primeros estudiantes deseamos
el 10 por ciento del curso:

SELECT TOP 10 PERCENT Nombre, Apellido
FROM Estudiantes
ORDER BY Nota DESC; 

El valor que va a continuación
de TOP debe ser un Integer sin signo.TOP no afecta a la posible actualización
de la consulta.

DISTINCT:

Omite
los registros que contienen datos duplicados en los campos seleccionados. Para
que los valores de cada campo listado en la instrucción SELECT se incluyan en la consulta deben ser únicos.

Por ejemplo, varios empleados listados
en la tabla Empleados pueden tener el mismo apellido. Si dos registros contienen
López en el campo Apellido, la siguiente instrucción SQL devuelve
un único registro:

SELECT DISTINCT Apellido FROM Empleados;
    

Con otras palabras el predicado DISTINCT devuelve aquellos registros cuyos campos indicados en la cláusula SELECT
posean un contenido diferente. El resultado de una consulta que utiliza DISTINCT
no es actualizable y no refleja los cambios subsiguientes realizados por otros
usuarios.

DISTINCTROW:

Devuelve los registros diferentes
de una tabla; a diferencia del predicado anterior que sólo se fijaba
en el contenido de los campos seleccionados, éste lo hace en el contenido
del registro completo independientemente de los campo indicados en la cláusula SELECT.

SELECT DISTINCTROW Apellido FROM Empleados;

Si la tabla empleados contiene dos registros:
Antonio López y Marta López el ejemplo del predicado DISTINCT devuleve un único registro con el valor López en el campo Apellido
ya que busca no duplicados en dicho campo. Este último ejemplo devuelve
dos registros con el valor López en el apellido ya que se buscan no duplicados
en el registro completo.

2.4 Alias

En determinadas circunstancias es necesario
asignar un nombre a alguna columna determinada de un conjunto devuelto, otras
veces por simple capricho o por otras circunstancias. Para resolver todas ellas
tenemos la palabra reservada AS que se encarga de asignar el nombre que deseamos
a la columna deseada. Tomado como referencia el ejemplo anterior podemos hacer
que la columna devuelta por la consulta, en lugar de llamarse apellido (igual
que el campo devuelto) se llame Empleado. En este caso procederíamos
de la siguiente forma:

SELECT DISTINCTROW Apellido AS Empleado
FROM Empleados;

2.5 Recuperar Información de una
base de Datos Externa

Para concluir este capítulo se
debe hacer referencia a la recuperación de registros de bases de datos
externa. Es ocasiones es necesario la recuperación de información
que se encuentra contenida en una tabla que no se encuentra en la base de datos
que ejecutará la consulta o que en ese momento no se encuentra abierta,
esta situación la podemos salvar con la palabra reservada IN de la siguiente
forma:

SELECT DISTINCTROW Apellido AS Empleado
FROM Empleados
IN 'c:\databases\gestion.mdb';

En donde c:\databases\gestion.mdb es la
base de datos que contiene la tabla Empleados.

Siguiente capítulo: Criterios
de Selección

banner

  1. Introducción
  2. Consultas
    de Selección
  3. Criterios
    de Selección
  4. Agrupamiento
    de Registros y Funciones Agregadas
  5. Consultas
    de Actualización
  6. Tipos
    de Datos
  7. SubConsultas
  8. Consultas
    y Referencias Cruzadas
  9. Consultas
    de Unión Interna
  10. Consultas
    de Unión Externas
  11. Estructuras
    de las Tablas
  12. Consultas
    con Parámetros
  13. Acceso
    a las Bases de Datos Externas
  14. Omitir los permisos de ejecución
  15. La
    Cláusula Procedure
  16. Anexos

Califica esta nota:

1 estrella2 estrellas3 estrellas4 estrellas5 estrellas (15 votos, promedio: 4 de 5)
Loading ... Loading ...

Sobre el autor

Claudio Casares
Redactor del tutorial de SQL

Si eres nuevo en Maestros del Web y te agradan nuestras publicaciones, te invitamos a suscribirte a nuestro Feed.

Sindícanos en: Google Reader, Bloglines, My Yahoo o My MSN | ¿Qué es el Feed?

Comentarios

32 comentarios en total.

  1. jose 01.12.2006 - 17:00 - #

    esta muy bueno el articulo

  2. Sebastian 03.01.2007 - 06:49 - #

    Muy Instructivo Felicitaciones

  3. black 19.01.2007 - 12:50 - #

    como dices eso Diabla ! debes ser una pala !

  4. Elias 23.01.2007 - 09:16 - #

    Si me parece bueno el tutorial para personas que se inician en SQL… XD

  5. catalina 10.02.2007 - 15:47 - #

    no del nabo

  6. jumexpa 02.03.2007 - 09:24 - #

    me parece muy bueno para la gente ke estamos empezando

  7. Israel 21.08.2007 - 09:53 - #

    El Material es muy bueno,ademas quiero felicitarte porque la pagina es muy atractiva,solo me queda mas que agradecerte por este buen material sobre sql.

  8. JOHN 22.08.2007 - 17:11 - #

    Muy buena pagin, sencilla y bien estructurada, es solo que …
    Tienes un Maldito espacio en blanco a la derecha, coloca imagenes de como queda mi resultado en el momento que ejecuto…
    Gracias…

  9. Lucy 19.09.2007 - 11:49 - #

    Muy buena la información…me sirvio mucho ¡¡Graacias!

  10. Javier 25.09.2007 - 09:58 - #

    Muy buen Sitio Felicidades, gusto lo q buscaba.

  11. ESTA MUY INTERESANTE 09.10.2007 - 15:31 - #

    ME GUSTARIA TENER MAS INFORMACION SOBRE SQL GRACIAS

  12. WILSON 09.10.2007 - 15:32 - #

    ESTA MUY INTERESANTE EL TEMA

  13. juan carlos 13.11.2007 - 09:32 - #

    esta xevere el tutorial, esta muy bien explicado para poder entenderlo en poco tiempo..gracias

  14. ivan 13.11.2007 - 10:58 - #

    Solo te digo gracias… muy bueno… y que bueno que comparta su conocimiento

  15. irwin 20.11.2007 - 18:37 - #

    realmente muy bien explicado, quiero agradecerte por compartir tu conocimiento muchar gracias.

  16. Daniel 21.12.2007 - 17:14 - #

    Hola, tengo una duda con respecto al select.
    Si deseo realizar un select que me traiga los registros de un campo en particular pero este campo deseo pasarlo por parametros. Ej:
    Tengo la tabla personas que contienen los campos, apellido1, apellido2, nombre1, nombre2 y deseo que me debuelva solo uno de los campos pero de forma dinamica, dependiendo de la seleccion del usuario.

    select @campo from tabla

    en donde @campo es el campo que deseo obtener, como lo podria hacer?
    Si fuera necesario me gustaria evitar el uso de if para decidir que select utilizar.

    Gracias.

  17. Alex 07.01.2008 - 20:38 - #

    gracias por tener este portal y compartir el conocimiento con los demas solo quiero saber si hay de alguna manera o links para ensenar a los ninos mas facil.
    gracias.
    espero que me ayuden

  18. Mauricio 08.01.2008 - 09:37 - #

    Muy bien explicado. Ojalá haya gente así que explique para los que recién empiezan en esto y están aprendiendo.
    Podrás hacer uno para php? o ya hay uno hecho y yo no me dí cuenta?

    Saludos.

    Mauricio, de Argentina.

  19. Daniel Ch. 28.01.2008 - 18:00 - #

    Muy buen portal, es uno de los mejores que he visto por el tipo de informacion y la forma como la explican felicitaciones a los autores…

    Gracias

    Daniel, Guate…

  20. william chaparro 04.02.2008 - 15:52 - #

    Me parece algo muy instructivo gracias por crear este sitio ya que en el hemos podido sar solucion a muchas dudas de sql me gustaria saber mas de este programa por su atencion gracias

  21. sahito 28.02.2008 - 12:31 - #

    muy buena y completa pero tampoco m agrada mucho el espacio q queda en la derecha. aprovechenlo :)

  22. Ecuador Extremo 03.03.2008 - 02:43 - #

    Muy bueno el articulo, principalmente para los que recien estamos empezando.

  23. Olga 21.03.2008 - 15:42 - #

    Muy bueno me ha servido muchisimo .

  24. Ivan 27.03.2008 - 11:20 - #

    EXCELENTE ARTICULO, pero tengo un problema que aun no he podido resolver,.. me he dado infinitas vueltas por la red y no puedo sacarlo. El problema es el siguiente Tengo una tabla con respuestas a preguntas que estan en otra tabla, y quiero saber cuantas respuestas negativas tiene cada pregunta ( negativa => < 2), la consulta solo me muestra las cuentas que contienen menores que dos pero no considera las otras preguntas, es decir me muestra lo siguiente
    pregunta negativas
    p1 5
    p2 2
    p4 4
    p5 3

    no me muestra p3 pues p3 no tiene respuestas negativas, pero en ese caso deberia mostrarme
    p3 0
    y no lo hace….. ayuda porfavor

  25. equihua 20.04.2008 - 12:06 - #

    esta muy bien explicado camara arre arre

  26. Julio 12.05.2008 - 16:47 - #

    Muy bueno, me gustaria alguns ej. de select anidados , y tambien el uso de count para select anidado
    TK

  27. pepe 15.05.2008 - 10:12 - #

    hola a todos espero y me hechen la mano tengo una consulta en la que quiero mostrar los valores de una tabla pero me aparecen duplicados la sentensi es la siguiente :”select distinct nombre_accidentado,numero_ficha_traba, fecha_accidente, fecha_alta, dpte_ocurio, (fecha_alta-fecha_accidente) from persona_accidente, persona_trabajo”
    no se si hay otra forma de acer esto gracias.

  28. Felix 26.05.2008 - 23:30 - #

    Saludos:
    A mi tambien me gustarian algunos ejemplos, asi que si algun amigo se conecta en este tema… agradeceria nos ayude con algun ejemplo.

  29. guillermo 26.05.2008 - 23:32 - #

    Hola.. la explicacion es estupenda, pero como algunos opinan si seria bueno unos cuantos ejemplos ..

  30. edoardo 27.05.2008 - 13:30 - #

    Como dicen por allí “Ahora faltan los Ejemplos”.

  31. Lucy 27.05.2008 - 13:31 - #

    Gracias, tu información me ha ayudado a hacer una aplicación.

  32. PiÑaLoka 16.06.2008 - 16:59 - #

    no pos esta shido este articulo esta delujo
    i aguanten la 51 taba5h1nes

Deja tu Comentario


Maestros del Web se reserva el derecho de moderación de los comentarios. Evita utilizar palabras soeces, ataques directos, descalificativos, insultos, de lo contrario tu comentario será eliminado.


Boletín

Agrega nuestro feed a  Netvibes
wikio Add to Technorati Favorites

-


Maestros del Web es el punto de encuentro para los entusiastas de la red.

Creative Commons by-nc-sa 3.0 | Política de Privacidad | CMS: Wordpress