Ключевая секция (опция) FROM определяет одну или несколько таблиц данных, из которых выполняется выборка запращиваемых данных.

Общая синтаксическая конструкция представлена в разделе SELECT - SQL, команда.

Детальный синтаксис рассматриваемой секции FROM имеет следующий вид:

FROM [FORCE] Table_List_Item [, ...]
[[JoinType] JOIN DatabaseName!]Table [[AS] Local_Alias]
[ON JoinCondition [AND | OR [JoinCondition | FilterCondition] ...]

Параметры

[FORCE]

Опция FORCE определяет, что объединение указанных таблиц осуществляется в том порядке, как они представлены в секции FROM.

NoteПримечание

Если опция FORCE - отсутствует, Visual FoxPro пытается оптимизировать выполняемый Запрос по объединению таблиц. Однако, данный Запрос может быть выполнен гораздо быстрее при указании опции FORCE, что отключает оптимизацию запроса системой Visual FoxPro .

Table_List_Item [, ...]

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

Table_List_Item может иметь одну из следующих возможных конструкций:

  • [DatabaseName!]Table [[AS] Local_Alias]

    DatabaseName! определяет имя базы данных, за которой закреплена таблица, и не является текущей (открытой) базой данных. Если требуемая таблица не закреплена за текущей базой данных, вы должны указать имя родительской базы данных. В качестве разделителя между именем базы данных и именем таблица используется восклицательный знак (!), который ставится сразу после имени базы данных, перед именем таблицы.

    Tableопределяет имя таблицы, из которой выполняется выборка. Если указанная таблица не открыта, Visual FoxPro отображает диалоговый бокс Open, с помощью которого можно указать местоположение требуемой таблицы. После выполнения Запроса открываемые таким образом таблицы - остаются открытыми.

    Local_Alias определяет внутреннее имя (алиас) указанной таблицы Table. Если вы используете данный внутренний алиас, то вы можете его использовать в рамках рассматриваемой команды SELECT, для использования ссылки в других секциях.

    Отсутствуют ограничения не количество задаваемых имен таблиц и внутренних алиасов в одной команде SELECT. Для задания выборки данных из нескольких таблиц вы можете использовать также несколько ключевых слов JOIN.

  • (Subquery) AS Subquery_Alias 

    Subquery определяет вложенный оператор SELECT, как некоторый подзапрос рассматриваемого запроса SELECT.

    NoteОбратите внимание

    При использовании Подзапросов в секции FROM, каждый подзапрос должен иметь внутренний алиас.

    На Подзапросы в секции FROM не распространяются ограничения, которые есть для подзапросов, используемых при фильтрации; эти подзапросы могут иметь любые конструкции SQL SELECT, включая секции UNION. Все подзапросы в секции FROM выполняются до выполнения основного оператора выборки данных SELECT.

[[ JoinType] JOIN DatabaseName!] Table[[AS] Local_Alias]

Определяет дополнительную подсекцию JOIN - присоединения выборки данных более чем из одной таблицы; Visual FoxPro поддерживает следующие  Присоединения (объединения).

NoteПримечание

Количество используемых Присоединений в одном операторе SELECT - не ограничивается.

NoteПримечание

В следующей таблице описываются возможные типы Присоединений, задаваемые в параметре JoinType.

JoinType Описание типа

INNER

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

LEFT [OUTER]

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

RIGHT [OUTER]

(правое-внешнее) Результирующий набор запроса содержит записи из таблицы, имя которой указано Справа от ключевого слова JOIN и только соответствующие записи из таблицы, имя которой указано Слева от ключевого слова JOIN. Опция OUTER является необязательной, включается только для однозначного документирования используемого типа Присоединения.

FULL [OUTER]

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

Описание конструкции [DatabaseName!]Table [[AS] Local_Alias] смотри при описании секции FROM. Дополнительная информация об операторах Присоединения таблиц данных смотри в разделе:  Условия Соединения Таблиц, Запросов и Представлений.

[ON JoinCondition| FilterCondition[AND | OR [ JoinCondition| FilterCondition] ...]

Определяет логическое условие Соединения таблиц и фильтрации данных в операторе SQL SELECT. Условие Соединения таблиц может также включать  условие фильтрации данных. Для указания нескольких условий соединения и/или фильтрации данных можно использовать стандартные логические операнды AND / OR, соединяющие логические выражения. В опции ON допустимы Подзапросы и вложенные Подзапросы.

NoteОбратите Внимание

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

JoinCondition определяет одну из следующих логических конструкций:

  • Условие Сравнения Полей из разных таблиц, например:

    FieldName1 Comparison (сравнение) FieldName2

    FieldName1 - имя поля из одной таблицы, FieldName2 - имя поля из другой таблицы.

  • Условие Сравнения некоторых выражений, содержащих поля из различных Соединяемых таблиц, например:

    Table1.Field1 + Table2.Field1 Comparison (сравнение) Table3.Field1

  • Или некоторая Пользовательская Функция, например:

    MyUDF(Table1.Field1, Table2.Field1)

В следующей таблице представлены допустимые логические операнды конструкции Comparison.

Comparison Описание

=

Эквивалентность

NoteОбратите внимание

При использовании операнда эквивалентности (=), при сравнении символьных строк, сравнение выполняется  в разных вариантах, в зависимости от установки SET ANSI. Когда SET ANSI = OFF, Visual FoxPro сравнивает символьные строки до конца самой короткой строки ("ABCdef" = "ABC"). Когда SET ANSI = ON, Visual FoxPro выполняет стандарт ANSI при сравнении символьных строк. Смотри дополнительно разделы:  SET ANSI и SET EXACT.

==

Полная эквивалентность

LIKE

Операция SQL LIKE, (соответствие шаблону)

<>, !=, #

Не равно

>

Больше

>=

Больше или равно

<

Меньше

<=

Меньше или равно

Дополнительная информация об Условиях Соединения имеется в разделе: Условия Соединения для Таблиц, Запросов и Представлений.

FilterConditionопределяет логическое условие фильтра включения выбираемых записей в результирующий набор Запроса. Вы можете выстраивать множественные условия фильтрации, объединяя их логическими операндами AND / OR. Для отрицания логического выражения используется операнд NOT. Для проверки пустого значения Поля используется стандартная функция EMPTY( ).

FilterCondition может строиться аналогично описанной выше конструкции  JoinCondition , исключая указание Полей из той же Таблицы. Дополнительно, FilterCondition может иметь следующий синтаксис:

  • FieldName Comparison (операнд сравнения) Expression

    -ИЛИ-

  • FieldName [NOT] LIKE cExpression | IS [NOT] NULL | [NOT] BETWEEN Start_Range AND End_Range | [NOT] IN Value_Set

Описание Операндов сравнения приводится при описании Условия Сравнения JoinCondition.

В следующей таблице приводятся дополнительные допустимые опции при построении условия фильтрации FilterCondition.

Опция Описание

Expression

FieldName values (значение поля из таблицы), сравнение которого с некоторым выражением определяет условие включения в результирующий набор Запроса.

LIKE "cExpression"

FieldName - значение поля символьного типа, cExpression - маска отбора (SQL wildcard), содержащая специальные символы процента (%) и подчеркивания  (_),  определяющее шаблон включения в результат.

Символ % означает любую последовательность в символьном выражении. Символ _  означает один любой символ в строке. Вы можете использовать опцию ESCAPE для задания специальных символов при построении шаблонных выражений.

Условие Фильтрации LIKE "sometext%"  является полностью оптимизируемым.

IS NULL

FieldName должно принимать значение = null, для включения записи в реезультат Запроса.

BETWEEN Start_Range AND End_Range

FieldName должно находиться в указанном диапазоне значений.

IN (Value_Set)

FieldName должно принимать одно из задаваемых значений из Списка Value_Set. Элементы списка перечисляются через запятую.

NoteОбратите внимание

Количество значений или выражений, задаваемых в списке Value_Set, определяется функцией SYS(3055) – FOR / WHERE Clause Complexity.

NoteСовет

Visual FoxPro прекращает вычисление выражений из заданного списка Value_Set при первом найденном удовлетворяющем значении. Следовательно, если опция IN не является оптимизируемой по-Rushmore, вы можете значительно улучшить выполнение запроса, размещая в начале списка Value_Set наиболее вероятные значения элементов.

Дополнительную информацию и примеры по созданию выражений фильтра см. в разделе: Условия Фильтра для Запросов и Представлений.

Expand imageКомментарии

В следующем программном коде представлена общая конструкция основной команды SELECT - SQL:

  CopyCode imageКопировать Код
SELECT Select_List
FROM Table_List
...[WITH (BUFFERING = lExpr)]
[WHERE Conditions]
[GROUP BY Column_List]
[UNION Clause]
[HAVING Conditions]
[ORDER BY Column_List]
[INTO Clause | TO Clause ]
[Additional_Display_Options]

Более подробно о конкретных секциях команды SQL SELECT смотри в следующих разделах:

Expand imageПример

В представленном примере демонстрируется использоваие секции FROM. Выполняется выборка названий Компаний из указанной таблицы Клиентов:

  CopyCode imageКопировать Код
CLOSE ALL
CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'Data\TestData')
SELECT customer.company ;
FROM customer

Expand imageСм. также