Выполняет выборку данных из одной или нескольких таблиц. Когда вы используете команду SQL SELECT для создания Запроса, система Visual FoxPro выполняет грамматический анализ Запроса и возвращает выбранные данные из таблиц. Создавать запросы SQL SELECT, и выполнять их можно из Командного Окна, в программных модулях Visual FoxPro program, или используя системное средство Дизайнер Запросов. Смотрите дополнительную информацию об использовании SQL в разделе Базовые соглашения по использованию операторов SQL SELECT .

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

SELECT [ALL | DISTINCT] [TOP nExpr [PERCENT]] Select_List_Item [, ...]
FROM [FORCE] Table_List_Item [, ...]
[[JoinType] JOIN DatabaseName!]Table [[AS] Local_Alias]
[ON JoinCondition [AND | OR [JoinCondition | FilterCondition] ...]
[WITH (BUFFERING = lExpr)]
[WHERE JoinCondition | FilterCondition [AND | OR JoinCondition | FilterCondition] ...]
[GROUP BY Column_List_Item [, ...]] [HAVING FilterCondition [AND | OR ...]]
[UNION [ALL] SELECTCommand]
[ORDER BY Order_Item [ASC | DESC] [, ...]]
[INTO StorageDestination | TO DisplayDestination]
[PREFERENCE PreferenceName] [NOCONSOLE] [PLAIN] [NOWAIT]

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

В следующем программном коде представлены Основные Опции рассматриваемой команды:

  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:

Если перед выполнением команды SELECT SQL включены следующие режимы: SET TALK ON и SET NOTIFY ON, Visual FoxPro отображает на текущее устройство вывода (экран или активное окно) длительность выполнения Запроса и количество выбранных Записей данных. Системная переменная _TALLY содержит количество выбранных записей в итоговом результате Запроса. Смотрите дополнительную информацию в разделах: SET TALK, команда, SET NOTIFY, команда, и _TALLY, системная переменная.

NoteПримечание

Длительность выполнения Запроса может не выводиться на экран, если запрос выполняется очень быстро.

Команды SELECT SQL не учитывают (игнорируют) текущие режимы фильтрования данных, установленные командами SET FILTER. Смотрите дополнительно раздел SET FILTER, команда.

Expand imageПримеры

В следующих примерах программного кода представлено несколько вариантов выборки данных с помощью команды SQL SELECT; в качестве источника данных используется тестовая База Данных TestData.dbc, включенная в стандартную поставку системы Visual FoxPro.

Пример 1

В следующем примере отображается поле из таблицы с использованием ключевой опции FROM. Выполняется выборка наименований Компаний из таблицы Клиентов (Company-Customer):

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

Пример 2

В данном примере выполняется выборка всех записей с использованием опции AS Column_Name - задание нового имени выбираемого столбца. Выполняется выборка столбца City из таблицы Customer, преобразование в верхний регистр, с помощью функции UPPER( ), итоговому столбцу в выборке присваивается имя CityList.

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

Пример 3

В следующем примере демонстрируется использование опции DISTINCT - для выборки уникальных значений;  а также использование опции WHERE, определяющей условие связывания двух таблиц. В результирующий набор выбираются поля Company, Order_Date, и Shipped_On, имеющие уникальные значения (в совокупности) для исходных таблиц Customer и Orders. В операторе SELECT используются локальные алиасы указанных таблиц - для однозначной идентификации поля Cust_ID, которое присутствует в обоих таблицах.

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

Пример 4

В следующем примере выполняется выборка данных из двух таблиц, ключевая опция WHERE используется для указания условия связывния этих таблиц, и указания дополнительного условия фильтрации. В операторе SQL Select объединяются данные из таблиц Customer и Orders, которые связываются по полю Cust_ID; выбираются следующие поля Company, Order_Date, и Shipped_On; условие фильтра: только те записи, для которых order_date earlier < 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}

Пример 5

В следующем примере демонстрируется использование опции ORDER BY Order_Item - для упорядочивания результирующих записей выполняемого Запроса. Здесь ваполняется выборка полей Country, PostalCode, и Company из исходной таблицы Customer; осуществляется сортировка результирующих записей по всем указанным полям, как они заданы в данной опции; сортировка выполняется в возрастающем порядке (по-умодчанию).

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

Пример 6

В следующем примере показано использование опции INTO TABLE TableName - задание результирующей таблицы. В примере выполняется выборка полей Company, Order_Date, и Shipped_On из таблиц Customer, Order, которые объединяются по ключевому полю Cust_ID, результат выполнения запроса помещается в указанную таблицу CustShip. Получаемая таблица отображается в системном окне Browse. В команде 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 ;
INTO TABLE custship.dbf
BROWSE

Expand imageСм. также