Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

УП СУБД ч1

.pdf
Скачиваний:
14
Добавлен:
11.06.2015
Размер:
1.05 Mб
Скачать

Приложение

В Приложении приведены примеры SQL-запросов к базе данных электронных копий таможенных деклараций.

1. Поиск деклараций, оформленных на Астраханской таможне (код 10302) за январь месяц, импорт из Азербайджана или Ирана:

select * from dclhead

where substr( g071, 1, 5 ) = ‘10302’ and g011 = ‘ИМ’

and to_char( g072, ‘MM’ ) = ‘01’ and g15 in ( ‘АЗЕРБАЙДЖАН’,

‘ИРАН, ИСЛАМСКАЯ РЕСПУБЛИКА’)

В подобных запросах рекомендуется для отбора по условию ИЛИ для нескольких значений использовать предикат IN.

2. Вычисление таможенной стоимости для каждой таможни:

select substr( g071, 1, 5 ) || ‘000’ «Код таможни», sum( g45 ) «Таможенная стоимость»

from dcltovar

group by substr( g071, 1, 5 ) || ‘000’

Здесь используется группировка по коду таможенного органа и вычисление агрегатной функции от поля g45.

3. Для каждой страны происхождения товара вычисление суммарной таможенной стоимости (раздельно для импорта и экспорта):

select nvl(g15, ‘неизвестна’) «Страна происхождения», g011, sum( g45 ) «Таможенная стоимость»

from dcltovar T join dclhead H using (g071, g072, g073) group by nvl(g15, ‘неизвестна’), g011

order by nvl(g15, ‘неизвестна’), g011;

Обратите внимание на то, что соединение таблиц выполняется при помощи конструкции using по указываемым полям.

4. Вычисление суммарных таможенной стоимости и общего веса для каждой таможни, товарной группы, страны происхождения по каждому месяцу (только для импорта):

141

select substr( g071, 1, 5 ) || ‘000’ «Код таможни», substr( g33, 1, 2 ) «Товарная группа»,

nvl(g15, ‘неизвестна’) «Страна происхождения», to_char( g072, ‘MM’ ) «Месяц»,

sum( g45 ) «Таможенная стоимость», sum( g35 ) «Вес брутто»

from dcltovar T join dclhead H using (g071, g072, g073) where g011 = ‘ИМ’

group by substr( g071, 1, 5 ) || ‘000’, substr( g33, 1, 2 ) ,

nvl(g15, ‘неизвестна’), to_char( g072, ‘MM’ )

5. Вычисление для каждого вида платежа суммы платежа и общей суммы по всем видам платежей:

select substr( g471, 1, 2 ) «Вид платежа», sum( g474) «Сумма»

from dclplatr

group by substr( g471, 1, 2 ) union

select ‘Итого:’, sum( g474) from dclplatr

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

6. Определение таможни с максимальной суммой статистических стоимостей товаров.

В принципе, это значение может быть получено следующим запросом (первая строчка результирующего множества):­

select substr( g071, 1, 5 )|| ‘000’, sum(g46) from dcltovar

group by substr( g071, 1, 5 ) || ‘000’ order by sum (g46) desc

Можно, тем не менее, составить запрос, который будет выдавать только одну требуемую запись:

142

select substr( g071, 1, 5 )|| ‘000’, sum (g46) from dcltovar group by substr( g071, 1, 5 ) || ‘000’

having sum (g46) >= all

(select sum (g46) from dcltovar

group by substr( g071, 1, 5 ) || ‘000’)

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

Если необходимо найти, например, две таможни с максимальными суммами, можно использовать следующий запрос:

select * from

(select substr( g071, 1, 5 ) || ‘000’, sum(G46) from dcltovar group by substr( g071, 1, 5 ) || ‘000’

order by sum(G46) desc ) where rownum <= 2;

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

7. Определение товаров, на которые начислена НДС, но не начислена ввозная пошлина:

select g071, g072, g073, g32, g471 from dclplatr P

where p.g471=’5010’ and not exists

( select * from dclplatr A

where a.g471 = ‘2010’ and P.g071 = a.g071 and P.g072 = a.g072 and P.g073 = a.g073 and P.g32 = a.G32);

Здесь основной запрос перебирает записи только с кодом платежа 5010, а подзапрос для каждой строки внешнего запроса проверяет, что в той же таблице записи с теми же номерами деклараций и товаров нет записи с кодом платежа 2010.

143

Указатели

Команды

страницы

 

 

CREATE TABLE

55

DELETE

134

DESCR

56

INSERT

131

SELECT

55

TRUNCATE

135

UPDATE

135

Конструкции

 

 

 

AS

58

FROM

56

HAVING

92

GROUP BY

87

ORDER BY

59

WHERE

59

Логические предикаты

 

 

 

ALL

124

ANY

124

BETWEEN

84

EXISTS

123

IN

84

IS NULL, IS NOT NULL

99

LIKE

83

Множественные операции

 

 

 

INTERSECT

93

MINUS

93

UNION

93

UNION ALL

93

144

Оператор CASE

75

Операции соединения

 

 

 

CROSS JOIN

105

FULL JOIN

108

INNER JOIN

116

JOIN USING

106

LEFT JOIN, RIGHT JOIN

107

NATURAL JOIN

105

Функции

 

 

 

CAST

73

CEIL

65

COS

65

COUNT

58

DECODE

75

FLOOR

65

INITCAP

66

LAST_DAY

70

LENGTH

66

LOWER

66

LPAD

66

LTRIM

66

REPLACE

66

RPAD

66

RTRIM

66

SIN

65

SUBSTR

66

SYSDATE

69

TO_CHAR

71

TO_DATE

72

TO_NUMBER

72

TRUNC

65

UPPER

66

145

Учебное издание

Заставной Дмитрий Александрович

Системы управления базами данных и язык Oracle SQL

Часть 1

Редактор Е.И. Барабанова

Оригинал-макет И.В. Литвинова

Подписано в печать 05.04.2013.

Формат 64х84/16 Ксерокопия. Таймс. Усл.п.л. 8,5. Тираж 50 экз. Заказ 3584.

Российская таможенная академия Ростовский филиал.

344002, г. Ростов-на-Дону, пр. Буденновский, 20.

146