Compartilhar via


Declaração SELECT (SQL do Microsoft Access)

Aplica-se a: Access 2013 | Office 2013

Instrui o mecanismo de banco de dados do Microsoft Access a retornar informações do banco de dados como um conjunto de registros.

Sintaxe

SELECT [predicate] { * | table.* | [table.]field1 [AS alias1] [, [table.]field2 [AS alias2] [, …]]} FROM tableexpression [, …] [IN externaldatabase] [WHERE... ] [GROUP BY... ] [TER... ] [ORDER BY... ] [COM OPÇÃO OWNERACCESS]

A declaração SELECT tem as seguintes partes:

Parte Descrição
predicate Um dos seguintes predicados: ALL, DISTINCT, DISTINCTROW ou TOP. Use o predicado para restringir o número de registros retornados. Se nenhum for especificado, o padrão é ALL.
* Especifica que todos os campos da tabela ou tabelas especificadas serão selecionados.
table O nome da tabela contendo os campos a partir dos quais os registros serão selecionados.
campo1, campo2 Os nomes dos campos contendo os dados que você deseja recuperar. Se você incluir mais do que um campo, eles serão recuperados na ordem listada.
alias1, alias2 Os nomes a serem usados como cabeçalhos de coluna em vez dos nomes de coluna originais na tabela.
tableexpression O nome da tabela ou tabelas contendo os dados que você deseja recuperar.
externaldatabase O nome do banco de dados que contém as tabelas em tableexpression se elas não estiverem no banco de dados atual.

Comentários

Para executar esta operação, o mecanismo do banco de dados do Microsoft Jet pesquisa na tabela ou tabelas especificadas, extrai as colunas escolhidas, seleciona linhas que correspondam ao critério e classifica ou agrupa as linhas resultantes na ordem especificada.

Declarações SELECT não alteram os dados no banco de dados.

SELECT é normalmente a primeira palavra em uma declaração SQL. A maior parte das declarações SQL são declarações SELECT ou SELECT…INTO.

A sintaxe mínima para uma declaração SELECT é:

SELECT fields FROM table

Você pode usar um asterisco (*) para selecionar todos os campos em uma tabela. O exemplo a seguir seleciona todos os campos na tabela Funcionários.

SELECT * FROM Employees;

Se um nome de campo estiver incluído em mais de uma tabela na cláusula FROM, preceda-o com o nome da tabela e o operador . (ponto). No exemplo a seguir, o campo Departamento está presente na tabela de Funcionários e na tabela de Supervisores. A declaração SQL seleciona departamentos a partir da tabela de Funcionários e os nomes de supervisores da tabela de Supervisores:

SELECT Employees.Department, Supervisors.SupvName 
FROM Employees INNER JOIN Supervisors 
WHERE Employees.Department = Supervisors.Department;

Quando um objeto Recordset é criado, o mecanismo do banco de dados do Microsoft Jet usa o nome de campo da tabela como o nome do objeto Field no objeto Recordset. Se você desejar um nome de campo diferente ou um nome que não esteja implícito na expressão usada para gerar o campo, use a palavra reservada AS. O exemplo a seguir usa o título Data de Nascimento para nomear o objeto Field retornado no objeto Recordset resultante:

SELECT BirthDate 
AS Birth FROM Employees;

Sempre que você usar funções agregadas ou consultas que retornem nomes de objeto Field ambíguos ou duplicados, deverá usar a cláusula AS para fornecer um nome alternativo para o objeto Field. O exemplo a seguir usa o título HeadCount para nomear o objeto Field retornado no objeto Recordset resultante:

SELECT COUNT(EmployeeID)
AS HeadCount FROM Employees;

Você pode usar as outras cláusulas em uma declaração SELECT para restringir e organizar melhor os seus dados retornados. Para saber mais, consulte o tópico de Ajuda para a cláusula que você está usando.

Links fornecidos pela comunidade UtterAccess. UtterAccess é o fórum principal de wiki e de ajuda do Microsoft Access.

Exemplo

Alguns dos exemplos a seguir assumem a existência de um campo hipotético chamado Salário em uma tabela de Funcionários. Repare que esse campo não existe realmente na tabela de Funcionários do banco de dados da Northwind.

