Predicados ALL, DISTINCT, DISTINCTROW, TOP (Microsoft Access SQL)

Aplica-se ao: Access 2013 | Access 2016

Especifica os registros selecionados com consultas SQL.

Sintaxe

SELECIONE [TODOS os | | DISTINTO | DISTINCTROW [TOP n [PERCENT]]] Tabela FROM

Uma instrução SELECT que contém esses predicados possui as seguintes partes.

  • TUDO: presumido se você não incluir um dos predicados. O mecanismo de banco de dados do Microsoft Access seleciona todos os registros que atendem às condições na instrução SQL.

    Os dois exemplos a seguir são equivalentes e retornam todos os registros da tabela Employees:

      SELECT ALL * 
      FROM Employees 
      ORDER BY EmployeeID; 
    
    
      SELECT * 
      FROM Employees 
      ORDER BY EmployeeID;
    
  • DISTINCT: omite registros que contêm dados duplicados nos campos selecionados. Para ser incluído nos resultados da consulta, os valores de cada campo listado na declaração SELECT devem ser exclusivos. Por exemplo, vários funcionários listados em uma tabela podem ter o mesmo sobrenome. Se dois registros contêm Silva no campo LastName, a instrução SQL a seguir retornará somente um registro contendo esse sobrenome:

      SELECT DISTINCT 
      LastName 
      FROM Employees;
    

    Se você omitir o DISTINCT, essa consulta retornará os dois registros de Silva. Se a cláusula SELECT contém mais de um campo, a combinação dos valores de todos os campos deverá ser exclusiva para um determinado registro que será incluído nos resultados. A saída de uma consulta que usa DISTINCT não é atualizável e não reflete as alterações subsequentes feitas por outros usuários.

  • DISTINCTROW: omite dados com base em registros totalmente duplicados, não apenas campos duplicados. Por exemplo, você pode criar uma consulta que associe as tabelas Customers e Orders no campo CustomerID. A tabela Clientes não contém campos CustomerID duplicados, mas a tabela Pedidos tem porque cada cliente pode ter vários pedidos. A instrução SQL a seguir mostra como você pode usar o DISTINCTROW para produzir uma lista de empresas que fizeram pelo menos um pedido, mas sem todos os detalhes sobre esses pedidos:

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

    Se você omitir o DISTINCTROW, essa consulta gerará várias linhas para cada empresa que tem mais de um pedido. O DISTINCTROW tem efeito apenas quando você seleciona campos de algumas, mas não todas as tabelas usadas na consulta. O DISTINCTROW será ignorado se sua consulta incluir apenas uma tabela ou se você tiver campos como saída de todas as tabelas.

  • TOP n [PERCENT]: retorna um determinado número de registros que caem na parte superior ou inferior de um intervalo especificado por uma cláusula ORDER BY. Suponha que você deseja pesquisar os nomes dos 25 melhores alunos da turma de 1994:

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

    Se você não incluir a cláusula ORDER BY, a consulta retornará um conjunto arbitrário de 25 registros da tabela Students que satisfaça a cláusula WHERE. O predicado TOP não escolhe entre valores iguais. No exemplo anterior, se a 25ª e 26ª maiores médias de pontos forem iguais, a consulta retornará 26 registros. Você também pode usar a palavra reservada PERCENT para retornar uma determinada porcentagem de registros que estão na parta superior ou inferior de um intervalo especificado pela cláusula ORDER BY. Suponha que, em vez dos 25 melhores alunos, você deseja pesquisar os piores 10% de alunos da turma:

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

    O predicado ASC especifica um retorno dos valores inferiores. O valor seguinte ao TOP deve ser um Inteiro não atribuído. O TOP não é afetado, independentemente de a consulta ser atualizável ou não.

  • table: o nome da tabela da qual os registros são recuperados.

Exemplo

Esse exemplo cria uma consulta que junta as tabelas Customers e Orders no campo CustomerID. A tabela Clientes não contém campos CustomerID duplicados, mas a tabela Pedidos tem porque cada cliente pode ter vários pedidos. Usar o DISTINCTROW produz uma lista de empresas que fizeram pelo menos um pedido, mas sem todos os detalhes sobre esses 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 

Confira também

Suporte e comentários

Tem dúvidas ou quer enviar comentários sobre o VBA para Office ou sobre esta documentação? Confira Suporte e comentários sobre o VBA para Office a fim de obter orientação sobre as maneiras pelas quais você pode receber suporte e fornecer comentários.