Секция WHERE определяет условие соединения нескольких таблиц и/или условие фильтрации данных в результирующем наборе Запроса. SQL-операция соединения таблиц с помощью секции WHERE функционально аналогична операции присоединения таблиц с помощью подсекции JOIN в секции FROM.

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

При использовании системной функции EVALUATE( ) в условии фильтрации секции WHERE выполняемого запроса SQL может вернуть Некорректные результаты

Общий синтаксис оператора выборки представлен в разделе SELECT - SQL, команда.

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

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

Параметры

JoinCondition

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

FilterCondition

Определяет критерий отбора записей данных в результирующий набор Запроса. Дополнительная информация по созданию конструкции FilterCondition представлена в подсекции ON из соответствующей FROM, секция.

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

JoinCondition или FilterCondition могут иметь вид секции IN. Секция IN представляет собой конструкцию типа: IN (Value_Set), где Value_Set имеет вид списка выражений: Expr1[, Expr2[, ...[ ,ExprN]]]. В версии Visual FoxPro 9.0 указанная секция IN вычисляется по другому алгоритму, в отличие от младших версий; см. дополнительно раздел Изменения функциональности текущей версии VFP.

В следующем программном коде демонстрируется использование секции IN:

  CopyCode imageКопировать Код
CLOSE DATABASES ALL
CREATE CURSOR MyCursor(Field1 I, Field2 I)
INSERT INTO MyCursor values(1,6)
INSERT INTO MyCursor values(2,5)
INSERT INTO MyCursor values(3,4)

SELECT * FROM MyCursor WHERE MyCursor. Field1 ;
IN (1,2,3,4,5)

В представленной далее программной конструкции определены все ключевые секции основной команды 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 представлено в следующих разделах:

Вы можете создать Условие фильтрации данных, содержащих символы шаблонов (SQL SELECT wildcard characters), к ним относятся символ процента (%) и символ подчеркивания (_),  которые используются в подсекции ESCAPE секции WHERE. В секции ESCAPE вы можете определить дополнительный  специальный символ, размещаемый перед символом шаблона указывающий, что перечисленные выше символы шаблона рассматриваются в конкретном контексте как просто символы, а не шаблон. Смотрите дополнительный раздел: Условия Фильтрации для Запросов и Представлений.

Expand imageПример

В следующем примере выполняется выборка трех полей из двух таблиц, соединение которых и фильтрация данных определяются сложным условием выборки в секции WHERE. В выборке соединяются две таблицы: Customer и Orders, полем соединения является Cust_ID; выбираются следующие поля Company, Order_Date, и Shipped_On; в выборку попадают данные, для которых выполняется условие order_date < 02/16/1994. В операторе SELECT используются внутренние алиасы исходных таблиц, для однозначного указания поля соединения Cust_ID, которое присутствует в обоих таблицах.

  CopyCode imageКопировать Код
CLOSE ALL
CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'Data\TestData')
SELECT TAlias1.company, TAlias2.order_date, TAlias2.shipped_on ;
FROM customer TAlias1, orders TAlias2 ;
WHERE TAlias1.cust_id = TAlias2.cust_id ;
AND TAlias2.order_date < {^1994-02-16}

Expand imageСм. также