Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Введение в СУБД HyTech.doc
Скачиваний:
11
Добавлен:
01.03.2025
Размер:
2.67 Mб
Скачать

Примеры работы с оператором select

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

select    a.LNAME as LNAME,    a.FNAME as FNAME,    a.MNAME as MNAME,    b.NAME as BOOKNAME from    AUTHOR a, BOOK b where   a.ID = b.ID_AUTHOR order by   b.NAME;

Результат выборки приведен на рисунке 1.

Рисунок 1. Результат выборки

Конструкция, служащая для выборки информации с использованием подзапроса, будет выглядеть следующим образом:

select   NAME  as BOOKNAME,   PYEAR as PYEAR,   ID_PH as PHKEY from   BOOK where   ID_AUTHOR in     (select ID from AUTHOR where FNAME = 'Александр') and   ID_PH not in     (select ID from PHOUSE where NAME <> 'Просвещение') order by   NAME;

В подзапросе можно использовать еще один вложенный подзапрос и т.д. Количество вложенных подзапросов ограничено только оперативной памятью и размером стека, заданных при настройке сервера.

Посчитаем количество книг, сгруппировав по автору:

select    count(b.ID) as BOOKCOUNT,    a.LNAME     as AUTHOR from    BOOK b, AUTHOR a where    a.ID = b.ID_AUTHOR group by    b.ID_AUTHOR;

Результаты выборки приведены на Рисунке 2.

Рисунок 2. Результат подсчета количества книг

После того, как из таблицы сформировали группы, некоторые группы можно отбросить. Это делается с помощью конструкции having.

Формат конструкции:

having Условие

Если Условие для группы выполняется, то группа остается для дальнейшего анализа, если Условие не выполняется, то вся группа отбрасывается.

Если в предложении select задаются одновременно конструкции where и having, то порядок выполнения следующий:

  • Отбираются все записи, удовлетворяющие условию where;

  • Из отобранных записей формируются группы;

  • Для каждой группы вычисляются значения групповых функций;

  • Отбираются группы, удовлетворяющие условию having.

Основное различие условий в конструкциях where и having следующее: условие where выполняется до группировки, а условие having выполняется после группировки.

Пример работы с конструкцией:

select    p.NAME      as PUBLISHER,    count(b.ID) as BOOKCOUNT from    BOOK b, PHOUSE p where    b.PYEAR > 2000 and    b.ID_PH = p.ID group by    p.NAME having    count(b.ID) > 2;

Объединение выборок

Несколько операторов select могут быть объединены конструкцией union. Пример:

select   b.NAME  as BOOKNAME,   a.LNAME as LNAME from   BOOK b, AUTHOR a where   b.ID_AUTHOR = a.ID union select   r.NAME  as BOOKNAME,   a.LNAME as LNAME from   REPORT r, AUTHOR a where   r.ID_AUTHOR = a.ID;

Результат выборки данных приведен на рисунке 1.

Рисунок 1. Результат объединения выборок.

Особенностью работы данной конструкции в СУБД HyTech является то, что при осуществлении выборки данных не происходит удаление одинаковых строк.

Приведем пример:

insert into REPORT (NAME, ID_AUTHOR, ID_JOUR) values ('Шинель', 1, 2); fix all; select   b.NAME  as BOOKNAME,   a.LNAME as LNAME from   BOOK b, AUTHOR a where   b.ID_AUTHOR = a.ID union select   r.NAME  as BOOKNAME,   a.LNAME as LNAME from   REPORT r, AUTHOR a where   r.ID_AUTHOR = a.ID;

Результат выборки данных приведен на рисунке 2.

Рисунок 2. Результат объединения выборок.