Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

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

Составляющие оператора 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. Модель бинарных ассоциаций.

<== предыдущая лекция | следующая лекция ==>
Агрегатные Функции | Исключающая ассоциация
Поделиться с друзьями:


Дата добавления: 2014-01-05; Просмотров: 336; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.01 сек.