Predicados ALL, DISTINCT, DISTINCTROW o TOP

Especifica registros seleccionados con consultas SQL (lenguaje de consulta estructurado (SQL): lenguaje de programación y consulta de bases de datos ampliamente utilizado para tener acceso, consultar, actualizar y administrar datos en un sistema de bases de datos relacionales.).

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 incluye uno de los predicados. El motor de base de datos de Microsoft Access selecciona todos los registros que cumplen las condiciones en el SQL statement (cadena o instrucción SQL: expresión que define un comando de SQL, como SELECT, UPDATE o DELETE, e incluye cláusulas como WHERE y ORDER BY. Las instrucciones o cadenas SQL se utilizan en consultas y en funciones de agregado.). Los dos ejemplos siguientes son equivalentes y devuelven todos los registros de la tabla Empleados:


                SELECT ALL *
              

                FROM Employees
              

                ORDER BY 
                EmployeeID
                ;
              

                SELECT *
              

                FROM Employees
              

                ORDER BY 
                EmployeeID
                ;
              
DISTINCT

Omite los registros que contienen datos duplicados en los campos seleccionados. Para poder ser incluido en los resultados de la consulta, los valores de cada campo enumerado en la instrucción SELECT deben ser únicos. Por ejemplo, puede que varios empleados enumerados en una tabla Empleados tengan el mismo apellido. Si existen dos registros que contienen Pérez en el campo Apellido, la siguiente instrucción SQL devuelve solo uno de ellos:


                SELECT DISTINCT 
                LastName
              

                FROM Employees;
              

Si se omite DISTINCT, esta consulta devuelve ambos registros.

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 registro determinado pueda incluirse en los resultados.

El resultado de una consulta en la que se usa DISTINCT no se puede actualizar y no refleja los cambios posteriores efectuados por otros usuarios.

DISTINCTROW

Omite datos basados en registros duplicados completos, no solo campos duplicados. Por ejemplo, podría crear una consulta que combine las tablas Clientes y Pedidos en el campo CustomerID. La tabla Clientes no contiene campos duplicados CustomerID, pero la tabla Pedidos sí, porque cada cliente puede tener muchos pedidos. La siguiente instrucción SQL muestra cómo se puede usar DISTINCTROW para generar una lista de compañías que tengan al menos un pedido, pero sin proporcionar información detallada al respecto:


                SELECT DISTINCTROW 
                CompanyName
              

                FROM
                 Customers INNER JOIN Orders
              

                ON 
                Customers.CustomerID
                 = 
                Orders.CustomerID
              

                ORDER BY 
                CompanyName
                ;
              

Si omite DISTINCTROW, esta consulta genera varias filas para cada una de las compañías que tengan más de un pedido.

DISTINCTROW solo tiene efecto cuando selecciona campos de algunas de las tablas usadas en la consulta, pero no de todas. DISTINCTROW se ignora si la consulta solo incluye una tabla, o si extrae campos de resultados de todas las tablas.

TOP n [PERCENT]

Devuelve un número determinado de registros que se encuentran en la parte superior o inferior de un intervalo especificado por una cláusula ORDER BY. Supongamos que desea obtener los nombres de los 25 primeros estudiantes de la clase de 1994:


                SELECT TOP 25
              

                FirstName
                , 
                LastName
              

                FROM Students
              

                WHERE 
                GraduationYear
                 = 2003
              

                ORDER BY 
                GradePointAverage
                 DESC;
              

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

El predicado TOP no elige entre valores iguales. En el ejemplo anterior, si las medias vigésimo quinta y vigésimo sexta más altas son las mismas, la consulta devolverá 26 registros.

También puede usar la palabra reservada PERCENT para devolver un porcentaje determinado de registros que se encuentran en la parte superior o inferior de un intervalo especificado por una cláusula ORDER BY. Supongamos que, en lugar de los 25 primeros alumnos, desea obtener el último 10 por ciento de la clase:


                SELECT TOP 10 PERCENT
              

                FirstName
                , 
                LastName
              

                FROM Students
              

                WHERE 
                GraduationYear
                 = 2003
              

                ORDER BY 
                GradePointAverage
                 ASC;
              

El predicado ASC especifica un retorno de valores inferiores. El valor que sigue a TOP debe ser un Integer (tipo de datos Integer: tipo de datos fundamental que contiene números enteros. Una variable Entero se almacena como un número de 16 bits (2 bytes) cuyo valor oscila entre -32.768 y 32.767.) sin signo.

TOP no afecta a si la consulta se puede actualizar o no.

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



 
 
Corresponde a:
Access 2007