К сожалению, на данный момент проект остановлен.

Описание языка запросов

Основные понятия

Для отбора записей в представление служит специальный язык запросов.

Строка запроса состоит из отдельных условий, которые могут объединяться при помощи логических операторов OR и AND. Порядок выполнения логических операторов может быть изменен при помощи скобок.

Отдельное условие может быть представлено либо результатом сравнения двух выражений, либо результатом логической функции (ISNULL, CONTAIN, STARTSWITH).

Перед любым условием может стоять оператор «NOT», что означает изменение условия на противоположное.

Под выражением понимаются следующие конструкции:

  • символьная константа
  • числовая константа
  • значение поля
  • значение функции

Перед числовым выражением может стоять оператор «-», который меняет знак числа на противоположный.

При записи символьных констант, имен функций, операторов и полей регистр символов не учитывается.

При выполнении запроса условие заданное строкой запроса вычисляется для каждой записи данных, при этом отбираются только те записи для которых это условие истинно.

Описание отдельных элементов языка запросов

Символьная константа

Символьная константа – это текст заключенный в кавычки или апострофы. Например:

'Иванов Иван Иванович'
"Петров Петр Петрович"

Если в тексте константы нужно использовать кавычки, то константу следует заключать в апострофы и наоборот, если в тексте константы встречаются кавычки, то ее следует заключать в апострофы.

Числовые константы

Числовые константы записываются в десятичной системе счисления. Например:

1234
3456

Перед числовой константой, как впрочем, и перед любым числовым выражением, может стоять оператор «-». Например:

-1234
-3456

Значение поля

Для получения значения поля необходимо заключить имя поля в квадратные скобки, что условно может быть записано следующим образом:

[<имя поля>]

Пример:

[Фамилия]
[Место работы]

Записывать имена полей следует аккуратно, различие даже на один символ (включая пробел) приведет к ошибке. Регистр букв при записи имен полей значения не имеет. Поэтому следующие записи считаются эквивалентными:

[фамилия]
[ФАМИЛИЯ]
[ФаМиЛиЯ]

Перед числовыми полями может стоять оператор «-», который изменит знак числа на противоположный. Например:

-[рейтинг]

Функция SOURCE

Функция SOURCE возвращает имя источника записи, записывается следующим образом:

SOURCE()

Регистр символов в имени функции не имеет значения, поэтому можно, к примеру, писать и так:

source()
Source()

Функция ALL

Функция ALL является фиктивной функцией, которая предназначена для отбора всех записей.

ALL()

Составление условий для отбора записей

Отдельное условие, получаемое сравнением двух выражений

Отдельное условие может быть сформировано при помощи сравнения двух выражений, для чего необходимо записать первое выражение, затем оператор сравнения и второе выражение. Например:

[Фамилия] = "Иванов"
template() = 'сотрудник'
[Длина] > 100

Могут использоваться следующие операторы сравнения:

«=» - проверка на равенство
«<>» - проверка на неравенство
«>=» - проверка на больше или равно
«<=» - проверка на меньше или равно

Числовые данные сравниваются в соответствии с арифметическими правилами. Например:

[Вес] >= 100

По данному выражению будут отобраны только записи, в которых значения поля «Вес» больше или равно 100.

Символьные данные сравниваются посимвольно, т. е. сначала сравниваются первые символы строк, затем вторые символы и т. д. Если соответствующие символы равны (регистр символов не учитывается), то сравнение продолжается. Если символы закончились и в первой и во второй сроках, то строки считаются равными. Если код символа(регистр опять таки не учитывается) в первой строке больше чем код символа из второй сроки, то первая строка считается больше чем вторая, и наоборот. Если символы в первой строке заканчиваются раньше чем во второй, то первая строка считается меньше, и наоборот.

Например:

[Фамилия] = "Иванов"

По данному выражению будут отобраны все записи, в которых значения поля «Фамилия» будет равно «Иванов» (без учета регистра символов, т. е. значения поля может быть, например, «ИВАНОВ» или «иванов»).

Перед отдельным условием, как впрочем, и перед любым другим условием, может стоять оператор «NOT», который меняет условие на противоположное. Например:

not [Фамилия] = "Иванов"

По данному условию будут отобраны все записи, в которых значения поля «Фамилия» будет не равно «Иванов». Что эквивалентно записи:

[Фамилия] != "Иванов"

Оператор «NOT», как и другие операторы, может записываться символами в любом регистре. Например:

not [Фамилия] = "Иванов"
NOT [Фамилия] = "Иванов"
Not [Фамилия] = "Иванов"

Функция ISNULL, проверка на пустое значение

Функция ISNULL, служить для проверки значения выражения (обычно значения поля) на пустое значение. Например:

isnull([Фамилия])

