Шрифт:
* идентификатор столбца, который хранится в таблице, задан в просмотре или объявлен как выходной аргумент хранимой процедуры. При некоторых условиях идентификатор столбца должен содержать уточнение в виде имени или алиаса содержащей его таблицы;
* простое или сложное выражение, сопровождаемое идентификатором времени выполнения;
* константное значение, сопровождаемое идентификатором времени выполнения;
* контекстная переменная сервера, сопровождаемая идентификатором времени выполнения;
* символ *, часто называемый "звездочкой выбора", который задает все столбцы. Хотя SELECT * не исключает выбор одного или более столбцов из той же таблицы индивидуально, вообще-то в этом нет смысла. Чтобы включить дубликаты столбцов для специальных целей, применяйте для него ключевое слово AS и алиас, возвращая его как вычисляемое (только для чтения) поле.
Все следующие спецификации SELECT правильны.
Простой список столбцов:
SELECT COLUMN1, COLUMN2 ...
Уточненные имена столбцов, требуемые для спецификаций со многими таблицами:
SELECT
TABLEA.ID,
TABLEA.BOOK_TITLE,
TABLEB.CHAPTER_TITLE,
CURRENT_TIMESTAMP AS RETRIEVE_DATE . . .
Выражение (агрегирующее):
SELECT MAX (COST * QUANTITY) AS BEST_SALE ...
Выражение (преобразующее):
SELECT 'EASTER' || CAST (EXTRACT (YEAR FROM CURRENT_DATE) AS CHAR(4)) AS SEASON ...
Переменные и константы:
SELECT
ACOLUMN,
BCOLUMN,
CURRENT_USER, /* контекстная переменная */
'Jaybird' AS NICKNAME ...
/* константа времени выполнения */
Все столбцы таблицы:
SELECT * ...
Режимы выборки:
SELECT FIRST 5 SKIP 100 ACOLUMN, BCOLUMN ...
/* это не будет иметь смысла при отсутствии в дальнейшем предложения ORDER BY */
Константы или выражения - которые могут включать, а могут и не включать имя столбца- могут возвращаться только как неизменяемые, вычисляемые в момент выполнения поля. Такому столбцу должно назначаться имя, уникальное среди имен
выходного набора. Имена для столбцов времени выполнения называются алиасами столбцов. Для большей ясности алиас столбца необязательно может быть отмечен ключевым словом AS.
Возьмем предыдущий пример:
SELECT 'EASTER' || CAST (EXTRACT (YEAR FROM CURRENT_DATE) AS CHAR(4)) AS SEASON ...
В 2004 году этот алиас столбца будет возвращен для каждой строки набора в виде:
SEASON
======
EASTER2004
Константы, множество различных видов выражений, включающих функции и вычисления, скалярные подзапросы (включая коррелированные подзапросы) могут быть использованы в выходных полях только для чтения.
! ! !
ПРИМЕЧАНИЕ. Константы типа BLOB и массивы не могут быть использованы для выходных полей времени выполнения.
. ! .
О выражениях и функциях читайте в следующей главе.
Предложение FROM задает источник данных, который может быть таблицей, просмотром или хранимой процедурой, имеющей выходные аргументы. Если оператор включает соединение двух или более структур, то предложение FROM задает структуру, находящуюся в левой части. Другие таблицы добавляются в спецификацию при использовании последующих предложений ON (СМ. разд. "JOIN <спецификация> ").
В следующих примерах предложения FROM добавляются к спецификациям SELECT предыдущих примеров:
SELECT COLUMN1, COLUMN2 FROM ATABLE . . .
SELECT
TABLEA.ID,
TABLEA.BOOK_TITLE,
TABLEB.CHAPTER_TITLE,
CURRENT_TIMESTAMP AS RETRIEVE_DATE
FROM TABLEA . . .
SELECT MAX(COST * QUANTITY) AS BEST_SALE
FROM SALES ...
SELECT 'EASTER'||CAST(EXTRACT(YEAR FROM CURRENT_DATE) AS CHAR(2))
AS SEASON
FROM RDB$DATABASE ;
SELECT ACOLUMN, BCOLUMN, CURRENT_USER, 'Jaybird' AS NICKNAME
FROM MYTABLE ...
Синтаксис внутреннего соединения SQL-89
Firebird обеспечивает поддержку устаревшего синтаксиса неявного внутреннего соединения SQL-89. Например:
SELECT
TABLEA.ID,
TABLEA.BOOK_TITLE,
TABLEB.CHAPTER_TITLE,
CURRENT_TIMESTAMP AS RETRIEVE_DATE
FROM TABLEA, TABLEB ...
По разным причинам вам не следует использовать этот синтаксис в новых приложениях (см. главу 22).