ALL, DISTINCT, DISTINCTROW y TOP (predicados de Microsoft Access SQL)

Se aplica a: Access 2013 | Access 2016

Especifica registros seleccionados con consultas SQL.

Sintaxis

SELECT [ALL | | DISTINTOS DISTINCTROW | [TOP n [PERCENT]]] Tabla FROM

Una instrucción SELECT que contiene estos predicados consta de los siguientes elementos:

  • ALL: se supone que no incluye uno de los predicados. El motor de base de datos de Microsoft Access 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 Employees 
      ORDER BY EmployeeID; 
    
    
      SELECT * 
      FROM Employees 
      ORDER BY EmployeeID;
    
  • DISTINCT: omite los registros que contienen datos duplicados en los campos seleccionados. Para que se incluyan en los resultados de la consulta, los valores de cada uno de los campos enumerados en la instrucción SELECT deben ser únicos. Por ejemplo, es posible que varios empleados enumerados en la tabla Empleados tengan el mismo apellido. Si dos registros contienen Pérez en el campo Apellidos, la siguiente instrucción SQL devuelve un único registro que contiene Smith:

      SELECT DISTINCT 
      LastName 
      FROM Employees;
    

    Si se omite DISTINCT, esta consulta devuelve ambos registros con Pérez. Si la cláusula SELECT contiene varios campos, la combinación de valores de todos los campos debe ser única para que se incluya un registro dado en los resultados. El resultado de una consulta que usa DISTINCT no se puede actualizar y no refleja los cambios realizados por otros usuarios.

  • DISTINCTROW: omite datos basados en registros duplicados completos, no solo en campos duplicados. Por ejemplo, podría crea una consulta que combine las tablas Customers (Clientes) y Orders (Pedidos) en el campo CustomerID (IDCliente). La tabla Customers no contiene ningún campo CustomerID duplicado, pero la tabla Orders sí porque cada cliente puede tener muchos pedidos. La siguiente instrucción SQL muestra cómo puede usar DISTINCTROW para generar una lista de empresas que tienen al menos un pedido, pero sin detalles sobre los pedidos:

      SELECT DISTINCTROW CompanyName 
      FROM Customers INNER JOIN Orders 
      ON Customers.CustomerID = Orders.CustomerID 
      ORDER BY CompanyName;
    

    Si omite DISTINCTROW, esta consulta genera varias filas por cada empresa que tenga más de un pedido. DISTINCTROW tiene efecto cuando selecciona campos de algunas de las tablas, pero no todas, usadas en la consulta. DISTINCTROW se ignora si la consulta solo incluye una tabla o si extrae campos de todas las tablas de resultados.

  • TOP n [PERCENT]: devuelve un determinado número de registros que se encuentran en la parte superior o inferior de un intervalo especificado por una cláusula ORDER BY. Suponga que desea obtener los nombres de los 25 primeros alumnos del curso de 1994:

      SELECT TOP 25 
      FirstName, LastName 
      FROM Students 
      WHERE GraduationYear = 1994 
      ORDER BY GradePointAverage DESC;
    

    Si no incluye la cláusula ORDER BY, la consulta devolverá un conjunto arbitrario de 25 registros de la tabla Students que cumpla la cláusula WHERE. El predicado TOP no elige entre valores iguales. En el ejemplo anterior, si las puntuaciones medias (GradePointAverage) veinticinco y veintiséis son iguales, la consulta devolverá 26 registros. También puede usar la palabra reservada PERCENT para devolver un porcentaje determinado de registros que figuren al principio o al final de un intervalo especificado por una cláusula ORDER BY. Suponga que, en lugar de los primeros 25 alumnos, desea obtener los correspondientes al último 10 por ciento del curso:

      SELECT TOP 10 PERCENT 
      FirstName, LastName 
      FROM Students 
      WHERE GraduationYear = 1994 
      ORDER BY GradePointAverage ASC;
    

    El predicado ASC especifica un retorno de valores inferiores. El valor que sigue a TOP debe ser un Integer sin asignar. TOP no afecta a si la consulta se puede actualizar o no.

  • tabla: nombre de la tabla en la que se recuperan los registros.

Ejemplo

En este ejemplo se crea una consulta que combina las tablas Customers (Clientes) y Orders (Pedidos) por el campo CustomerID (IDCliente). La tabla Customers no contiene ningún campo CustomerID duplicado, pero la tabla Orders sí porque cada cliente puede tener muchos pedidos. Usar DISTINCTROW genera una lista de empresas que tienen al menos un pedido, pero sin detalles sobre los pedidos.

Sub AllDistinctX() 
    Dim dbs As Database, rst As Recordset 
    ' Modify this line to include the path to Northwind 
    ' on your computer. 
    Set dbs = OpenDatabase("Northwind.mdb") 
   
    ' Join the Customers and Orders tables on the  
    ' CustomerID field. Select a list of companies  
    ' that have at least one order. 
 
    Set rst = dbs.OpenRecordset("SELECT DISTINCTROW " _ 
        & "CompanyName FROM Customers " _ 
        & "INNER JOIN Orders " _ 
        & "ON Customers.CustomerID = " _ 
        & "Orders.CustomerID " _ 
        & "ORDER BY CompanyName;") 
 
    ' Populate the Recordset. 
    rst.MoveLast 
     
    ' Call EnumFields to print the contents of the  
    ' Recordset. Pass the Recordset object and desired 
    ' field width. 
    EnumFields rst, 25 
    dbs.Close 
End Sub 

Vea también

Soporte técnico y comentarios

¿Tiene preguntas o comentarios sobre VBA para Office o esta documentación? Vea Soporte técnico y comentarios sobre VBA para Office para obtener ayuda sobre las formas en las que puede recibir soporte técnico y enviar comentarios.