Предложение FROM (Microsoft Access SQL)
Область применения: Access 2013 | Access 2016
Указывает таблицы или запросы, содержащие поля, перечисленные в инструкции SELECT .
Синтаксис
SELECT fieldlist FROM tableexpression [IN externaldatabase ]
Инструкция SELECT, содержащая предложение FROM, состоит из следующих частей:
Part | Описание |
---|---|
fieldlist | Имя извлекаемого поля или полей вместе с псевдонимами имени полей, агрегатными функциями SQL, предикатами выбора (ALL, DISTINCTROW или TOP) или другими параметрами инструкции SELECT. |
tableexpression | Выражение, определяющее одну или несколько таблиц, из которых извлекаются данные. Выражение может быть одним именем таблицы, сохраненным именем запроса или соединением, полученным в результате INNER JOIN, LEFT JOIN или RIGHT JOIN. |
externaldatabase | Полный путь к внешней базе данных, содержащей все таблицы в табличном выражении. |
Замечания
ПАРАМЕТР FROM является обязательным и следует любой инструкции SELECT.
Порядок имен таблиц в табличном выражении не важен.
Для повышения производительности и простоты использования рекомендуется использовать связанную таблицу вместо предложения IN для получения данных из внешней базы данных.
В следующем примере показано, как получить данные из таблицы Employees:
SELECT LastName, FirstName
FROM Employees;
Пример
В некоторых из примеров ниже предполагается, что существует гипотетическое поле Salary (Оклад) в таблице Employees (Сотрудники). Обратите внимание, что это поле на самом деле не существует в таблице Employees (Сотрудники) базы данных Northwind.
В данном примере создается объект Recordset типа dynaset на основании оператора SQL, который выбирает поля "Фамилия" и "Имя" среди всех записи в таблице "Сотрудники". Он вызывает процедуру EnumFields, которая печатает содержимое объекта Recordset в окне Debug.
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
В данном примере выполняется подсчет количества записей, которые содержат информацию в поле "Индекс", и присваивается имя "Путь" возвращаемому полю.
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
В этом примере показано количество сотрудников и среднее и максимальное вознаграждения.
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
Суб процедура EnumFields передает объект Recordset из процедуры вызова. Затем процедура форматирует и печатает поля Recordset в окне Отладка. Переменная - это желаемая ширина печатного поля. Некоторые поля могут быть обрезаны.
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
См. также
- Форум для разработчиков Access
- Помощь при работе с Access на support.office.com
- Форумы Access на UtterAccess
- Справочный центр (FMS) для разработки и VBA программирования для Access
- Публикации по Access на StackOverflow
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.