Данное выражение отберет все записи, в которых значение поля «Фамилия» пустое, что эквивалентно условию:

[Фамилия] = ""

Имя функции может записываться символами в любом регистре. Например:

ISNULL([Фамилия])
IsNull([Фамилия])
isnull([Фамилия])

Перед функцией, может стоять оператор «NOT», например:

NOT ISNULL([Фамилия])

По данному условию будут отобраны записи, в которых заполнено поле «Фамилия», что эквивалентно условию:

[Фамилия] <> ""

Функция CONTAIN, проверка на вхождение подстроки в строку

Функция CONTAIN имеет два аргумента и проверяет, входит ли строка заданная вторым аргументом в строку заданную первым аргументом. Например:

CONTAIN([Название предприятия], "завод")

По данному запросу будут отобраны записи, в которых в поле «Название предприятия» фигурирует слово «завод».

Регистр символов аргументов функции значения не имеет. Например, следующие записи эквивалентны:

CONTAIN([Название предприятия], "завод")
CONTAIN([Название предприятия], "ЗАВОД")
CONTAIN([Название предприятия], "Завод")

Имя функции может записываться символами в любом регистре. Например:

CONTAIN([Название предприятия], "завод")
contain([Название предприятия], "завод")
Contain([Название предприятия], "завод")

Функция STARTSWITH, проверка на начала строки заданной подстрокой

Функция STARTSWITH похожа на функцию CONTAIN за исключением того, что функция STARTSWITH проверяет наличие подстроки, заданной вторым аргументом, только в начале строки, заданной первым аргументов. Например:

STARTSWITH([Название предприятия], "завод")

По данному запросу будут отобраны записи, в которых значения поля «Название предприятия» начинается со слова «завод».

Регистр символов аргументов функции значения не имеет. Например, следующие записи эквивалентны:

STARTSWITH([Название предприятия], "завод")
STARTSWITH([Название предприятия], "ЗАВОД")
STARTSWITH([Название предприятия], "Завод")

Имя функции может записываться символами в любом регистре. Например:

STARTSWITH([Название предприятия], "завод")
startswith([Название предприятия], "завод")
StartsWith([Название предприятия], "завод")

Комбинирование условий, при помощи логических операторов OR и AND

Условия могут быть скомбинированы при помощи логических операторов. Логический оператор OR объединяет два условия, так что, результирующее условие будет выполняться при выполнении хотя бы одного из объединяемых условий.

Например:

[Фамилия] = "Иванов" OR [Фамилия] = "Петров"

По данному выражению будут отобраны записи о людях с фамилиями «Иванов» и «Петров».

Логический оператор AND объединяет два условия, так что, результирующее условие будет выполняться только при выполнении обоих условий.

Например:

[Фамилия] = "Иванов" AND [Год рождения] > 1975

По данному запросу будут отобраны записи о людях по фамилии «Иванов» и родившихся после 1975 года.

Операторы OR и AND, как и другие операторы, могут записываться символами в любом регистре. Например:

[Фамилия] = "Иванов" OR [Фамилия] = "Петров"
[Фамилия] = "Иванов" or [Фамилия] = "Петров"
[Фамилия] = "Иванов" And [Год рождения] > 1975

Порядок выполнения логических операторов AND и OR, использование скобок

Логические операторы OR и AND выполняются в порядке их появления в тексте строки запроса. Например:

[Фамилия] = "Петров" OR [Фамилия] = "Иванов" AND [Год рождения] > 1975

Означает, что будут отобраны записи о людях с фамилиями «Петров» и «Иванов», которые родились после 1975 года.

Для изменения порядка выполнения операторов используются круглые скобки. Например:

([Фамилия] = "Петров" OR [Фамилия] = "Иванов") AND ([Год рождения] > 1975 OR [Год рождения] < 1960)

По такому выражению будут отобраны люди по фамилиям «Петров» и «Иванов», которые родились либо до 1960 года, либо после 1975.

Логический оператор NOT, порядок выполнения и скобки

Перед любым условием может стоять логический оператор NOT. Это означает, что условие меняется на противоположное. Оператор NOT относиться непосредственно к следующему за ним условию и выполняется до операторов OR и AND. Например:

NOT [Фамилия] = "Иванов" AND [Год рождения] > 1975

По такому запросу будут отобраны записи обо всех людях у кого фамилия отличная от фамилии «Иванов» и родившихся после 1975 года.

Оператор NOT может стоять перед скобками, тогда он относиться ко всему выражению в скобках соответственно. Например:

NOT ([Фамилия] = "Иванов" AND [Год рождения] > 1975)

Такой запрос отберет все записи, кроме тех, в которых поле «Фамилия» равно значению «Иванов» и поле «Год рождения» больше 1975.