Este exemplo cria um Recordset do tipo dynaset com base em uma declaração SQL que seleciona os campos LastName e FirstName de todos os registros da tabela de Funcionários. Ele chama o procedimento EnumFields, que imprime os conteúdos de um objeto Recordset na janela Depurar.

    Sub SelectX1() 
     
        Dim dbs As Database, rst As Recordset 
     
        ' Modify this line to include the path to Northwind 
        ' on your computer. 
        Set dbs = OpenDatabase("Northwind.mdb") 
     
        ' Select the last name and first name values of all  
        ' records in the Employees table. 
        Set rst = dbs.OpenRecordset("SELECT LastName, " _ 
            & "FirstName FROM Employees;") 
     
        ' Populate the recordset. 
        rst.MoveLast 
     
        ' Call EnumFields to print the contents of the 
        ' Recordset. 
        EnumFields rst,12 
     
        dbs.Close 
     
    End Sub

Este exemplo conta o número de registros que têm uma entrada no campo PostalCode e nomeia o campo retornado como Registro.

    Sub SelectX2() 
     
        Dim dbs As Database, rst As Recordset 
     
        ' Modify this line to include the path to Northwind 
        ' on your computer. 
        Set dbs = OpenDatabase("Northwind.mdb") 
     
        ' Count the number of records with a PostalCode  
        ' value and return the total in the Tally field. 
        Set rst = dbs.OpenRecordset("SELECT Count " _ 
            & "(PostalCode) AS Tally FROM Customers;") 
     
        ' Populate the Recordset. 
        rst.MoveLast 
     
        ' Call EnumFields to print the contents of  
        ' the Recordset. Specify field width = 12. 
        EnumFields rst, 12 
     
        dbs.Close 
     
    End Sub 

Este exemplo mostra o número de funcionários e os salários médio e máximo.

    Sub SelectX3() 
     
        Dim dbs As Database, rst As Recordset 
     
        ' Modify this line to include the path to Northwind 
        ' on your computer. 
        Set dbs = OpenDatabase("Northwind.mdb") 
     
        ' Count the number of employees, calculate the  
        ' average salary, and return the highest salary. 
        Set rst = dbs.OpenRecordset("SELECT Count (*) " _ 
            & "AS TotalEmployees, Avg(Salary) " _ 
            & "AS AverageSalary, Max(Salary) " _ 
            & "AS MaximumSalary FROM Employees;") 
     
        ' Populate the Recordset. 
        rst.MoveLast 
     
        ' Call EnumFields to print the contents of 
        ' the Recordset. Pass the Recordset object and 
        ' desired field width. 
        EnumFields rst, 17 
     
        dbs.Close 
     
    End Sub 

O procedimento Sub EnumFields recebe um objeto Recordset do procedimento de chamada. Em seguida, o procedimento formata e imprime os campos do Recordset na janela Depurar. A variável é o comprimento desejado do campo impresso. Alguns campos podem ser truncados.

    Sub EnumFields(rst As Recordset, intFldLen As Integer) 
     
        Dim lngRecords As Long, lngFields As Long 
        Dim lngRecCount As Long, lngFldCount As Long 
        Dim strTitle As String, strTemp As String 
     
        ' Set the lngRecords variable to the number of 
        ' records in the Recordset. 
        lngRecords = rst.RecordCount 
     
        ' Set the lngFields variable to the number of 
        ' fields in the Recordset. 
        lngFields = rst.Fields.Count 
     
        Debug.Print "There are " & lngRecords _ 
            & " records containing " & lngFields _ 
            & " fields in the recordset." 
        Debug.Print 
     
        ' Form a string to print the column heading. 
        strTitle = "Record  " 
        For lngFldCount = 0 To lngFields - 1 
            strTitle = strTitle _ 
            & Left(rst.Fields(lngFldCount).Name _ 
            & Space(intFldLen), intFldLen) 
        Next lngFldCount     
     
        ' Print the column heading. 
        Debug.Print strTitle 
        Debug.Print 
     
        ' Loop through the Recordset; print the record 
        ' number and field values. 
        rst.MoveFirst 
     
        For lngRecCount = 0 To lngRecords - 1 
            Debug.Print Right(Space(6) & _ 
                Str(lngRecCount), 6) & "  "; 
     
            For lngFldCount = 0 To lngFields - 1 
                ' Check for Null values. 
                If IsNull(rst.Fields(lngFldCount)) Then 
                    strTemp = "<null>" 
                Else 
                    ' Set strTemp to the field contents.  
                    Select Case _ 
                        rst.Fields(lngFldCount).Type 
                        Case 11 
                            strTemp = "" 
                        Case dbText, dbMemo 
                            strTemp = _ 
                                rst.Fields(lngFldCount) 
                        Case Else 
                            strTemp = _ 
                                str(rst.Fields(lngFldCount)) 
                    End Select 
                End If 
     
                Debug.Print Left(strTemp _  
                    & Space(intFldLen), intFldLen); 
            Next lngFldCount 
     
            Debug.Print 
     
            rst.MoveNext 
     
        Next lngRecCount 
     
    End Sub