Cláusulas

 

Predicados Where Select From Group By Order By Having Volver

Predicados ALL, DISTINCT, DISTINCTROW, TOP

 

Especifica registros seleccionados con consultas SQL

Sintaxis

SELECT [ALL | DISTINCT | DISTINCTROW | [TOP n [PERCENT]]]
FROM tabla

Una instrucción SELECT que contiene estos predicados consta de las siguientes partes:

Parte

Descripción

ALL

Se supone si no se incluye uno de los predicados. El motor de base de datos Microsoft Jet selecciona todos los registros que cumplen las condiciones de la instrucción SQL . Los dos ejemplos siguientes son equivalentes y devuelven todos los registros de la tabla Empleados:

 

SELECT ALL FROM Empleados  ORDER BY IdEmpleado;

 

SELECT FROM Empleados  ORDER BY IdEmpleado;

 

DISTINCT

Omite los registros que contienen datos duplicados en los campos seleccionados. Para ser incluidos en los resultados de la consulta, los valores de cada campo enumerado en la instrucción SELECT deben ser únicos. Por ejemplo, varios empleados incluidos en la tabla Empleados pueden tener el mismo apellido. Si dos registros contienen Pérez en el campo Apellidos, la siguiente instrucción SQL devuelve sólo un registro que contenga Pérez:

 

SELECT DISTINCT  Apellidos  FROM Empleados;

 

Si omite DISTINCT, esta consulta devuelve los dos registros con Pérez.

Si la cláusula SELECT contiene más de un campo, la combinación de valores de todos los campos debe ser única para que un determinado registro se incluya en los resultados.

 

El resultado de una consulta que utiliza DISTINCT no se puede actualizar y no refleja los cambios subsiguientes que han realizado otros usuarios.

 

DISTINCTROW

Omite datos que se basan en registros completamente duplicados, no sólo en campos duplicados. Por ejemplo, puede crear una consulta que combine las tablas Clientes y Pedidos en el campo IdCliente. La tabla Clientes no contiene campos IdCliente duplicados, pero la tabla Pedidos sí, porque cada cliente puede tener muchos pedidos. La siguiente instrucción SQL muestra cómo puede utilizar DISTINCTROW para crear una lista de compañías que han realizado al menos un pedido pero sin los detalles acerca de dichos pedidos:

 

SELECT DISTINCTROW NombreCompañía FROM Clientes INNER JOIN Pedidos ON Clientes.IDCliente = Pedidos.IdCliente  ORDER BY NombreCompañía;

 

Si omite DISTINCTROW, esta consulta produce varias filas para cada compañía que tenga más de un pedido.

 

DISTINCTROW tiene efecto sólo cuando se seleccionan campos de algunas pero no de todas las tablas utilizadas en la consulta. DISTINCTROW se omite si la consulta incluye sólo una tabla o si incluye en los resultados campos de todas las tablas.

 

TOP n [PERCENT]

Devuelve cierto número de registros que se hallan en la parte superior o inferior de un intervalo especificado por una cláusula ORDER BY. Suponga que desea ver los nombres de los 25 mejores estudiantes del curso 1994:

 

SELECT TOP 25 Nombre, Apellidos FROM Estudiantes  WHERE AñoEscolar = 1994
ORDER BY NotaMedia DESC;

 

Si no incluye la cláusula ORDER BY, la consulta devolverá un conjunto arbitrario de 25 registros de la tabla Estudiantes que satisfagan la cláusula WHERE.

 

El predicado TOP no elige entre valores iguales. En el ejemplo anterior, si las notas medias más altas de los puestos vigésimo quinto y vigésimo sexto son iguales, la consulta devolverá 26 registros.

 

También puede utilizar la palabra reservada PERCENT para devolver cierto porcentaje de los registros que se hallan en la parte superior e inferior del intervalo especificado por una cláusula ORDER BY. Imagine que, en vez de los 25 mejores estudiantes, desea ver el 10 por ciento inferior de la clase:

 

SELECT TOP 10 PERCENT Nombre, Apellidos FROM Estudiantes WHERE AñoEscolar = 1994 ORDER BY NotaMedia ASC;

 

El predicado ASC especifica una devolución de los valores inferiores. El valor que sigue TOP debe ser un Entero sin signo .

 

TOP no influye en si la consulta se puede o no actualizar.

 

tabla

Nombre de la tabla de la cual se recuperan los registros.

 

Volver

 

*