Cláusula FROM (SQL do Microsoft Access)

Aplica-se ao: Access 2013 | Access 2016

Especifica as tabelas ou as consultas que contêm os campos listados na instrução SELECT.

Sintaxe

SELECT fieldlist FROM tableexpression [IN externaldatabase ]

Uma instrução SELECT que contém a cláusula FROM tem estas partes:

Sair Descrição
fieldlist O nome do(s) campo(s) a ser recuperado junto com qualquer alias de nome de campo, funções agregadas do SQL, predicados de seleção (ALL, DISTINCT, DISTINCTROW ou TOP) ou outras opções da instrução SELECT.
tableexpression Uma expressão que identifica um ou mais tabelas a partir das quais os dados são recuperados. A expressão pode ser um nome simples de tabela, um nome de consulta salva ou um nome composto resultante de uma operação INNER JOIN, LEFT JOIN ou RIGHT JOIN.
externaldatabase O caminho completo de um banco de dados externo que contém todas as tabelas em tableexpression.

Comentários

FROM é exigido e segue qualquer instrução SELECT.

A ordem dos nomes das tabelas em tableexpression não é importante.

Para obter melhor desempenho e facilidade de uso, recomenda-se usar uma tabela vinculada em vez de uma cláusula IN para recuperar dados de um banco de dados externo.

O exemplo a seguir mostra como você pode recuperar dados da tabela Funcionários:

SELECT LastName, FirstName 
FROM Employees;

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

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.