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 |
| DISTINCTROW |
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.
|