ПРИМЕРЫ ЗАПРОСОВ
Начнем с простого примера — с запроса «Выдать номера и состояния для поставщиков, находящихся в Париже». Этот запрос может быть выражен в 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 |