[GROUP BY выражение1 [, выражение2... ] [HAVING условие] ]
[{UNION | UNION ALL | INTERSECT | MINUS} SELECT оператор ]
[ORDER BY выражение1 [ASC | DESC]
[, выражение2 [ASC | DESC]] ...];
Вся извлеченная информация выводится в окно интерактивного ре-дактора SQL*PLUS.
Построение списка выбора.В операторе SELECT при формирова-нии списка выбора, состоящего из имен столбцов и выражений, для по-строения выражений могут использоваться имена столбцов таблиц и представлений, литералы, функции, соединяемые знаками арифметиче-ских действий. Если необходимо указать имена столбцов, которые имеют одинаковые идентификаторы в двух разных таблицах, то к этим именам через точку необходимо приписать имя таблицы. При необходимости сложному выражению можно присвоить псевдоним, который будет ис-пользован в дальнейшем тексте оператора. Все имена таблиц, имена столбцов которых использовались для построения выражений в списке выбора, обязательно должны быть перечислены в тексте оператора после ключевого слова FROM.
Упорядочение строк.Строки, возвращаемые SELECT-запросом, мо-гут быть упорядочены по возрастанию или убыванию значений опреде-ленных выражений. В качестве выражения может использоваться имя столбца. Для реализации этой процедуры используется конструкция ORDER BY, в которой указывается перечень, состоящий из одного или нескольких выражений, разделенных запятыми, по значениям которых и осуществляется упорядочение. По умолчанию извлекаемые строки упо-рядочиваются по возрастанию значений указанных в перечне выраже-ний. Для задания другого варианта упорядочения строк после каждого выражения или группы выражений в перечне указывается либо ASC (по возрастанию) либо DESC (по убыванию значений), а перечисление этих групп осуществляется через запятую.
Условие выбора строк.В конструкции WHERE при построении ус-ловия, которому должны удовлетворять выбираемые строки, можно ис-пользовать весь имеющийся в языке SQL набор операций сравнения и логических операций. Для задания конкретного значения в условии мож-но воспользоваться переменной подстановки, которая позволяет ввести необходимое значение в момент выполнения запроса. Переменная под-становки определяется наличием символа & в начале ее имени.
Подзапросыили вложенные запросы применяются для возврата группы строк или множества значений, которые будут использованы ро-дительским запросом. В зависимости от формы построения он может выполняться либо один раз для родительского запроса, либо один раз для каждой строки, извлеченной родительским запросом. В последнем слу-чае такой подзапрос называется коррелированным подзапросом. Харак-терным признаком коррелированного подзапроса является наличие в его фразе WHERE ссылок на столбцы родительского запроса.
Объединение строк.В многокомпонентном запросе можно опреде-ленным образом объединить в единое целое группы строк, извлекаемые отдельно выполняемыми запросами. Для задания порядка объединения используется одно из ключевых слов конструкции UNION | UNION ALL | INTERSECT | MINUS.
Демонстрационные примеры
1.Выбрать из таблицы KNIGA всю информацию о книгах:
SELECT * FROM KNIGA;
2.Выбрать из таблицы KNIGA информацию о первых пяти книгах:
SELECT * FROM KNIGA WHERE ROWNUM < 6;
3.Выбрать из таблицы KNIGA информацию о книгах с указанием фамилии автора, названия и цены и упорядочить ее по возрастанию зна-чений столбцов АВТОР, НАЗВАНИЕ и убыванию значений столбца ЦЕНА; фамилии авторов и названия вывести заглавными буквами:
SELECT UPPER(АВТОР), UPPER(НАЗВАНИЕ), ЦЕНА FROM KNIGA ORDER BY АВТОР, НАЗВАНИЕ ASC, ЦЕНА DESC;
4.Выбрать из таблицы KNIGA информацию (фамилия автора, назва-ние) о книгах в жанре «Роман»;
SELECT АВТОР, НАЗВАНИЕ FROM KNIGA WHERE ЖАНР = 'Роман';
5.Выбрать из таблицы KNIGA информацию (фамилия автора, назва-ние, жанр) о книгах в жанре не «Роман»;
а) SELECT АВТОР, НАЗВАНИЕ, ЖАНР FROM KNIGA WHERE ЖАНР != 'Роман';
б) SELECT АВТОР, НАЗВАНИЕ, ЖАНР FROM KNIGA WHERE ЖАНР <> 'Роман';
в) SELECT АВТОР, НАЗВАНИЕ, ЖАНР FROM KNIGA
MINUS
SELECT АВТОР, НАЗВАНИЕ, ЖАНР FROM KNIGA
WHERE ЖАНР = 'Роман';
6.Выбрать из таблицы KNIGA информацию (фамилия автора, назва-ние, цена) о книгах стоимостью больше 260 и меньше 1000;
SELECT АВТОР, НАЗВАНИЕ, ЦЕНА FROM KNIGA WHERE ЦЕНА BETWEEN 260 AND 1000;
7.Выбрать из таблицы KNIGA информацию (фамилия автора, назва-ние, жанр) о книгах в жанрах «Роман» и «Детектив»:
а) SELECT АВТОР, НАЗВАНИЕ, ЖАНР FROM KNIGA
WHERE ЖАНР = 'Роман' OR ЖАНР = 'Детектив';
б) SELECT АВТОР, НАЗВАНИЕ, ЖАНР FROM KNIGA
WHERE ЖАНР IN ('Роман', 'Детектив');
в) SELECT АВТОР, НАЗВАНИЕ, ЖАНР FROM KNIGA
WHERE ЖАНР = 'Роман'
UNION
SELECT АВТОР, НАЗВАНИЕ, ЖАНР FROM KNIGA
WHERE ЖАНР = 'Детектив';
8.Выбрать из таблицы KNIGA информацию (фамилия автора, назва-ние, жанр) о книгах жанра «Роман», «Детектив» издательства «Аст»:
а) SELECT АВТОР, НАЗВАНИЕ, ЖАНР FROM KNIGA WHERE (ЖАНР = 'Роман' OR ЖАНР = 'Детектив') AND ИЗДАТЕЛЬСТВО = 'Аст';
б) SELECT АВТОР, НАЗВАНИЕ, ЖАНР FROM KNIGA WHERE ЖАНР IN ('Роман', 'Детектив') AND ИЗДАТЕЛЬСТВО = 'Аст';
9.Выбрать из таблицы KNIGA информацию (фамилия автора, назва-ние) о книгах, название которых начинается со слова «Гибель»:
а) SELECT АВТОР, НАЗВАНИЕ FROM KNIGA WHERE НАЗВАНИЕ LIKE 'Гибель%';
б) SELECT АВТОР, НАЗВАНИЕ FROM KNIGA WHERE SUBSTR(НАЗВАНИЕ, 1, 6) = 'Гибель';
10.Выбрать из таблицы KNIGA информацию (фамилия автора, на-звание, жанр) о книгах, относящихся к указанному жанру. Необходимое значение задать, используя переменную подстановки:
SELECT АВТОР, НАЗВАНИЕ, ЖАНР FROM KNIGA
WHERE ЖАНР = '&GANR' ORDER BY АВТОР;
В ответ на запрос, выдаваемый системой, набрать одно из значений столбца ЖАНР (Роман, Фантастика, Детектив).
11.Выбрать из таблицы KNIGA информацию о книгах, имеющихся в других издательствах, того же жанра, что и в издательстве «Аст»:
а) SELECT * FROM KNIGA WHERE ЖАНР IN
(SELECT DISTINCT ЖАНР FROM KNIGA WHERE
ИЗДАТЕЛЬСТВО= 'Аст') AND ИЗДАТЕЛЬСТВО <> 'Аст';
б) SELECT * FROM KNIGA WHERE ЖАНР = ANY
SELECT DISTINCT ЖАНР FROM KNIGA WHERE
ИЗДАТЕЛЬСТВО = 'Аст') AND ИЗДАТЕЛЬСТВО <> 'Аст';
12.Выбрать из таблицы KNIGA список фамилий авторов, чьи книги имеются в каждом из издательств:
SELECT АВТОР FROM KNIGA WHERE ИЗДАТЕЛЬСТВО = 'Аст'
INTERSECT
SELECT АВТОР FROM KNIGA WHERE ИЗДАТЕЛЬСТВО = 'Нова';