Выдержки из справки по диалекту языка SQL Access 2007

advertisement
Выдержки из справки по диалекту языка SQL Access
2007
Текст немного поправлен. Почти все примеры в тексте по базе данных Борей
"c:\Program Files\Microsoft Office\OFFICE11\SAMPLES\Борей.mdb"
, которая поставляется вместе с Microsoft Access.
При описании синтаксических правил квадратные скобки означают [необязательную
часть] конструкции. Вертикальная черта обозначает выбор между вариантами {вар1|вар2}.
Многоточие означает возможное повторение несколько раз — раз 1, раз 2 [, …]
Инструкция SELECT
Предписывает ядру базы данных Microsoft Access вернуть сведения из базы данных в виде набора записей.
Синтаксис
SELECT [предикат] { * | таблица.* | [таблица.]поле1 [AS псевдоним1]
[, [таблица.]поле2 [AS псевдоним2] [, ...]]}
FROM выражение_таблицы [, ...] [IN внешняя_база_данных]
[WHERE... ]
[GROUP BY... ]
[HAVING... ]
[ORDER BY... ]
[WITH OWNERACCESS OPTION]
Инструкция SELECT включает следующие элементы.
Элемент
Описание
Предикат
Один из следующих предикатов: ALL, DISTINCT, DISTINCTROW или TOP. Предикаты используются для
ограничения числа возвращаемых записей. Если предикат не задан, по умолчанию используется ALL.
*
Указывает на то, что из заданной таблицы или таблиц выбираются все поля
Таблица
Имя таблицы, из полей которой выбираются записи
поле1, поле2
Имена полей, содержащих извлекаемые данные. Если задано несколько полей, данные будут
извлекаться в порядке перечисления их имен
псевдоним1,
псевдоним2
Имена, используемые как заголовки столбцов вместо исходных названий столбцов таблицы
выражение_таблицы
Одно или несколько имен таблиц, содержащих извлекаемые данные.
внешняя_база_данных
Имя базы данных, содержащей таблицы, указанные в компоненте выражение_таблицы, если они не
находятся в текущей базе данных
Замечания
Для выполнения этой операции ядром базы данных Microsoft Access осуществляются поиск указанной
таблицы (таблиц), извлечение нужных столбцов, выбор строк, отвечающих заданным условиям, и сортировка
или группировка полученных строк в заданном порядке.
Инструкции SELECT не изменяют данные базы.
Инструкция SELECT обычно является первым словом инструкции SQL (Инструкция (строка) SQL. Выражение,
определяющее команду SQL, например SELECT, UPDATE или DELETE, и включающее предложения,
например WHERE или ORDER BY. Инструкции/строки SQL обычно используются в запросах и в
статистических функциях.). Большинство инструкций SQL представляют собой либо инструкции SELECT,
либо инструкции SELECT...INTO.
Минимальный синтаксис инструкции SELECT выглядит следующим образом:
SELECT поля FROM таблица
Для выбора всех полей в таблице можно использовать звездочку (*). В следующем примере выбираются все
поля таблицы «Сотрудники».
SELECT * FROM Сотрудники;
Если имя поля включено в несколько таблиц в предложении FROM, поместите перед ним имя таблицы и
оператор «.» (точка). В следующем примере поле «Отдел» имеется в таблицах «Сотрудники» и
«Начальники». С помощью инструкции SQL выбираются отделы из таблицы «Сотрудники» и имена
начальников из таблицы «Начальники».
SELECT Сотрудники.Отдел, Руководители.ИмяРуководителя FROM Сотрудники INNER JOIN Руководители
WHERE Сотрудники.Отдел = Руководители.Отдел;
При создании объекта RecordSet имя поля таблицы используется ядром базы данных Microsoft Access как
имя объекта «Поле» в объекте RecordSet. Если имя поля нуждается в изменении или не предоставляется
выражением, с помощью которого генерируется поле, воспользуйтесь зарезервированным
словом (Зарезервированное слово. Слово, являющееся элементом языка, например языка Visual Basic. К
зарезервированным словам относятся имена инструкций, встроенных функций и типов данных, методов,
операторов и объектов.) AS. В следующем примере показано, как заголовок «День» используется для
присвоения имени возвращенному объекту Поле в полученном объекте RecordSet.
SELECT ДеньРождения AS День FROM Сотрудники;
При работе со статистическими функциями или запросами, возвращающими неоднозначные или одинаковые
имена объекта Поле, следует воспользоваться предложением AS для создания другого имени объекта Поле.
В следующем примере возвращенному объекту Поле в полученном объекте RecordSet присваивается имя
«Перепись».
SELECT COUNT(КодСотрудника) AS Перепись FROM Сотрудники;
При работе с инструкцией SELECT можно использовать дополнительные предложения для дальнейшего
ограничения и упорядочения полученных данных. Дополнительные сведения см. в разделе справки,
посвященном используемому предложению.
Предложение FROM
Задает таблицы и запросы, которые содержат перечисленные в инструкции SELECT поля.
Синтаксис
SELECT список_полей
FROM выражение_таблицы [IN внешняя_база_данных]
Инструкция SELECT, содержащая предложение FROM, включает в себя следующие элементы:
Элемент
Описание
список_полей
Имена полей, загружаемых вместе с любыми псевдонимами и статистическими функциями SQL,
предикатами (ALL, DISTINCT, DISTINCTROW или TOP) или с другими параметрами инструкции SELECT.
выражение_таблицы
Выражение, определяющее одну или несколько таблиц — источников данных. Выражение может
представлять собой имя таблицы, сохраненное имя запроса или результирующее выражение,
составленное с использованием операций INNER JOIN, LEFT JOIN или RIGHT JOIN
внешняя_база_данных
Полный путь к внешней базе данных, содержащей все таблицы, указанные в выражении_таблицы
Замечания
Наличие предложения FROM после инструкции SELECT обязательно.
Порядок перечисления таблиц в выражении_таблицы не имеет значения.
Применяя связанные таблицы вместо предложения IN, можно сделать процесс извлечения данных из
внешней базы данных более простым и эффективным.
В приведенном ниже примере показано, как извлечь данные из таблицы «Сотрудники».
SELECT Фамилия, Имя
FROM Сотрудники;
Предикаты ALL, DISTINCT, DISTINCTROW, TOP
Указывают записи, выбранные для запросов SQL.
Синтаксис
SELECT [ALL | DISTINCT | DISTINCTROW | [TOP n [PERCENT]]]
FROM таблица
Инструкция SELECT, содержащая эти предикаты, включает в себя следующие компоненты:
Компонент
ALL
Описание
Подразумевается, если не включен ни один из предикатов. Ядро базы данных Microsoft Access выбирает все
записи, отвечающие условиям инструкции SQL. На следующих двух идентичных примерах показано, как
осуществить возврат всех записей таблицы «Сотрудники».
SELECT ALL *
FROM Сотрудники
ORDER BY КодСотрудника;
SELECT *
FROM Сотрудники
ORDER BY КодСотрудника;
DISTINCT
Исключает записи, содержащие повторяющиеся данные в выбранных полях. В результаты запроса
включаются только уникальные значения каждого из полей, перечисленных в инструкции SELECT. Например,
некоторые сотрудники, перечисленные в таблице «Сотрудники», могут быть однофамильцами. Если две
записи содержат в поле «Фамилия» фамилию «Иванов», приведенная ниже инструкция SQL возвращает
только одну запись, содержащую фамилию «Иванов».
SELECT DISTINCT LastName
FROM Employees;
Если компонент DISTINCT опускается, запрос возвращает обе записи с фамилией «Иванов».
Если предложение SELECT содержит несколько полей, сочетание значений всех полей включается в
результаты запроса только при условии уникальности для данной записи.
Результаты запроса, использующего компонент DISTINCT, не обновляются и не отражают последующих
изменений, внесенных другими пользователями.
DISTINCTROW
Исключает данные записей, повторяющихся целиком, а не содержащих отдельные поля с одинаковыми
данными. Предположим, что создан запрос, соединяющий таблицы «Клиенты» и «Заказы» по полю
«КодКлиента». Таблица «Клиенты» не содержит повторяющихся полей «КодКлиента», однако они имеются в
таблице «Заказы», поскольку у каждого клиента может быть несколько заказов. В следующей инструкции SQL
показано, как с помощью компонента DISTINCTROW составить список организаций, сделавших по крайней
мере один заказ, без упоминания сведений об этих заказах.
SELECT DISTINCTROW Название FROM Клиенты INNER JOIN Заказы
ON Клиенты.КодКлиента = Заказы.КодКлиента
ORDER BY Название;
Если компонент DISTINCTROW опущен, в результате запроса выводится несколько строк для каждой
организации, делавшей заказы неоднократно.
Компонент DISTINCTROW действует только при выборе полей из некоторых таблиц, используемых в запросе.
Компонент DISTINCTROW не учитывается, если запрос включает только одну таблицу или если поля
извлекаются из всех таблиц.
TOP n
Возвращает определенное количество записей, находящихся в числе первых или последних записей
[PERCENT]
диапазона, заданного предложением ORDER BY. Предположим, что требуется отобразить имена 25 лучших
студентов выпуска 1994 года.
SELECT TOP 25
FirstName, LastName
FROM Students
WHERE GraduationYear = 2003
ORDER BY GradePointAverage DESC;
Если не включить предложение ORDER BY, в ответ на запрос будет выдан произвольный набор 25 записей из
таблицы «Студенты», удовлетворяющий предложению WHERE.
Предикат TOP не предполагает выбора между равными значениями. Если бы в 25-ой и 26-ой записях
предыдущего примера был указан одинаковый средний балл, запрос возвратил бы 26 записей.
Можно также использовать зарезервированное слово PERCENT для получения некоторого процента первых
или последних записей диапазона, заданного предложением ORDER BY. Предположим, что вместо 25 лучших
требуется отобразить 10% худших студентов выпуска.
SELECT TOP 10 PERCENT
FirstName, LastName
FROM Students
WHERE GraduationYear = 2003
ORDER BY GradePointAverage ASC;
Предикат ASC задает вывод значений из нижней части диапазона. Значение, которое следует за предикатом
TOP, должно быть значением типа Integer (Тип данных Integer. Основной тип данных, используемый для
сохранения целых значений. Переменная типа Integer сохраняется как 64-битовое (8-байтовое) число в
диапазоне от -32768 до 32767.) без знака.
Предикат TOP не влияет на возможность обновления запроса.
таблица
Имя таблицы, из которой извлекаются записи.
Версия для печати
Исходная страница: http://office.microsoft.com/ru-ru/access/HA012313511049.aspx?pid=CH100728991049
Предложение WHERE
Определяет, какие записи из таблиц, перечисленных в предложении FROM, обрабатываются инструкциями
SELECT, UPDATE или DELETE.
Синтаксис
SELECT список_полей
FROM выражение_таблицы
WHERE условия_отбора
Инструкция SELECT, содержащая предложение WHERE, включает следующие части.
Часть
Описание
список_полей
Имя поля или полей, извлекаемых вместе с любыми псевдонимами, предикатами (ALL, DISTINCT,
DISTINCTROW или TOP) или с любым другим параметром инструкции SELECT.
выражение_таблицы
Имя таблицы или таблиц, из которых извлекаются данные.
условия_отбора
Выражение, которому должны соответствовать записи, включаемые в результаты запроса.
Замечания
Ядро базы данных Microsoft Access выбирает записи, отвечающие условиям, перечисленным в предложении
WHERE. Если предложение WHERE не задано, запрос возвращает все строки таблицы. Если в запросе
указано несколько таблиц, но не задано предложение WHERE или JOIN, запрос создает декартово
произведение таблиц.
Предложение WHERE использовать не обязательно, но если оно используется, то должно следовать за
предложением FROM. Например, можно выбрать всех сотрудников из отдела продаж (WHERE Отдел =
'Продажи') или всех заказчиков в возрасте от 18 до 30 ( WHERE Возраст Between 18 And 30).
Если предложение JOIN не используется для операции соединения SQL нескольких таблиц, полученный
объект Набор записей невозможно будет обновлять.
Предложение WHERE аналогично предложению HAVING и определяет выбранные записи. После того как
записи сгруппированы предложением GROUP BY, предложение HAVING также определяет отображаемую
запись.
Предложение WHERE используется для исключения записей, которые не требуется группировать с помощью
предложения GROUP BY.
С помощью различных выражений определите, какие записи возвращаются инструкцией SQL. Например,
следующая инструкция SQL выбирает всех сотрудников, зарплата которых превышает 21 000 рублей.
SELECT Фамилия, Зарплата FROM Сотрудники WHERE Зарплата > 21000;
Предложение WHERE может содержать до 40 выражений, соединенных логическими операторами
(например, AND и OR).
При вводе имени поля с пробелами или знаками препинания следует заключить его в квадратные скобки ([ ]).
Например, таблица сведений о клиентах может содержать сведения о конкретных клиентах.
SELECT [Любимый ресторан клиента]
Задавая аргумент условия_отбора, литералы даты (Литерал даты. Любая последовательность знаков
допустимого формата, заключенная в знаки номера (#). Допустимыми форматами являются формат даты,
заданный в настройках языка и стандартов, и универсальный формат даты.) следует представлять в
американском формате, даже если используется неамериканская версия ядра базы данных Microsoft Access.
Например, дата «10 мая 1996» записывается как 10/5/96 в Великобритании и как 10.05.1996 в России. Не
забывайте заключать литералы даты в знаки номера (#), как показано в приведенных ниже примерах.
Чтобы найти записи за 10 мая 1996 в базе данных Великобритании, используйте следующую инструкцию
SQL:
SELECT * FROM Заказы WHERE ДатаОтгрузки = #10.05.1996#;
Можно также воспользоваться функцией DateValue, распознающей международные параметры,
установленные Microsoft Windows®. Например, для России используйте такой код:
SELECT * FROM Заказы WHERE ДатаОтгрузки = DateValue('10.05.1996');
И следующий код — для Великобритании:
SELECT * FROM Заказы WHERE ДатаОтгрузки = DateValue('10/5/96');
ПРИМЕЧАНИЕ.
Если столбец, указанный в строке условий отбора, относится к типу GUID, в условиях отбора
используется немного другой синтаксис.
WHERE ReplicaID = {GUID {12345678-90AB-CDEF-1234-567890ABCDEF}}
Убедитесь, что вложенные скобки и дефисы расположены правильно.
Исходная страница: http://office.microsoft.com/ru-ru/access/HA012315261049.aspx?pid=CH100728991049
Предложение GROUP BY
Соединяет записи с одинаковыми значениями, находящиеся в указанном списке полей, в одну запись.
Сводное значение создается для каждой записи, если в инструкцию SELECT включена статистическая
функция SQL, например Sum или Count.
Синтаксис
SELECT список_полей
FROM таблица
WHERE условие_отбора
[GROUP BY список_полей_группы]
Инструкция SELECT, содержащая предложение GROUP BY, включает в себя следующие элементы:
Элемент
Описание
список_полей
Имена полей, извлекаемых вместе с любыми псевдонимами (Псевдоним (SQL). Альтернативное имя для
таблицы или поля в выражении. Псевдонимы обычно используют как более короткие имена таблиц или
полей для удобства последующих ссылок в программах, для предотвращения неоднозначных ссылок, а
также для получения более информативных имен при выводе результатов запроса.) и статистическими
функциями SQL, предикатами (ALL, DISTINCT, DISTINCTROW или TOP) или другими параметрами
инструкции SELECT
таблица
Имя таблицы, из которой загружаются записи
условия_отбора
Условие отбора. Если инструкция содержит предложение WHERE, то после его применения к записям
значения будут сгруппированы ядром базы данных Microsoft Access.
список_полей_группы
Имена полей (не более 10), используемых для группировки записей. Порядок следования имен в
списке_полей_группы определяет уровень группировки — от самого высокого до самого низкого
Замечания
Предложение GROUP BY не является обязательным.
Если в инструкцию SELECT не включены статистические функции SQL, сводные значения не вычисляются.
Значения полей GROUP BY, равные Null (Null. Значение, которое можно ввести в поле или использовать
в выражениях и запросах для указания отсутствующих или неизвестных данных. В Visual Basic
ключевое слово Null указывает значение Null. Некоторые поля, такие как поля первичного ключа, не
могут содержать значения Null.), группируются и не опускаются. Однако значения Null не вычисляются ни
одной из статистических функций SQL.
Предложение WHERE используется для исключения строк, группировать которые не требуется. Предложение
HAVING используется для фильтрации записей после группировки.
Поля из списка полей GROUP BY, не содержащие данных типа Memo (Тип данных «Поле МЕМО». Тип
данных поля в базе данных Microsoft Access. Поле МЕМО может содержать до 65535 символов.) или Объект
OLE (Тип данных «Поле объекта OLE». Тип данных поля, используемый для сохранения объектов из других
приложений, связанных или внедренных в базу данных Microsoft Access.), могут ссылаться на любое поле в
любой таблице, указанной в предложении FROM, даже если поле не включено в инструкцию SELECT. Для
этого достаточно наличия в инструкции SELECT хотя бы одной статистической функции SQL. Ядро баз
данных Microsoft Access не позволяет выполнять группировку по полям, содержащим данные типа «поле
MEMO» или «Объект OLE».
Все поля в списке полей SELECT должны либо содержаться в предложении GROUP BY, либо быть
аргументами статистической функции SQL.
Версия для печати
Исходная страница: http://office.microsoft.com/ru-ru/access/HA012314821049.aspx?pid=CH100728991049
Предложение HAVING
Определяет сгруппированные записи, которые должны отображаться в инструкции SELECT с предложением
GROUP BY. После того как записи будут сгруппированы предложением GROUP BY, предложение HAVING
покажет те из них, которые отвечают его условиям.
Синтаксис
SELECT список_полей
FROM таблица
WHERE выбор_условия
GROUP BY список_полей_группы
[HAVING условие_группы]
Инструкция SELECT, содержащая предложение HAVING, включает в себя следующие элементы:
Элемент
Описание
список_полей
Имена полей, загружаемых вместе с любыми псевдонимами (Псевдоним (SQL). Альтернативное имя для
таблицы или поля в выражении. Псевдонимы обычно используют как более короткие имена таблиц или
полей для удобства последующих ссылок в программах, для предотвращения неоднозначных ссылок, а
также для получения более информативных имен при выводе результатов запроса.) и статистическими
функциями SQL, предикатами (ALL, DISTINCT, DISTINCTROW или TOP) или с другими параметрами
инструкции SELECT.
таблица
Имя таблицы, из которой загружаются записи
условие_отбора
Условие отбора. Если инструкция содержит предложение WHERE, то после его применения к записям
ядро базы данных Microsoft Access сгруппирует значения.
список_полей_группы
Имена полей (не более 10), используемых для группировки записей. Порядок следования имен в
списке_полей_группы определяет уровень группировки — от самого высокого до самого низкого
условие_группы
Выражение, определяющее отображаемые записи
Замечания
Предложение HAVING не является обязательным.
Предложение HAVING аналогично предложению WHERE, которым определяется выбор записей. После
группировки записей предложением GROUP BY, предложение HAVING определяет отображаемые записи.
SELECT КодТипа,
Sum(НаСкладе)
FROM Товары
GROUP BY КодТипа
HAVING Sum(НаСкладе) > 100 And Like "ТЕЛ*";
Предложение HAVING может содержать до 40 выражений, связанных логическими операторами, такими как
And и Or.
Исходная страница: http://office.microsoft.com/ru-ru/access/HA012314831049.aspx?pid=CH100728991049
Предложение ORDER BY
Сортирует записи, возвращенные запросом, по возрастанию или по убыванию значений указанного поля
(полей).
Синтаксис
SELECT список_полей
FROM таблица
WHERE условие_отбора
[ORDER BY поле1 [ASC | DESC ][, поле2 [ASC | DESC ]][, ...]]]
Инструкция SELECT, содержащая предложение ORDER BY, включает следующие элементы.
Элемент
Описание
список_полей
Имена полей, извлекаемых вместе с любыми псевдонимами (Псевдоним (SQL). Альтернативное имя для
таблицы или поля в выражении. Псевдонимы обычно используют как более короткие имена таблиц или
полей для удобства последующих ссылок в программах, для предотвращения неоднозначных ссылок, а также
для получения более информативных имен при выводе результатов запроса.) и статистическими функциями
SQL, предикатами (ALL, DISTINCT, DISTINCTROW или TOP) или с другими параметрами инструкции SELECT.
таблица
Имя таблицы, из которой извлекаются записи
условия_отбора
Условия отбора. Если инструкция содержит предложение WHERE, то после его применения к записям ядро
базы данных Microsoft Access упорядочит значения записей
поле1, поле2
Имена полей, по которым выполняется сортировка записей.
Замечания
Предложение ORDER BY не является обязательным. Его следует использовать, когда необходимо
отобразить данные в отсортированном виде.
По умолчанию используется порядок сортировки (Порядок сортировки. Способ упорядочивания данных в
зависимости от их значений и типа. Данные могут быть отсортированы по алфавиту, по числовым значениям
или по дате. Порядок сортировки может быть возрастающим (от 0 до 100, от А до Я) или убывающим (от 100
до 0, от Я до A).) по возрастанию (от A к Z, от 0 к 9). Приведенные ниже примеры демонстрируют сортировку
имен сотрудников по фамилиям.
SELECT Фамилия, Имя
FROM Сотрудники
ORDER BY Фамилия;
SELECT Фамилия, Имя
FROM Сотрудники
ORDER BY Фамилия ASC;
Чтобы сортировка полей выполнялась по убыванию (от Z к A, от 9 к 0), добавьте к имени каждого из этих
полей зарезервированное слово DESC. Следующий пример демонстрирует сортировку по убыванию в
зависимости от размера заработной платы сотрудников.
SELECT Фамилия, Зарплата
FROM Сотрудники
ORDER BY Зарплата DESC, Фамилия;
Если в предложении ORDER BY указать поля, содержащие данные типа Поле MEMO (Тип данных «Поле
МЕМО». Тип данных поля в базе данных Microsoft Access. Поле МЕМО может содержать до 65535 символов.)
или Поле объекта OLE (Тип данных «Поле объекта OLE». Тип данных поля, используемый для сохранения
объектов из других приложений, связанных или внедренных в базу данных Microsoft Access.), это приведет к
возникновению ошибки. Ядро базы данных Microsoft Access не может выполнять сортировку этих типов
полей.
Предложение ORDER BY обычно является последним в инструкции SQL (Инструкция (строка) SQL.
Выражение, определяющее команду SQL, например SELECT, UPDATE или DELETE, и включающее
предложения, например WHERE или ORDER BY. Инструкции/строки SQL обычно используются в запросах и в
статистических функциях.).
В предложение ORDER BY можно включать дополнительные поля. Сначала записи сортируются по полю,
указанному в предложении ORDER BY первым. Затем для записей с одинаковыми значениями первого поля
выполняется сортировка по полю, указанному вторым, и так далее.
Исходная страница: http://office.microsoft.com/ru-ru/access/HA012314931049.aspx?pid=CH100728991049
Операция INNER JOIN
Соединяет записи из двух таблиц, если в связующих полях этих таблиц содержатся одинаковые значения.
Синтаксис
FROM таблица1 INNER JOIN таблица2 ON таблица1.поле1 оператор_сравнения таблица2.поле2
Операция INNER JOIN состоит из следующих элементов:
Элемент
Описание
таблица1, таблица2
Имена таблиц, содержащих соединяемые записи
поле1, поле2
Имена связываемых полей. Поля, не являющиеся числовыми, должны относиться к одному типу
данных (Тип данных. Характеристика поля, определяющая тип данных, который может содержать это
поле. Существуют следующие типы данных: Boolean, Integer, Long, Currency, Single, Double, Date, String и
Variant (по умолчанию).) и содержать данные одного вида. Однако имена этих полей могут быть
разными
оператор_сравнения
Любой оператор сравнения: (=, <, >, <=, >= или <>)
Замечания
Операцию INNER JOIN можно использовать в любом предложении FROM. Это самый распространенный тип
соединения. С его помощью осуществляется соединение записей из двух таблиц по связующему полю, если
оно содержит одинаковые значения в обеих таблицах.
При работе с таблицами «Отделы» и «Сотрудники» операцией INNER JOIN можно воспользоваться для
выбора всех сотрудников в каждом отделе. Если же требуется выбрать все отделы (включая те из них, в
которых нет сотрудников) или всех сотрудников (в том числе и не закрепленных за отделом), можно при
помощи операции LEFT JOIN или RIGHT JOIN создать внешнее соединение (Внешнее соединение.
Соединение, при котором в результирующем наборе записей запроса каждая пара соответствующих записей
из двух таблиц соединяется в одну запись и представлены все записи из одной таблицы, даже если во второй
таблице нет соответствующих значений в поле соединения.).
При попытке соединить поля, содержащие данные типа поле MEMO (Тип данных «Поле МЕМО». Тип данных
поля в базе данных Microsoft Access. Поле МЕМО может содержать до 65535 символов.) или поле объекта
OLE (Тип данных «Поле объекта OLE». Тип данных поля, используемый для сохранения объектов из других
приложений, связанных или внедренных в базу данных Microsoft Access.), возникает ошибка.
Допускается соединение двух числовых полей похожих типов. Например, можно соединить поля с типами
данных Счетчик (Тип данных «Счетчик». Тип данных поля в базе данных Microsoft Access, в котором для
каждой добавляемой в таблицу записи в поле автоматически заносится уникальное числовое значение. Поле
счетчика может содержать значения трех типов: последовательные, случайные и коды репликации.) и
Длинное целое (Тип данных Long. Основной тип данных для хранения больших целых чисел. Переменная
типа Long сохраняется как 32-битовое число в диапазоне от -2147483648 до 2147483647.), поскольку эти типы
похожи. Однако соединить поля с типами данных Одинарное с плавающей точкой (Тип данных Single. Тип
данных для сохранения переменных обычной точности в виде 32-битовых (4-байтовых) чисел с плавающей
запятой в диапазоне от -3,402823E38 до -1,401298E-45 для отрицательных значений и от 1,401298E-45 до
3,402823E38 для положительных значений.) и Двойное с плавающей точкой (Тип данных Double. Основной
тип данных для хранения чисел двойной точности с плавающей запятой. Сохраняется как 64-битовое число в
диапазоне приблизительно от -1,797E308 до -4,940E-324 для отрицательных значений, от 4,94E-324 до
1,797E308 для положительных значений и 0.) нельзя.
В следующем примере показано, как можно соединить таблицы «Категории» и «Товары» по полю «КодТипа».
SELECT ИмяКатегории, Наименование
FROM Категории INNER JOIN Товары
ON Категории.КодТипа = Товары.КодТипа;
В предыдущем примере «КодТипа» является связующим полем, но оно не включено в результат запроса,
поскольку оно не указано в инструкции SELECT. Чтобы включить связующее поле в результат запроса,
укажите имя поля в инструкции SELECT: в данном случае это Категории.КодТипа.
В инструкции JOIN можно также связать несколько предложений ON, используя следующий синтаксис:
SELECT поля
FROM таблица1 INNER JOIN таблица2
ON таблица1.поле1 оператор_сравнения таблица2.поле1 AND
ON таблица1.поле2 оператор_сравнения таблица2.поле2) OR
ON таблица1.поле3 оператор_сравнения таблица2.поле3)]
Ниже приведен пример синтаксиса, с помощью которого можно составлять вложенные инструкции JOIN:
SELECT поля
FROM таблица1 INNER JOIN
(таблица2 INNER JOIN [( ]таблица3
[INNER JOIN [( ]таблицаX [INNER JOIN ...)]
ON таблица3.поле3 оператор_сравнения таблицаX.полеX)]
ON таблица2.поле2 оператор_сравнения таблица3.поле3)
ON таблица1.поле1 оператор_сравнения таблица2.поле2
Операции LEFT JOIN и RIGHT JOIN могут быть вложены в операцию INNER JOIN, но операция INNER JOIN не
может быть вложена в операцию LEFT JOIN или RIGHT JOIN.
Исходная страница: http://office.microsoft.com/ru-ru/access/HA012314871049.aspx?pid=CH100728991049
Операции LEFT JOIN, RIGHT JOIN
Соединяют записи исходных таблиц при использовании в любом предложении FROM.
Синтаксис
FROM таблица1 [ LEFT | RIGHT ] JOIN таблица2
ON таблица1.поле1 оператор_сравнения таблица2.поле2
Операции LEFT JOIN и RIGHT JOIN состоят из следующих элементов:
Элемент
Описание
таблица1, таблица2
Имена таблиц, содержащих соединяемые записи
поле1, поле2
Имена связываемых полей. Поля должны относиться к одному типу данных (Тип данных. Характеристика
поля, определяющая тип данных, который может содержать это поле. Существуют следующие типы
данных: Boolean, Integer, Long, Currency, Single, Double, Date, String и Variant (по умолчанию).) и
содержать данные одного вида. Однако имена этих полей могут быть разными
оператор_сравнения
Любой оператор сравнения: (=, <, >, <=, >= или <>)
Замечания
Операция LEFT JOIN используется для создания левого внешнего соединения (Левое внешнее соединение.
Внешнее соединение, при котором в запросе все записи из таблицы на левой стороне операции LEFT JOIN в
инструкции SQL добавляются в результирующий набор записей, даже если в таблице на правой стороне
отсутствуют совпадающие значения в связанных полях.). С помощью левого внешнего соединения
выбираются все записи первой (левой) таблицы, даже если они не соответствуют записям во второй (правой)
таблице.
Операция RIGHT JOIN используется для создания правого внешнего соединения (Правое внешнее
соединение. Внешнее соединение, при котором в запросе все записи из таблицы на правой стороне операции
RIGHT JOIN в инструкции SQL добавляются в результирующий набор записей, даже если в таблице на левой
стороне отсутствуют совпадающие значения в связанных полях.). С помощью правого внешнего соединения
выбираются все записи второй (правой) таблицы, даже если они не соответствуют записям в первой (левой)
таблице.
Например, в случае с таблицами «Отделы» (левая) и «Сотрудники» (правая) можно воспользоваться
операцией LEFT JOIN для выбора всех отделов (включая те из них, в которых нет сотрудников). Чтобы
выбрать всех сотрудников (в том числе и не закрепленных за каким-либо отделом), используйте RIGHT JOIN.
В следующем примере показано, как можно соединить таблицы «Категории» и «Товары» по полю «КодТипа».
Результат запроса представляет собой список типов, включая те, которые не содержат товаров.
SELECT ИмяКатегории, Наименование FROM Категории LEFT JOIN Товары ON Категории.КодТипа =
Товары.КодТипа;
В этом примере, «КодТипа» является связующим полем, но оно не включается в результаты запроса,
поскольку не указано в инструкции SELECT. Чтобы включить связующее поле в результаты запроса, укажите
его имя в инструкции SELECT: в данном случае это Категории.КодТипа.
ПРИМЕЧАНИЯ
Чтобы создать запрос, результатом которого являются только те записи, для которых совпадают данные в
связующих полях, воспользуйтесь операцией INNER JOIN.
Операции LEFT JOIN и RIGHT JOIN могут быть вложены в операцию INNER JOIN, но операция
INNER JOIN не может быть вложена в операцию LEFT JOIN или RIGHT JOIN. Сведения о составлении
вложенных соединений см. в описании вложений в разделе, посвященном операции INNER JOIN.
Можно связать несколько предложений ON. Сведения о связывании предложений см. в разделе,
посвященном операции INNER JOIN.
При попытке соединить поля, содержащие данные типа поле MEMO или поле объекта OLE, возникает
ошибка.
Исходная страница: http://office.microsoft.com/ru-ru/access/HA012314891049.aspx?pid=CH100728991049
Подчиненные запросы SQL
Подчиненным запросом называется инструкция SELECT, помещенная в инструкцию SELECT, SELECT...INTO,
INSERT...INTO, DELETE, UPDATE или в другой подчиненный запрос.
Синтаксис
Для создания подчиненного запроса используются три варианта синтаксиса:
сравнение [ANY | ALL | SOME] (инструкция_sql)
выражение [NOT] IN (инструкция_sql)
[NOT] EXISTS (инструкция_sql)
Подчиненный запрос включает в себя следующие элементы:
Элемент
Описание
сравнение
Выражение (Выражение. Сочетание математических и логических операторов, констант, функций, имен
полей, элементов управления и свойств, в результате обработки которого получается единственное значение.
Выражение может выполнять вычисления, обрабатывать текст или проверять данные.) и оператор сравнения,
сравнивающий выражение с результатами подчиненного запроса
выражение
Выражение, для которого выполняется поиск результирующего набора запроса
инструкция_sql
Инструкция SELECT, составленная в том же формате и по тем же правилам, что и любая другая инструкция
SELECT. Она всегда заключается в скобки.
Замечания
Подчиненный запрос можно использовать вместо выражения в списке полей инструкции SELECT или в
предложениях WHERE и HAVING. В подчиненном запросе инструкция SELECT служит для получения набора
из одного или нескольких заданных значений, оценка которого производится в выражении WHERE или
HAVING.
Предикаты ANY и SOME являются синонимами; с помощью любого из них можно извлечь в главном запросе
записи, удовлетворяющие сравнению с любыми записями, извлеченными в подчиненном запросе. В
приведенном ниже примере запрос возвращает все товары, цена которых превышает цену любого товара,
проданного со скидкой от 25 и более процентов:
SELECT * FROM Товары WHERE ЦенаЗаЕдиницу > ANY (SELECT ЦенаЗаЕдиницу FROM СведенияОЗаказе WHERE
Скидка >= 0,25);
С помощью предиката ALL в главном запросе извлекаются только те записи, которые удовлетворяют
сравнению со всеми записями, извлеченными в подчиненном запросе. Если в предыдущем примере предикат
ANY заменить предикатом ALL, запрос возвратит только те товары, цена которых превышает цену всех
товаров, проданных со скидкой от 25 и более процентов. Этот оператор более жестко ограничивает
результаты запроса.
С помощью предиката IN в главном запросе извлекаются только те записи, которые содержат значения,
совпадающие со значениями каких-либо записей в подчиненном запросе. В следующем примере запрос
возвращает все товары со скидкой от 25 и более процентов:
SELECT * FROM Товары WHERE Код_продукта IN (SELECT Код_продукта FROM СведенияОЗаказе WHERE Скидка
>= 0,25);
Предикат NOT IN, наоборот, позволяет извлечь в главном запросе только те записи, значения которых не
совпадают ни с одним значением записей в подчиненном запросе.
Использование предиката EXISTS (с необязательным зарезервированным словом NOT) в сравнениях
истина/ложь позволяет определить, возвращаются ли какие-либо записи в подчиненном запросе.
В подчиненном запросе можно также использовать псевдонимы таблиц для обращения к таблицам,
перечисленным в предложении FROM за пределами подчиненного запроса. В следующем примере запрос
возвращает имена сотрудников, заработная плата которых равна средней заработной плате всех
сотрудников, занимающих ту же должность, или выше нее. Таблице «Сотрудники» присвоен псевдоним «T1».
SELECT Фамилия, Имя, Должность, Зарплата FROM Сотрудники AS T1 WHERE Зарплата >= (SELECT
Avg(Зарплата) FROM Сотрудники WHERE T1.Должность = Сотрудники.Должность) Order by Должность;
В предыдущем примере зарезервированное слово AS является необязательным.
Некоторые подчиненные запросы разрешены в перекрестных запросах (Перекрестный запрос. Запрос, в
котором подсчитывается сумма, среднее, число значений или выполняются другие статистические расчеты,
после чего результаты группируются в виде таблицы по двум наборам данных, один из которых определяет
заголовки столбцов, а другой заголовки строк.), но только в качестве предикатов (в предложении WHERE). В
перекрестных запросах запрещено использование подчиненных запросов в качестве выходных данных (в
списке SELECT).
Исходная страница: http://office.microsoft.com/ru-ru/access/HA012315131049.aspx?pid=CH100728991049
Операция UNION
Создает запрос на объединение, (Запрос на объединение. Запрос, в котором оператор UNION используется
для объединения результатов двух или нескольких запросов на выборку.) выполняющий объединение
результатов двух или более независимых запросов или таблиц.
Синтаксис
[TABLE] запрос1 UNION [ALL] [TABLE] запрос2 [UNION [ALL] [TABLE] запросN [ ... ]]
Операция UNION включает следующие части.
Часть
запрос1N
Описание
Инструкция SELECT, имя сохраненного запроса или имя сохраненной таблицы с предшествующим ключевым словом
TABLE.
Замечания
При помощи одной операции UNION можно выполнить слияние двух или более запросов, таблиц и
инструкций SELECT в любой последовательности. В приведенном ниже примере показано слияние
результатов выполнения инструкции SELECT и существующей таблицы с именем «Новые учетные записи».
TABLE [Новые учетные записи] UNION ALL
SELECT *
FROM Клиенты
WHERE СуммаЗаказов > 1000;
По умолчанию повторяющиеся записи при использовании операции UNION не возвращаются, однако
включение в инструкцию предиката ALL обеспечивает возврат всех записей. Это также сокращает время
выполнения запроса.
Все запросы операции UNION должны запрашивать одинаковое количество полей; однако не требуется,
чтобы эти поля имели одинаковый размер или тип данных.
Псевдонимы рекомендуется использовать только в первой инструкции SELECT, так как в дальнейших
инструкциях они игнорируются. В предложении ORDER BY следует ссылаться на поля, используя для
определения полей те же имена, что и в первой инструкции SELECT.
ПРИМЕЧАНИЯ
Чтобы сгруппировать возвращенные данные, можно использовать предложение GROUP BY или
HAVING для любого аргумента запроса.
Чтобы возвращать данные в определенном порядке, можно использовать предложение ORDER
BY в конце последнего аргумента запроса.
Исходная страница: http://office.microsoft.com/ru-ru/access/HA012315211049.aspx?pid=CH100728991049
Статистические функции SQL
С помощью статистических функций (Статистические функции. Функции, такие как Sum, Count, Avg или Var,
используемые для расчетов итоговых значений.) SQL можно определить различные статистики на наборах
значений. Кроме того, эти функции могут использоваться в запросах и статистических выражениях свойства
SQL объекта QueryDef или в процессе создания объекта Набор записей на основе запроса SQL.
Функция Avg
Функция Count
Функции First, Last
Функции Min, Max
Функции StDev, StDevP
Функция Sum
Функции Var, VarP
Исходная страница: http://office.microsoft.com/ru-ru/access/HA012315011049.aspx?pid=CH100728991049
Функция Avg
Вычисляет среднее арифметическое набора значений, содержащихся в определенном поле запроса.
Синтаксис
Avg(выражение)
Аргумент выражение представляет собой строковое выражение, указывающее поле с числовыми данными,
для которых требуется найти среднее арифметическое, или выражение, по которому выполняется
вычисление с использованием данных в этом поле. Операндом в аргументе выражение может быть имя
таблицы, константа или функция (встроенная или определяемая пользователем, но не другая статистическая
функция SQL).
Замечания
Значение, полученное с помощью функции Avg, является средним арифметическим (суммой значений,
деленной на их число). Например, можно использовать функцию Avg, чтобы подсчитать среднюю стоимость
перевозки.
Функция Avg не включает в вычисление поля со значением Null.
Функцию Avg можно применять в выражении запроса, в качестве свойства SQL объекта QueryDef или при
создании объекта Recordset (набор записей) на основе запроса SQL.
Исходная страница: http://office.microsoft.com/ru-ru/access/HA012314331049.aspx
Функция Count
Подсчитывает количество записей, возвращенных запросом.
Синтаксис
Count(выражение)
Аргумент выражение представляет собой строковое выражение, определяющее либо поле с данными,
количество которых необходимо подсчитать, либо выражение, в котором производятся вычисления с
данными поля. Операндом в выражении может быть имя таблицы или функция (встроенная или
определяемая пользователем, но не статистическая функция SQL). Подсчитать можно количество записей
любого типа, включая текстовые.
Замечания
Функцию Count можно использовать для подсчета количества записей в базовом запросе. Например, с
помощью функции Count можно подсчитать количество заказов, отправленных в определенную страну.
Хотя в выражении можно проводить вычисления над полем, функция Count просто подсчитывает число
записей. Результат не зависит от того, какие именно значения хранятся в записях.
Функция Count не учитывает при подсчете записи, имеющие значение Null , если вместо аргумента
выражение не используется подстановочный знак звездочки (*). Если этот знак используется, функция Count
подсчитывает общее число записей, включая записи, содержащие поля со значением Null. Вариант Count(*)
работает значительно быстрее, чем Count([имя_столбца]). Не следует заключать звездочку в кавычки (' '). В
приведенном ниже примере вычисляется количество записей в таблице «Заказы».
SELECT Count(*) AS ВсегоЗаказов FROM Заказы;
Если аргумент выражение определяет несколько полей, как минимум одно из них должно иметь значение,
отличное от Null, — только тогда функция Count учитывает запись. Если все поля имеют значения Null,
запись не учитывается. Имена полей разделяются амперсандом (&). В следующем примере показано, каким
образом можно ограничить подсчет записями, в которых либо поле «ДатаОтгрузки», либо поле «Доставка»
имеет значение, отличное от Null.
SELECT Count( "ДатаНазначения&Доставка") AS [Непустые] FROM Заказы
Функцию Count можно использовать в выражении запроса. Это выражение можно также использовать в
свойстве SQL объекта QueryDef или при создании объекта Набор записей на основе запроса SQL.
Исходная страница: http://office.microsoft.com/ru-ru/access/HA012314381049.aspx
Функции First и Last
Возвращают значение поля из первой или последней записи в результирующем наборе запроса.
Синтаксис
First(выражение)
Last(выражение)
Выражение представляет собой строковое выражение, определяющее поле с данными, которые необходимо
использовать, или выражение, по которому производится вычисление. Операндом в выражении может быть
имя таблицы, константа или функция (встроенная или определяемая пользователем, но не статистическая
функция SQL).
Замечания
Эти функции возвращают значение определенного поля в первой или в последней записи, в зависимости от
результирующего набора, возвращаемого запросом. Если запрос не содержит предложения ORDER BY,
значения, возвращенные этими функциями, будут случайными, так как записи обычно возвращаются в
произвольном порядке.
Функции Min, Max
Возвращают наибольшее и наименьшее значения поля, заданного в запросе.
Синтаксис
Min(выражение)
Max(выражение)
Выражение представляет собой строковое выражение, определяющее поле с данными, которые необходимо
оценить, или выражение, по которому производится вычисление. Операндом в выражении может быть имя
поля таблицы, константа или функция (встроенная или определяемая пользователем, но не статистическая
функция SQL).
Замечания
При помощи функций Min и Max можно определить наименьшее и наибольшее значение поля на основе
заданных условий выборки или группировки. Например, эти функции можно использовать для возвращения
максимальной и минимальной стоимости доставки. Если выборка не задана, используется вся таблица.
Функции Min и Max можно применять в выражении запроса, в качестве свойства SQL объекта QueryDef, а
также при создании объекта Recordset (набор записей) на основе запроса SQL.
Исходная страница: http://office.microsoft.com/ru-ru/access/HA012314911049.aspx
Функция Sum
Возвращает сумму набора значений, содержащихся в заданном поле запроса.
Синтаксис
Sum(выражение)
Местозаполнитель выражение представляет собой строковое выражение, определяющее поле с численными
данными, которые необходимо добавить, или выражение, которое используется для вычислений данных в
этом поле. Операндом в выражении может быть имя поля таблицы, константа или функция (встроенная или
определяемая пользователем, но не статистическая функция SQL).
Замечания
Функция Sum складывает значения поля. Например, функцию Sum можно использовать для определения
полной стоимости доставки.
Функция Sum игнорирует записи, содержащие поля со значением Null. Следующий пример демонстрирует
вычисление общей стоимости продуктов по полям «ЦенаЗаЕдиницу» и «Количество»:
SELECT Sum(ЦенаЗаЕдиницу * Количество) AS [Общий доход]
FROM [Сведения о заказе];
Функцию Sum можно использовать в выражении запроса. Это выражение также можно использовать в
свойстве SQL объекта QueryDef или при создании объекта Набор записей на основе запроса SQL.
Исходная страница: http://office.microsoft.com/ru-ru/access/HA012315151049.aspx
Оператор Between...And
Определяет, попадает ли значение выражения в указанный интервал. Данный оператор можно использовать
в инструкциях SQL.
Синтаксис
выражение [Not] Between значение1 And значение2
Синтаксис оператора Between...And включает в себя следующие компоненты:
Компонент
Описание
выражение
Выражение, определяющее поле с данными, подлежащими сравнению
значение1; значение2
Выражения, с которыми сравнивается компонент выражение
Замечания
Если значение компонента выражение находится между значением1 и значением2 (включительно), оператор
Between...And возвращает значение True; в противном случае возвращается значение False. Включение
логического оператора Not приводит к проверке противоположного условия (предполагающего, что компонент
выражение находится вне интервала, определенного компонентами значение1 и значение2).
При помощи оператора Between...And можно определить, лежит ли значение поля в определенном числовом
интервале. В приведенном ниже примере проверяется, находится ли адрес отправляемого заказа в
определенном интервале почтовых индексов. Если значение индекса оказывается между 98101 и 98199,
функция IIf возвращает значение «Местный». В противном случае возвращается значение «Неместный».
SELECT IIf(PostalCode Between 98101 And 98199, “Local”, “Nonlocal”) FROM Publishers
Если значение компонента выражение, значение1 или значение2 — Null, оператор Between...And
возвращает значение Null.
Поскольку подстановочные знаки, например звездочка (*), считаются литералами, их нельзя использовать в
операторе Between...And. Например, нельзя использовать выражения вида «980*» и «989*», чтобы найти все
индексы, начинающиеся с чисел в интервале от 980 до 989. Существует два способа решения этой задачи.
Можно добавить в запрос выражение, которое передает оператору Between...And первые три символа
текстового поля. Другой вариант — добавить к нижней и верхней границам проверяемого интервала
дополнительные цифры, в данном случае — от 98000 до 98999 или от 98000 до 98999 - 9999, если
используются расширенные почтовые индексы (у нижних индексов необходимо опустить - 0000, так как в
противном случае будет пропущен индекс 98000, если в одних индексах есть расширенные секции, а в других
нет).
Исходная страница: http://office.microsoft.com/ru-ru/access/HA012314341049.aspx
Оператор In
Применимо к: Microsoft Office Access 2007
Определяет, равно ли значение выражения какому-либо значению из указанного списка.
Синтаксис
выражение [Not] In(значение1, значение2, . . .)
Замечания
Синтаксис оператора In включает в себя следующие элементы.
Элемент
Описание
выражение
Выражение, определяющее поле с данными для вычисления
значение1, значение2
Выражение или список выражений, с которыми сравнивается выражение
Оператор In возвращает значение True, если выражение найдено в списке значений, и False, если оно не
найдено. Чтобы вычислить значение выражения с обратным условием (выражения нет в списке значений),
можно добавить логический оператор Not.
Например, с помощью оператора In можно определить, какие заказы доставлялись в указанные районы.
SELECT *
FROM Заказы
WHERE РегионДоставки In (‘Север’,’Восток’,’Юг’);
Исходная страница: http://office.microsoft.com/ru-ru/access/HA012314851049.aspx?pid=CH100728991049
Оператор Like
Сравнивает строковое выражение с шаблоном в выражении SQL.
Синтаксис
выражение Like "шаблон"
Синтаксис оператора Like включает в себя следующие элементы.
Элемент
Описание
выражение
Выражение SQL, используемое в предложении WHERE.
шаблон
Строка или литерал текстовой строки, с которым сравнивается выражение
Замечания
Оператор Like можно использовать для поиска значений полей, соответствующих указанному шаблону. В
качестве шаблона, можно указать полное значение (например, Like “Smith”) или использовать
подстановочные знаки, чтобы получить диапазон значений (например, Like “Sm*”).
В выражениях оператор Like может использоваться для сравнения значения поля со строковым выражением.
Например, если в запросе SQL указать Like “C*”, запрос вернет все значения полей, начинающиеся на букву
C. В запросе с параметрами можно предложить пользователю ввести шаблон для поиска.
В приведенном ниже примере запрос возвращает данные, начинающиеся с буквы P, за которой следуют
любая буква в интервале от A до F и три цифры.
Like “P[A-F]###”
Способы использования оператора Like для обнаружения соответствия с помощью различных шаблонов
указаны в следующей таблице.
Тип соответствия
Несколько символов
Соответствие
(возвращает значение
«True»)
Шаблон
Нет соответствия
(возвращает значение
«False»)
a*a
aa, aBa, aBBBa
aBC
*ab*
abc, AABB, Xab
aZb, bac
Специальные символы
a[*]a
a*a
aaa
Несколько символов
ab*
abcdefg, abc
cab, aab
Один символ
a?a
aaa, a3a, aBa
aBBBa
Одна цифра
a#a
a0a, a1a, a2a
aaa, a10a
Символы в определенном интервале
[a-z]
f, p, j
2, &
Символы вне определенного
интервала
[!a-z]
9, &, %
b, a
Любой символ кроме цифр
[!0-9]
A, a, &, ~
0, 1, 9
Комбинация
a[!b-m]#
An9, az0, a99
abc, aj0
Руководство по синтаксису выражений
Применимо к: Microsoft Office Access 2007
Скрыть все
При работе в Microsoft Office Access 2007 возникают ситуации, когда необходимо получить значения, не
содержащиеся в данных напрямую. Например, может потребоваться вычислить налог с оборота для заказа
или итоговое значение по заказу. Эти значения вычисляются с помощью выражений.
Чтобы использовать выражения их сначала следует записать с правильным синтаксисом. Синтаксис — это
набор правил, по которым объединяются слова и символы в выражении.
Воспользуемся следующей аллегорией: когда требуется, чтобы Access выполнил определенные действия,
необходимо сказать об этом на его языке. Например, предположим, что требуется сказать Access: «Посмотри
в поле «ДеньРождения» в таблице «Клиенты» и сообщи год рождения клиента». Такое выражение будет
выглядеть следующим образом: DatePart("yyyy",[Клиенты]![ДеньРождения]). Это выражение состоит из
функции DatePart и двух аргументов — «yyyy» и [Клиенты]![ДеньРождения].
Рассмотрим это выражение более подробно.
DatePart — функция, возвращающая определенную часть даты.
Аргумент интервал определяет возвращаемую часть даты — в данном случае, «yyyy» означает, что
будет возвращен год значения даты.
Аргумент дата определяет элемент, из которого будет взято значение даты — в данном случае
[Клиенты]![ДеньРождения] означает, что значение даты будет взято из поля «ДеньРождения» таблицы
«Клиенты».
Итак, в выражениях Access используется язык, который может быть немного сложен для восприятия. Но с
пониманием синтаксиса выражений и практикой становиться проще воспринимать этот язык.
Есть несколько ключевых понятий, которые следует знать перед написанием выражений. В данной статье
приведены принципы, важные для понимания для понимания синтаксиса выражений, и синтаксис,
используемый выражениях.
Данная статья не затрагивает синтаксис языка SQL (Structured Query Language), и не является руководством
по синтаксису программ Visual Basic для приложений (VBA).
В этой статье:
Введение
Объекты, семейства и свойства
Идентификаторы
Функции, операторы и константы
Введение
Чтобы создать выражение, следует объединить идентификаторы с помощью функций, операторов и констант.
Любое допустимое выражение должно содержать по крайней мере одну функцию или один идентификатор, а
также может содержать константы или операторы. Выражение можно также использовать как часть другого
выражения — обычно в качестве аргумента функции.
Идентификаторы в выражениях Общая форма идентификатора в выражении выглядит
следующим образом: [Имя семейства]![Имя объекта].[Имя свойства].
ПРИМЕЧАНИЕ.
Достаточно указать такое количество частей идентификатора, чтобы он был уникален в
контексте выражения. Часто форма идентификатора принимает вид [Имя объекта].
Функции в выражениях Общая форма выражения, использующего функцию, выглядит
следующим образом: Function(аргумент, аргумент), где один из аргументов обычно является
идентификатором или выражением.
ПРИМЕЧАНИЕ.
Для некоторых функций аргументы не требуются.
Перед использованием конкретной функции просмотрите соответствующий раздел справки для более
детальных сведений об используемом этой функцией синтаксисе.
Операторы в выражениях Общая форма выражения, использующего оператор, выглядит
следующим образом: Идентификатор оператор идентификатор. Для этой формы существуют
исключения, указанные в таблицах в разделе Операторы.
Константы в выражениях Общая форма выражения, использующего константу, выглядит
следующим образом: Идентификатор оператор_сравнения константа.
К началу страницы
Объекты, семейства и свойства
Все таблицы, запросы, формы, отчеты и поля в базе данных Access также называются объектами. У каждого
объекта есть имя. Некоторые объекты уже имеют имена, например таблицы «Контакты» в базе данных,
созданной на основе шаблона «Контакты» Microsoft Office Access. При создании нового объекта ему следует
дать имя.
Набор всех составляющих определенного типа объекта называется семейством. Например, набор всех
таблиц в базе данных является семейством. Некоторые объекты, являющиеся частью семейства в базе
данных, могут также являться семействами, содержащими другие объекты. Например, объект-таблица — это
семейство, содержащее объекты-поля.
Объекты имеют свойства, которые описывают и позволяют изменять характеристики объекта. Например, у
объекта-запроса есть свойство Представление по умолчанию (Default View), описывающие и позволяющее
задать отображение запроса при его выполнении.
Приведенные ниже схемы иллюстрируют связь между семействами, объектами и свойствами:
Семейство
Объект
Свойство
К началу страницы
Идентификаторы
При использовании объекта, семейства или свойства в выражении пользователь ссылается на него с
помощью идентификатора. Идентификатор включает имя идентифицируемого элемента, а также имя
элемента к которому он принадлежит. Например, идентификатор поля включает имя поля и имя таблицы, к
которой данное поле принадлежит. Примером такого идентификатора служит приведенный выше пример
выражения: [Клиенты]![ДеньРождения].
В некоторых случаях идентификатором служит само имя элемента. Это справедливо, если имя элемента
уникально в контексте создаваемого выражения. Оставшаяся часть идентификатора предоставляется по
контексту. Например, при создании запроса, использующего только одну таблицу, идентификатором может
быть имя поля без имени таблицы, так как имена полей внутри таблицы уникальны. Так как используется
только одна таблица, имя таблицы в любом идентификаторе, используемом в запросе для ссылки на поле,
подразумевается.
В других случаях необходимо явно указать все части идентификатора, чтобы ссылка была рабочей. Это
справедливо, если идентификатор не является уникальным в контексте выражения. В случае
неоднозначности следует явно указать количество частей идентификатора, достаточное для того, чтобы
идентификатор был уникален в текущем контексте. Например, предположим, что создается запрос,
использующий таблицы «Товары» и «Заказы», причем в обеих содержится поле «КодТовара». В данном
случае идентификатор, используемый в запросе для ссылки на одно из полей «КодТовара» должен включать
имя таблице в дополнение к имени поля — например, [Товары]![КодТовара].
Операторы идентификаторов Существует три оператора, которые можно использовать в
идентификаторах.
Оператор «восклицательный знак» (!)
Оператор «точка» (.)
Оператор «квадратные скобки» ([ ])
Каждая часть идентификатора заключается в квадратные скобки, а затем объединяется с другими частями с
помощью операторов «восклицательный знак» и «точка». Например, идентификатор для поля «Фамилия» в
таблице «Сотрудники» выглядит следующим образом: [Сотрудники]![Фамилия]. Оператор
«восклицательный знак» означает, что следующий за ним элемент является объектом, принадлежащим
семейству, предшествующему оператору «точка». В данном случае [Фамилия] — это объект-поле,
принадлежащее семейству [Сотрудники], которое является объектом-таблицей.
ПРИМЕЧАНИЕ.
Строго говоря, не всегда обязательно заключать идентификатор или его часть в квадратные
скобки. Если в идентификаторе не содержится пробелов или других специальных знаков, квадратные скобки
будут добавлены автоматически. Однако самостоятельное включение квадратных скобок является хорошей
практикой, так как позволяет избежать ошибок, а также служит визуальным обозначением идентификатора в
выражении.
К началу страницы
Функции, операторы и константы
Чтобы создать выражение следует не только указать идентификаторы — следует указать действие, которое
требуется выполнить. Для выполнения действий в выражении используются функции, операторы и
константы.
Функции
Функция — это процедура, которая может быть использована в выражении. Некоторые функции, например
Date, не требуют входных данных для работы. Большинство функций, однако, требует входные данные,
которые называются аргументами. В примере выражения, приведенном в начале статьи, у функции DatePart
есть два аргумента: интервал (со значением «yyyy») и дата (со значением [Клиенты]![ДеньРождения]).
Функция DatePart требует по крайней мере эти два аргумента (интервал и дату), но принимает до четырех
аргументов.
ПРИМЕЧАНИЕ.
Если функция имеет более одного аргумента, эти аргументы разделяются запятыми.
В следующем списке приведено несколько часто используемых в выражениях функций. Для получения
дополнительных сведений о синтаксисе, используемом этой функцией щелкните ссылку каждой функции.
Date Функция Date используется для вставки в выражение текущей системной даты. Она часто
используется совместно с функцией Format и с идентификаторами полей, содержащих значения
даты/времени.
DatePart Функция DatePart используется для определения или извлечения части даты — обычно
дата получается от идентификатора поля, но иногда значение даты возвращается другой функцией,
например Date.
DateDiff Функция DateDiff используется для определения разницы между двумя датами — обычно
между датой, полученной от идентификатора поля, и датой, полученной от функции Date.
Format Функция Format используется для применения формата к идентификатору, а также для
применения формата к результату другой функции.
IIf Функция IIf используется для оценки выражения в значениях True или False и возвращения
указанного значения, если выражения возвращает значение True, либо другого указанного значения,
если выражение возвращает значение False.
InStr Функция InStr используется для поиска положения знака или строки (Строка (строковое
значение). Последовательность знаков, которая может включать числа и текст.) внутри другой строки.
Строка, по которой осуществляется поиск обычно возвращается идентификатором поля.
Left, Mid и Right Эти функции используются для извлечения знаков из строк, начиная от левого
знака (Left), определенного положения в середине (Mid) или от правого знака (Right). Они часто
используются совместно с функцией InStr. Строки, из которых данные функции извлекают знаки,
обычно возвращаются идентификатором поля.
Списком функций по типам см. в статье Функции (упорядоченные по категории).
Операторы
Оператор — это слово или символ, обозначающий определенную арифметическую или логическую операцию
над элементами выражения. Операторы бывают:
Арифметические, например знак «плюс» (+)
Операторы сравнения, например знак равенства (=)
Логические операторы, например Not.
Операторы обычно используются для обозначения отношения между двумя идентификаторами. В
приведенных ниже таблицах содержаться операторы, используемые в выражениях Access.
Арифметические операторы
Арифметические операторы используются для вычисления значений от двух или более чисел или для
изменения знака числа с положительного на отрицательный.
Оператор
Назначение
Пример
+
Сумма двух чисел.
[СуммаЗаказа]+[СуммаНалогов]
-
Разность между двумя числами или задание отрицательного значения числа.
[Цена]-[Скидка]
*
Произведение двух чисел.
[Количество]*[Цена]
/
Деление первого числа на второе.
[Сумма]/[Количество]
\
Округление обоих чисел до целых значений и последующее деление первого
числа на второе, после чего результат округляется до целого.
[Зарегистрировано]\[Номеров]
Mod
Деление первого числа на второе и возвращение остатка.
[Зарегистрировано] Mod
[Номеров]
^
Возведение числа в степень указанного порядка.
Число ^ порядок
Операторы сравнения
Операторы сравнения используются для сравнения значений и возвращения результата в виде значений
типа True, False или Null (неизвестное значение).
Оператор
Назначение
<
Определяет, что первое значение должно быть меньше, чем второе.
<=
Определяет, что первое значение должно быть меньше или равно второму.
>
Определяет, что первое значение должно быть больше, чем второе.
>=
Определяет, что первое значение должно быть больше или равно второму.
=
Определяет, что первое значение должно быть равно второму.
<>
Определяет, что первое значение должно быть не равно второму.
Во всех случаях, если одно из значений является значением Null, результат также будет значением Null. Так
как значение Null представляет собой неизвестное значение, результат сравнения с неизвестным значением
также неизвестен.
Логические операторы
Логические операторы используются для объединения двух значений и возвращения результата в виде
значений типа True, False или Null. Логические операторы также называются булевыми.
Оператор
Применение
Описание
And
Выраж1 And Выраж2
Возвращает значение True, если «Выраж1» и «Выраж2» также True.
Or
Выраж1 Or Выраж2
Возвращает значение True, если либо «Выраж1», либо «Выраж2» — True.
Eqv
Выраж1 Eqv Выраж2
Возвращает значение True, если оба аргумента, «Выраж1» и «Выраж2», — True,
либо если оба аргумента — False.
Not
Not Выраж
Возвращает значение True, если «Выраж» не равно True.
Xor
Выраж1 Xor Выраж2
Возвращает значение True, если либо «Выраж1», либо «Выраж2» — True, но не
оба одновременно.
Операторы слияния
Операторы слияния используются для объединения двух текстовых значений в одну строку.
Оператор
Применение
Описание
&
строка1 & строка2
Объединение двух строк в одну.
+
строка1 + строка2
Объединение двух строк в одну и распространение значений Null.
Специальные операторы
Специальные операторы используются как показано в следующей таблице.
Оператор
Описание
Дополнительные сведения
Is Null или Is Not
Null
Определяет, является ли аргумент значением Null или Не Null
(Not Null).
Like "шаблон"
Сопоставляет строковые значения с использованием
подстановочных знаков ? и *.
Оператор Like
Between знач1 And
знач2
Определяет, лежит ли числовое значение или значение даты
в указанном интервале.
Оператор Between...And
In(строка1,строка2...)
Определяет, содержится ли строковое значение в наборе
строковых значений.
Оператор In
Константы
Константа — это известное, не изменяющееся значение, которое может быть использовано в выражении. В
Access существуют четыре часто применяемых константы:
True Определяет значение, соответствующее логическому значению «Истина».
True Определяет значение, соответствующее логическому значению «Ложь».
Null Определяет неизвестное значение.
"" (пустая строка) Определяет известное пустое значение.
Константы могут использоваться в качестве аргументов функций и в выражениях, как часть условия.
Например, константа «пустая строка» ("") может использоваться в качестве условия для столбца в запросе:
<>"", чтобы вернуть значения полей этого столбца. В данном примере <> является оператором, а "" —
константой. Вместе они определяют, что идентификатор должен пройти сравнение с пустой строкой.
Выражение возвращает значение True в случае, если значение идентификатора не равно пустой строке.
ПРИМЕЧАНИЕ.
Следует соблюдать осторожность при использовании константы Null. В большинстве случаев
использование константы Null совместно с оператором сравнения будет приводить к ошибке. Если в
выражении требуется сравнить значение с константой Null, используйте оператор Is Null или Is Not Null.
Download