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

39. Использование оператора select для расчета вычисляемых столбцов и группировки записей.

Для расчета значений вычисляемых столбцов используют арифметические выражения. При этом в списке возвращенных столбцов после SELECT вместо имени вычисляемого столбца указывают выражение, которому можно присвоить имя через конструкцию AS <имя нового столбца>.

Группировка записей. Для получения вычисленных или агрегированных значений по группам записей, характеризующихся одинаковыми значениями какого-либо столбца используется конструкция GROUP BY, которая автоматически исключает повтор в полях данных, заданных для группирования, т.к. записи с совпадающими значениями объединяются в 1 группу. При этом необходимо следить, чтобы 1 из столбцов результирующего НД был представлен агрегатной функцией.

SELECT R.Tovar, SUM(R.Kolvo) as Otpusk

FROM Rashod R

GROUP BY R.Tovar

SELECT R.Tovar, SUM(R.Kolvo*Cena) as SUM

FROM Rashod R, Tovary T

WHERE T.Tovar=R.Tovar

GROUP BY R.Tovar

Запрос вычисления стоимости по каждому отпущенному товару на каждую дату.

SELECT R.Tovar, SUM(R.Kolvo*Cena), R.Data_Rash

FROM Rashod R, Tovar T WHERE T.Tovar=R.Tovar

GROUP BY R.Tovar, R.Data_Rash

Еще пример:

SELECT Data_Rash, COUNT(DISTINCT Pokup)

FROM Rashod

GROUP BY R.Data_Rash

Операнд HAVING используется совместно с операндом GROUP BY для отбора записей внутри групп. Правила записи условия группирования аналогичны правилам формирования условию отбора операнда WHERE.

(Она про HAVING не давала вроде).

40. Использование оператора select для задания сложных условий поиска (операторы and, or, not, between).

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

Использовать логические выражения можно с помощью операторов AND, OR, NOT.

Пример. Включить в запрашиваемый набор данных все записи таблицы RASHOD и для каждого товара указать его цену из таблицы TOVARY, а для каждого покупателя город из таблицы POKUPATELI.

SELECT R.*, T.Cena, P.Adres

FROM Rashod R, Tovary T, Pokupateli P

WHERE (R.Tovar=T.Tovar) AND (R.Pokup=P.Pokup)

Пример. Получим записи из таблицы RASHOD, для которых указано имя покупателя и цена соответствующая товару, количество товаров зададим условием:

SELECT R.*, T.Cena

FROM Rashod R, Tovary T

WHERE (R.Tovar=T.Tovar) AND

(R.Kolvo<=100 OR R.Kolvo>=1000) AND

R.Pokup IS NOT NULL

ORDER BY R.Kolvo

Задав диапазон с помощью служебного слова BETWEEN можно сформировать запрос:

SELECT *

FROM Rashod

WHERE Kolvo BETWEEN 100 AND 1000

41. Использование оператора select для внешнего соединения. Формат запроса.

Внешнее соединение определяется в предложении FROM с помощью следующей конструкции:

SELECT (*/(знач.1),(знач.2)…/)

FROM <табл.1><вид соединения> JOIN <табл.2>

ON <условие поиска>

В таком соединении в результирующий набор данных включаются записи ведущей (главной) таблицы соединения и ведомой (подчиненной) таблицы. Критерий отбора после слова ON задает условие включения записей в набор данных; соединяемые (связываемые) таблицы указываются слева и справа от слова JOIN. Какая из двух таблиц будет главной (ведущей), определяет вид соединения:

LEFT — ведущая таблица слева от JOIN

RIGHT — справа (по умолчанию)

FULL – полное соединение двух таблиц.

Построим внешнее соединение таблицы RASHOD с таблицей POKUPATELI, т.е. найдем покупателя, соответствующего каждой покупке:

SELECT R.DAT_RASH, R.TOVAR, R.KOLVO, P.POKUP, P.GOROD

FROM RASHOD R LEFT JOIN POKUPATELI P

ON R.POKUP=P.POKUP