Предложение WHERE (Microsoft Access SQL)
Область применения: Access 2013 | Access 2016
Определяет, на какие записи из таблиц, указанных в предложении FROM, воздействуют операторы SELECT, UPDATE или DELETE.
Синтаксис
SELECT fieldlist FROM tableexpression WHERE criteria
Выражение SELECT, содержащее предложение WHERE, состоит из этих частей:
Часть | Описание |
---|---|
fieldlist | Имя поля или полей, извлекаемых вместе с любыми псевдонимами имен полей, предикатами выбора (ALL, DISTINCT, DISTINCTROW или TOP), или другими параметрами оператора SELECT. |
tableexpression | Имя таблицы или таблиц, из которых извлекаются данные. |
criteria | Выражение, которому должны соответствовать записи для включения в результаты запроса. |
Примечания
Ядро СУБД Access выбирает записи, соответствующие условиям, указанным в предложении WHERE. Если не указать предложение WHERE, запрос возвращает все строки из таблицы. Если указать несколько таблиц в запросе и не добавить предложение WHERE или предложение JOIN, запрос создает декартово произведение таблиц.
WHERE является необязательным, но при включении следует за FROM. Например, можно выбрать всех сотрудников отдела продаж (WHERE Dept = 'Sales'
) или всех клиентов в возрасте от 18 до 30 (WHERE Age Between 18 And 30
).
Если вы не используете предложение JOIN для выполнения операций присоединения SQL к нескольким таблицам, результирующий объект Recordset не будет обновляться.
Предложение WHERE похоже на HAVING. WHERE определяет, какие записи выбираются. Аналогичным образом, после группировки записей с помощью GROUP BY, HAVING определяет, какие записи будут отображаться.
Используйте предложение WHERE для удаления записей, которые не нужно группировать по предложению GROUP BY.
Чтобы определить, какие записи возвращает инструкция SQL, используйте различные выражения. Например, указанная ниже инструкция SQL выбирает всех сотрудников с окладом более 21 000 долл. США:
SELECT LastName, Salary
FROM Employees
WHERE Salary > 21000;
Предложение WHERE может содержать до 40 выражений, связанных с помощью логических операторов, таких как And и Or.
При вводе имени поля, содержащего пробел или знак препинания, заключите имя в квадратные скобки ([]). Например, таблица сведений о клиенте может содержать сведения об определенных клиентах:
SELECT [Customer's Favorite Restaurant]
При указании аргумента условия литералы даты должны быть в формате США, даже если вы не используете версию ядра СУБД Microsoft Jet для США. Например, 10 мая 1996 г. записывается в формате Соединенного Королевства как 10/5/96, а в формате США как 5/10/96. Убедитесь, что литералы даты ограничены знаками решетки (#), как показано в примерах ниже.
Чтобы найти записи с датой 10 мая 1996 г. в базе данных для Соединенного Королевства, необходимо использовать указанную ниже инструкцию SQL:
SELECT *
FROM Orders
WHERE ShippedDate = #5/10/96#;
Также можно использовать функцию DateValue, распознающую международные настройки, установленные Microsoft Windows®. Например, используйте этот код для США:
SELECT *
FROM Orders
WHERE ShippedDate = DateValue('5/10/96');
А этот код используйте для Соединенного Королевства:
SELECT *
FROM Orders
WHERE ShippedDate = DateValue('10/5/96');
Примечание.
Если столбец, указанный в строке условий, является типом GUID, в выражении условия используется немного другой синтаксис:
WHERE ReplicaID = {GUID {12345678-90AB-CDEF-1234-567890ABCDEF}}
Не забудьте добавить вложенные фигурные скобки и дефисы, как показано.
Пример
В приведенном ниже примере предполагается, что существует гипотетическое поле Salary (Оклад) в таблице Employees (Сотрудники). Обратите внимание, что это поле на самом деле не существует в таблице Employees (Сотрудники) базы данных Northwind.
В этом примере выбираются поля LastName и FirstName каждой записи, в которой фамилией является King. В этом примере выполняется вызов процедуры EnumFields, которую можно найти в примере для оператора SELECT.
Sub WhereX()
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 records from the Employees table where the
' last name is King.
Set rst = dbs.OpenRecordset("SELECT LastName, " _
& "FirstName FROM Employees " _
& "WHERE LastName = 'King';")
' Populate the Recordset.
rst.MoveLast
' Call EnumFields to print the contents of the
' Recordset.
EnumFields rst, 12
dbs.Close
End Sub
См. также
- Форум для разработчиков Access
- Помощь при работе с Access на support.office.com
- Форумы Access на UtterAccess
- Справочный центр (FMS) для разработки и VBA программирования для Access
- Публикации по Access на StackOverflow
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.