ПРИМЕРЫ ЗАПРОСОВ

 

Начнем с простого примера — с запроса «Выдать номера и состояния для поставщиков, находящихся в Париже». Этот запрос может быть выражен в SQL следующим образом:

SELECT НОМЕР_ПОСТАВЩИКА, СОСТОЯНИЕ

FROM S

WHERE ГОРОД = 'Париж';

В качестве результата получим:

 

НОМЕР_ПОСТАВЩИКА СОСТОЯНИЕ
S2 S3

 

Этот пример иллюстрирует самую общую форму предложения SELECT в языке SQL—

"SELECT (выбрать) специфицированные поля

FROM (из) специфицированной таблицы

WHERE (где) некоторое специфицированное условие является истинным"

Заметим, что результатом запроса является другая таблица — таблица, которая некоторым образом получается из заданных в базе данных таблиц. Иными словами, в реляционной системе типа DB2 пользователь всегда действует в рамках простой табличной структуры, и это—весьма привлекательная особенность таких систем [11].

В данном случае было бы вполне возможно сформулировать запрос, используя уточненные имена полей:

SELECT S.HOMEP_ПОСТАВЩИКА, S. СОСТОЯНИЕ

FROM S

WHERE S ГОРОД = 'Париж';

Использование уточненных именникогда не рассматривается как ошибка, и иногда это существенно, как мы увидим в разделе 4.3. Для справочных целей ниже показана общая форма предложения SELECT, в которой, однако, опущена возможность UNION, обсуждаемая в следующей главе:

SELECT [DISTINCT] элемент(ы)

FROM таблица (или таблицы)

[WHERE предикат]

[GROUP BY поле (или поля) [HAVING предикат] ]

[ORDER BY поле (или поля) ];

Перейдем теперь к иллюстрации основных особенностей этого предложения с помощью весьма продолжительной серии примеров. Примечание. Фразы GROUP BY (группировать по) и HAVING (имея) обсуждаются в главе 5. Со всеми остальными фразами читатель по крайней мере познакомится в этой главе, хотя рассмотрение более сложных их аспектов также отложено до главы 5.

ПРОСТАЯ ВЫБОРКА

Выдать номера для всех поставляемых деталей:

SELECT НОМЕР_ДЕТАЛИ

FROM SP;

Имеем результат:

 

НОМЕР_ДЕТАЛИ
Р1 Р2 РЗ Р4 Р5 Р6 Р1 Р2 Р2 Р2 Р4 Р5

 

Обратим внимание на дубликаты номеров деталей в этом результате. Система DB2 не исключает дубликатов из результата предложения SELECT, если пользователь явно не потребует это сделать с помощью ключевого слова DISTINCT (различный, различные), как показано в следующем примере.

ВЫБОРКА С ИСКЛЮЧЕНИЕМ ДУБЛИКАТОВ

Выдать номера для всех поставляемых деталей, исключая избыточные дубликаты:

SELECT DISTINCT НОМЕР—ДЕТАЛИ

FROM SP;

В этом случае результат таков:

 

НОМЕР_ДЕТАЛИ
Р1 Р2 РЗ Р4 Р5 Р6