Вложенные запросы

Составляющие оператора Select.

Оператор SELECT.

10.1. Оператор выбора SELECT

Все запросы пользователей реализуются с помощью оператора SELECT.

Структура оператора:

SELECT [ALL/DISTINСТ] <смысл полей> (| или *) FROM<список таблиц>

[WHERE<предикат - условия выборки или соединения>]

[GROUP BY<список полей результата>]

[HAVING<предикат - для группировки>]

[ORDER BY<список полей упорядочивания>]

| - в результирующий набор включаются значения всех перечисленных атрибутов исходных отношений.

* - в результирующий набор включаются значения всех атрибутов исходных отношений.

10.2. Составляющие оператора:

10.2.1. SELECT - ключевое слово начала запроса.

ALL - означает, что в результирующий набор включаются все кортежи, удовлетворяющие условию запроса.

DISTING - в результирующий набор включаются только разные кортежи.

<список полей> (| или *) - либо мы можем указать список полей, которые должны быть в результирующей таблице, либо все атрибуты отношений удовлетворяют запросу.

10.2.2. FROM - является обязательным, задаёт перечень исходных отношений запроса.

10.2.3. WHERE - содержит условия отбора кортежей или условия соединения кортежей, задается с помощью предиката.

Предикат - это выражение с неопределенными переменными; если этим переменным придать конкретные значения, то предикат принимает значение "истина" или "ложь". С помощью предиката мы задаем условия выборки, например,

Если а = в то: а = 3, в = 3 – истина, а = 3, в = 4 – ложь.

В этом разделе могут быть использованы шесть групп предикатов:

1) предикат сравнения (>,<,<=,>=):

оценка = "отлично".

2) Between A and B - предикат-диапазон, принимает значения "истина", когда сравнимое значение попадает в сравниваемый диапазон, включает границы диапазона:

Года рождения: Between 1980 and 1990.

3) Предикат отношения к множеству:

3.1) In (множество) - предикат вхождения во множество:

Оценка IN ("отлично", "хорошо").

Истина - если атрибут принимает значение "отлично" или "хорошо".

3.2) NOT IN (множество) - предикат непопадания во множество.

4) IS NULL - предикат сравнения с неопределенным значением. Истина - если значение атрибута не определено.

4.1) логическое сложение:

NOT NULL = NULL;

TRUE U NULL = TRUE;

NULL U NULL = NULL.

4.2) логическое умножение:

TRUE ∩ NULL = NULL.

5) предикат сравнения с образцами:

5.1) LIKE (образец)

Истина - если значение сравниваемого атрибута совпадает с заданным образцом.

5.2) NOT LIKE (образец)

Истина - если значение сравниваемого атрибута не совпадает с заданным образцом.

6) EXIST - предикат существования.

Итак, с помощью WHERE мы формируем выборку данных с большим набором условий.

10.2.3. GROUP BY - раздел задает список полей для группировки.

Кортежи будут группироваться по значениям какого-либо атрибута (нескольких). Кроме того, с помощью этого раздела можно задать дополнительные условия.

10.2.4. HAVING - раздел содержит предикат условий для каждой группы.

10.2.5. ORDER BY - позволяет упорядочить последовательность вывода кортежей по какому-то атрибуту.

ORDER BY <"Фамилия">- кортежи "Фамилия" будут располагаться по алфавиту.

10.3. Вложенные запросы

Внутри оператора SELECT может осуществляться ещё (не один) запрос:

Пусть требуется узнать поставщиков помидоров, являющихся поставляемым продуктом с каким-то номером. Для этого можно дать запрос:

SELECT Название, Статус

FROM Поставщики

WHERE ПС IN

(SELECT ПС

FROM Поставки

WHERE ПР IN

(SELECT ПР

FROM Продукты

WHERE Продукт = 'Помидоры'));

В данном случае результатом самого внутреннего подзапроса является только одно значение. Подзапрос следующего уровня в свою очередь дает в результате множество. Последний, самый внешний SELECT, вычисляет окончательный результат. Вообще допускается любая глубина вложенности подзапросов.

Тот же результат можно получить с помощью соединения:

SELECT Название, Статус

FROM Поставщики, Поставки, Продукты

WHERE Поставщики.ПС = Поставки.ПС

AND Поставки.ПР = Продукты.ПР

AND Продукт = 'Помидоры';

Однако при выполнении этого компактного запроса система должна одновременно обрабатывать данные из трёх таблиц, тогда как в предыдущем примере эти таблицы обрабатываются поочередно. Естественно, что для их реализации требуются различные ресурсы памяти и времени, однако этого практически невозможно ощутить при работе с ограниченным объемом данных.

Лекция 11. Модель бинарных ассоциаций.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: