Чтение онлайн

ЖАНРЫ

Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ

Борри Хелен

Шрифт:

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

Возьмем предыдущий пример:

SELECT 'EASTER' || CAST (EXTRACT (YEAR FROM CURRENT_DATE) AS CHAR(4)) AS SEASON ...

В 2004 году этот алиас столбца будет возвращен для каждой строки набора в виде:

SEASON

======

EASTER2004

Константы, множество различных видов выражений, включающих функции и вычисления, скалярные подзапросы (включая коррелированные подзапросы)

могут быть использованы в выходных полях только для чтения.

! ! !

ПРИМЕЧАНИЕ. Константы типа BLOB и массивы не могут быть использованы для выходных полей времени выполнения.

. ! .

О выражениях и функциях читайте в следующей главе.

FROM <таблица-или-процедура-или-просмотр>

Предложение 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).

Что это за таблица RDB$DATABASE?

RDB$DATABASE является системной таблицей, содержащей одну и только одну строку, которая хранит сведения заголовочной информации о базе данных. Что там находится, неважно для пользователей Firebird. Тот факт, что там всегда содержится одна строка - ни больше, ни меньше - делает эту таблицу удобной, когда мы хотим найти значение на сервере, которое не хранится ни в таблице, ни в просмотре, ни в хранимой процедуре.

Например, для получения приложением нового значения генератора, что иногда может нам понадобиться для создания строк подчиненной стороны в новой структуре главная-подчиненная, мы создаем в приложении функцию, которая обращается к следующему запросу:

SELECT GEN_ID(MyGenerator, 1) FROM RDB$DATABASE;

В РСУБД Oracle для аналогичных целей используется таблица DUAL.

JOIN <спецификация>

Используйте

это предложение, чтобы добавить имена и условия соединения для второго и каждого последующего потока данных (таблица, просмотр или хранимая процедура выбора), который объединяется в многотабличном операторе SELECT - одно предложение JOIN ... ON для каждого исходного набора. Синтаксис и использование JOIN подробно обсуждается в главе 22. Следующий оператор иллюстрирует простое внутреннее соединение между двумя таблицами из предыдущего примера:

SELECT

TABLEA.ID,

TABLEA.BOOK_TITLE,

TABLEB.CHAPTER_TITLE,

CURRENT_TIMESTAMP AS RETRIEVE_DATE

FROM TABLEA

JOIN TABLEB

ON TABLEA.ID = TABLEB.ID_В ...

Алиасы таблиц

В том же фрагменте оператора идентификаторы таблиц могут быть заменены на алиасы таблиц, например:

SELECT

T1.ID,

T1.BOOK_TITLE,

T2.CHAPTER_TITLE,

CURRENT_TIMESTAMP AS RETRIEVE_DATE

FROM TABLEA T1

JOIN TABLEB T2

ON T1.ID = T2.ID_B ...

Использование алиасов таблиц в многотабличных запросах подробно рассматривается в главе 22.

WHERE <условия-поиска>

Условия поиска, ограничивающие выводимые строки, размещаются в приложении WHERE. Условия поиска могут изменяться от условия простого соответствия для одного столбца до сложных условий, включающих выражения, предикаты AND, OR и NOT, преобразование типов, условия наборов символов и последовательностей сортировки и многое другое.

Предложение WHERE является фильтрующим предложением, определяющим, какие строки являются кандидатами для включения в выходной набор. Те строки, которые не были исключены условиями поиска в предложении WHERE, могут быть готовы для передачи инициатору запроса или они могут передаваться для последующей обработки, упорядочения на основании предложения ORDER BY С объединением или без объединения на основании предложения GROUP BY.

Следующие простые примеры иллюстрируют некоторые предложения WHERE, использующие условия выборки для ограничения отыскиваемых строк:

SELECT COLUMN 1, C0LUMN2 FROM ATABLE

WHERE ADATE BETWEEN '2002-12-25' AND '2004-12-24'...

/**/

SELECT TL.ID, T2.TITLE, CURRENT_TIMESTAMP AS RETRIEVE_DATE

FROM TABLEA

JOIN TABLEB

ON TABLEA.ID = TABLEB.ID_B

WHERE TABLEA.ID = 99 ;

/**/

SELECT MAX(COST * QUANTITY) AS BEST_SALE

FROM SALES

WHERE SALES_DATE > '31.12.2003'...

Глава 21 посвящена выражениям и предикатам, используемым в условиях поиска.

Параметры в предложении WHERE

Интерфейсы доступа к данным, реализованные в API Firebird, имеют возможность обрабатывать константы в условиях поиска как заменяемые параметры. Следовательно, приложение может создавать оператор с динамическими условиями поиска в предложении WHERE, значения которых можно устанавливать непосредственно перед выполнением запроса. Такая возможность иногда называется динамическим связыванием.

Подробности см. в одном из следующих разд. "Использование параметров".

Поделиться с друзьями: