Секция SQL-оператора SELECT содержит список полей, констант, выражений, которые определяют столбцы в результирующем наборе Запроса.
Общая синтаксическая конструкция представлена в разделе описания команды SELECT - SQL .
Детальный синтаксис секции SELECT имеет следующий вид:
SELECT [ALL | DISTINCT] [TOP nExpr [PERCENT]] Select_List_Item [AS Column_Name] [, ...] |
Параметры
- [ALL | DISTINCT]
-
Определяет выборку в результирующий набор Запроса Всех (ALL) записей (по-умолчанию); или исключая дублируюемые записи данных (DISTINCT). Опция DISTINCT может быть использована только с первой секцией SELECT.
Обратите внимание
Система Visual FoxPro не поддерживает использование опции DISTINCT в операторах выборки SQL SELECT, которые содержат поля данных типа: Memo, General, или Blob. Однако, для использования полей типа Memo в таких запросах, вы можете "укоротить" поля типа Memo с помощью функций PADR( ) или ALLTRIM( ). Смотрите дополнительные разделы PADL( ) | PADR( ) | PADC( ), функции и ALLTRIM( ), функция.
- [TOP nExpr [PERCENT]]
-
Определяет, что в результитрующий набор Запроса будут выбраны первые nExpr записей или заданный процент от общего количества записей выборки. Диапазон допустимых значений для выражения nExpr : от 1 - до 32,767, или, если задана опция PERCENT, вы можете задать значения процентов: от 0.01 - до 99.99. Visual FoxPro сортирует результирующий набор Запроса, а за тем возвращает соответствующее количество записей, как указано в TOP nExpr [PERCENT].
Примечание
Для использования опции ограниченной выборки TOP, вы болжны обязательно определить секцию ORDER BY, для сортировки. В секции ORDER BY определяется имя / номер столбца, относительно которого выполняется выборка первых записей Запроса, количество которых задается в опции TOP.
Обратите Внимание
Установка системной команды SET ENGINEBEHAVIOR определяет механизм работы рассматриваемой Опции TOP, и влияет на результирующий набор Запроса. Смотрите дополнительно раздел: SET ENGINEBEHAVIOR, команда.
При указании опции PERCENT количество записей в результирующем наборе округляется до большего целого числа.
Примечание
Записи результирующего набора, имеющие одинаковые значения столбца/поля, который определяется в секции сортировки ORDER BY, включаются в результирующий набор. Следовательно, в результирующем наборе может быть больше записей, чем задается в выражении nExpr. Например, если задается nExpr = 10, результирующий набор может содержать более 10 записей; только 10 будут иметь уникальные значения столбца сортировки ORDER BY, дубликаты также включаются в результирующий набор.
- Select_List_Item
-
Определяет один или несколько элементов, включаемых в результирующий набор Запроса. Каждый элемент из данного списка определяет соответствующий столбец результата Запроса. Select_List_Item может принимать следующие возможные варианты:
-
Это некоторая константа, включаемая в каждую запись результата Запроса.
-
Это некоторое вычисляемое выражение, содержащее пользовательскую функцию или Подзапрос.
-
[Alias.]Select_Item
Alias определяет внутренний алиас исходной таблицы, если выполняется выборка нескольких полей, имеющих одинаковые имена, для однозначной идентификации их в списке Select_Item. Использование алиасов таблиц предохраняет от дублирования столбцов. Пробелы между конструкциями [Alias.] и Select_Item допустимы.
Select_Item может быть также полем из таблицы, указанной в секции FROM.
-
(Subquery)
Subquery определяет некоторый подзапрос SQL SELECT, который представляет собой другой оператор SQL SELECT, его нужно заключать в круглые скобки (()).
Нет ограничений по количеству подзапросов, используемых в главном операторе SQL SELECT. Нет также ограничений по количеству вложенных подзапросов, используемых в операторе SQL SELECT.
Вы можете использовать Коррелированные (зависимые) подзапросы относительно родительского Запроса. Коррелированные подзапросы могут использовать поля родительского запроса, в этом случае подзапрос выполняется для каждой записи-кандидата родительского запроса.
Подзапросы могут содержать: опцию ограниченной выборки TOP nExpr, для некоррелированных запросов; множественные условия Соединения таблиц; а также секции группировки данных GROUP BY. Если подзапрос не выгружает записи в результирующий набор подзапроса, то возвращается значение = NULL.
Обратите внимание
Если вы используете опцию ограниченной выборки TOP nExpr в Подзапросе, вы должны также указать соответствующую секцию сортировки данного подзапроса ORDER BY.
В списке выбираемых полей Select_List_Item вы можете использовать агрегатные функции, содержащие некоторые поля или различные выражения. Если используется агрегатная функция, то элемент списка выбираемых полей может иметь следующую синтаксическую конструкцию для Select_Item:
Копировать Код
AggregateFunction([Alias.]Select_Item)
Дополнительная информация по использованию агрегатных, функций пользователя, общих правил формирования имен полей результата Запроса смотрите в разделе Общие рекомендации по использованию операторов SQL SELECT.
-
- [AS Column_Name]
-
Определяет имя поля / столбца в наборе результата Запроса. Column_Name может быть некоторым вычисляемым выражением, но не может содержать недопустимые в данном случае символы; например, как пробел недопустим в именах полей таблиц.
Совет
Когда в рассматриваемом списке Select_List_Item используются выражения или различные функции, то для определения значения Column_Name рекомендуется использовать осмысленное наименование, соответствующее назначению данного столбца.
Комментарии
В следующем программном коде показаны ключевые секции команды SELECT - SQL:
![]() | |
---|---|
SELECT Select_List |
Детальная информация о каждой ключевой секции общей команды SQL SELECT представлена в следующих разделах:
Примеры
Пример 1
В представленном примере выполняется выборка уникальных значений с использованием опции DISTINCT; соединяются две таблицы с помощью параметров секции WHERE. В запросе выбираются поля: Company, Order_Date, и Shipped_On, имеющие уникальные совокупные значения в таблицах-источниках: Customer и Orders. В операторе SELECT определены внутренние (локальные ) алиасы таблиц - для однозначного указания связующего поля Cust_ID, которое присутствует в обоих таблицах.
![]() | |
---|---|
CLOSE ALL |
Пример 2
В следующем примере выполняется выборка всех записей из исходной таблицы; для определения нового имени выбираемого поля используется опция AS Column_Name. В результирующий набор выбирается поле City, из таблицы Customer, значение которого преобразуется в верхний регистр, с помощью функции UPPER( ); выбираемому столбцу присваивается имя: CityList.
![]() | |
---|---|
CLOSE ALL |