При выборке ограниченного набора атрибутов из таблиц необходимо указывать названия атрибутов в том регистре, в котором они были указаны при создании таблицы. Вместе с этим не имеет значения регистр названия таблицы.
При использовании любого оператора языка SQL (HyTech) следует помнить, что все операторы языка вводятся нижним регистром.
Перед запросом выборки данных из таблицы рекомендуется обновить снимки таблиц, которые указаны в конструкции from оператора select, если имеются основания полагать, что с момента предыдущего обращения к таблице данные были изменены вами или другим пользователем.
Снимок делается автоматически при первом поиске по таблице. Текущий снимок можно отменить с помощью оператора fix. Для временных таблиц механизм снимков отключается. SQL оператор fix all отменяет текущий снимок у всех таблиц пользователя. При очередном поиске по таблице будет сделан новый снимок состояния.
Примеры работы с оператором 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;