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