SELECT CUST_NAME, CUST_SUM

FROM CUST

ORDER BY CUST_SUM

Пример 3.37.Получение итоговых данных

Каков средний объем заказов?

Этот запрос обеспечивает вычисление среднего объема заказов, используя данные из таблицы CUST

SELECT AVG (CUST_SUM)

FROM CUST

 

Пример 3.38. Вычисляемые столбцы

Например, требуется вычислить стоимость остатков товара, хранящихся на складе. Данные вывести по каждому товару. Значения вычисляемых столбцов определяются на основе выражения, указанного в списке возвращаемых столбцов.

SELECT PROD_NAME, PRICE, STORE, (PRICE* STORE)

FROM PROD

Пусть требуется увеличить цену каждого товара на 5%. Запрос можно сформулировать следующим образом:

SELECT PROD_NAME, PRICE, (PRICE*1.05)

FROM PROD

 

Во многих СУБД реализованы дополнительные арифметические операции, операции над строками, встроенные функции для работы со значениями даты и времени.

Например, требуется вывести номер заказа, месяц и год его поставки. Запрос выглядит следующим образом:

SELECT ORDER_NUM, MONTH (DATE_ORDER), YEAR (DATE_ORDER)

FROM ORDERS

Пример 3.39. Выбор всех столбцов

Иногда требуется получить содержимое всех столбцов таблицы. С учетом этого в SQL разрешается использовать вместо списка возвращаемых столбцов символ "*".

SELECT *

FROM ORDERS

Пример 3.40.Повторяющиеся строки

Результаты запроса могут содержать повторяющиеся строки. Например, требуется вывести номера клиентов, сделавших заказы, из таблицы ORDERS. Клиенты 3101, 3105, 3103 сделали более, чем по одному заказу, поэтому строки с их номерами будут повторяться. Для исключения повторяющихся строк используется предикат DISTINCT.

SELECT DISTINCT CUST_NUM

FROM ORDERS

Пример 3.41. Выбор с группированием

Пусть требуется найти минимальное и максимальное заказанное количество для каждого из видов товаров. Оператор SELECT для этого запроса имеет вид:

SELECT PROD_ID, MIN (QTY ), MAX (QTY )

FROM ORDERS

GROUP BY PROD_ID

 

Запрос выполняется следующим образом: заказы делятся на группы, по одной группе на каждый товар. Затем для каждой группы вычисляется максимальное и минимальное значения столбца QTY по всем строкам, входящим в группу, и генерируется одна итоговая строка результатов.

Пример 3.42.Условия отбора групп

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

SELECT PROD_ID, MAX (QTY )

FROM ORDERS

GROUP BY PROD_ID

HAVING SUM (QTY )<=20

При реализации данного запроса, вначале заказы разделяются на группы по видам товаров. Затем исключаются те группы, в которых общее количество заказанного товара превышает 20. И после этого в оставшихся группах определяется максимальное заказанное количество каждого товара.

Пример 3.43. Многотабличные запросы

На практике, многие запросы считывают информацию сразу из нескольких таблиц базы данных. Например, необходимо вывести список всех заказов, а также название клиента, сделавшего заказ. Инструкция SELECT должна содержать условие отбора, которое определяет связь между столбцами таблиц ORDERS и CUST.

SELECT ORDER_NUM, CUST_NAME, PROD_ID, QTY, DATE_ORDER

FROM ORDERS, CUST

WHERE CUST.CUST_NUM=ORDERS.CUST_NUM

Приведенный запрос отличается от предыдущих, во-первых, тем, что предложение FROMсодержит не одну, а две таблицы. Во-вторых, в условии отбора WHERE CUST.CUST_NUM=ORDERS.CUST_NUM сравниваются столбцы из двух различных таблиц. Эти столбцы называются связанными.

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

Инструкция на изменения строк имеет формат вида:

 

UPDATE <имя таблицы>

SET <имя столбца> = {<выражение> | NULL}

[,SET <имя столбца> = {<выражение> | NULL}... ]

[WHERE <условие>]

 

Инструкция UPDATE обновляет значения в определенных предложением SET столбцах таблицы для тех строк, которые удовлетворяют условию, заданному предложением WHERE.

Новые значения столбцов могут быть пустыми (NULL), либо вычисляться в соответствии с арифметическим выражением.

Пример 3.44. Изменение строк

Пусть необходимо увеличить на 15% цену только тех товаров, которые стоят меньше 100$. Запрос, сформулированный с помощью оператора UPDATE, может выглядеть так:

UPDATE PROD

SET PRICE=( PRICE*1.15)

WHERE PRICE <=100

 

Инструкция для вставки новых строк имеет форматы двух видов:

 

INSERT INTO <имя таблицы> [(<список столбцов>)] VALUES (<список значений>)

и

INSERT INTO <имя таблицы> [(<список столбцов>)]

<предложение SELECT>

 

В первом формате оператор INSERT предназначен для одной строки с заданными значениями в столбцах. Порядок перечисления имен столбцов должен соответствовать порядку значений, перечисленных в списке предложения VALUES. Если <список столбцов> опущен, то в <списке значений> должны быть перечислены все значения в порядке столбцов структуры таблицы.

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

Пример 3.45.

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

INSERT INTO CUST

VALUES ("3110", "ЧП Иванов П.Т.", NULL)

 

Пример 3.46.

Требуется скопировать в новую таблицу OLDORDERS сведения о старых заказах.

INSERT INTO OLDORDERS (ORDER_NUM, CUST_NUM, PROD_ID, QTY, DATE_ORDER)