Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ
Шрифт:
выходного набора. Имена для столбцов времени выполнения называются алиасами столбцов. Для большей ясности алиас столбца необязательно может быть отмечен ключевым словом 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).
RDB$DATABASE является системной таблицей, содержащей одну и только одну строку, которая хранит сведения заголовочной информации о базе данных. Что там находится, неважно для пользователей Firebird. Тот факт, что там всегда содержится одна строка - ни больше, ни меньше - делает эту таблицу удобной, когда мы хотим найти значение на сервере, которое не хранится ни в таблице, ни в просмотре, ни в хранимой процедуре.
Например, для получения приложением нового значения генератора, что иногда может нам понадобиться для создания строк подчиненной стороны в новой структуре главная-подчиненная, мы создаем в приложении функцию, которая обращается к следующему запросу:
SELECT GEN_ID(MyGenerator, 1) FROM RDB$DATABASE;
В РСУБД Oracle для аналогичных целей используется таблица DUAL.
Используйте
это предложение, чтобы добавить имена и условия соединения для второго и каждого последующего потока данных (таблица, просмотр или хранимая процедура выбора), который объединяется в многотабличном операторе 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. Условия поиска могут изменяться от условия простого соответствия для одного столбца до сложных условий, включающих выражения, предикаты 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 посвящена выражениям и предикатам, используемым в условиях поиска.
Интерфейсы доступа к данным, реализованные в API Firebird, имеют возможность обрабатывать константы в условиях поиска как заменяемые параметры. Следовательно, приложение может создавать оператор с динамическими условиями поиска в предложении WHERE, значения которых можно устанавливать непосредственно перед выполнением запроса. Такая возможность иногда называется динамическим связыванием.
Подробности см. в одном из следующих разд. "Использование параметров".