Tutorial de SQL
Por Lic. Carlos Quiñones Ruvalcaba
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.
1
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 basándose 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;
2
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
[Link] 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;
3
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;
4
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\[Link]';
En donde c:\databases\[Link] es la base de datos que
contiene la tabla Empleados.