Вы находитесь на странице: 1из 3

Задание по SQL

Описание:

Пусть есть две таблицы:


PLANS – список планов полета,
PLAN_ROUTE_POINTS – точки маршрута для планов полета.

Таблица PLANS:
P_ID
P_FLD13
P_FLD16
P_CATEGORIES

Таблица PLAN_ROUTE_POINTS:
PP_ID
P_ID
PP_STATE_ENTRY_FLAG
PP_STATE_EXIT_FLAG
PP_NUMBER
PP_PLAN_POINT

Таблицы связаны по P_ID, то есть к плану полета с P_ID= 4637973 относятся точки с P_ID=
4637973.

Эти точки надо сортировать по PP_NUMBER.

P_FLD13 – код аэродрома вылета. Если первая буква U, взлетаем в России, иначе за
границей.

P_FLD16 – код аэродрома назначения. С ним аналогично.

P_CATEGORIES – это строка из символов 0 и 1, которая как-то характеризует полет.


Например,
010001111010000000000000000000000000000000000000001.

Если третья буква в этой строке ‘1’, то полет международный. Если ‘0’, то
внутрироссийский.

PP_PLAN_POINT – тип точки: 2 – аэродром вылета, 3 – аэродром назначения, 0 и 1 -


промежуточные точки маршрута.

PP_STATE_ENTRY_FLAG – признак входа в воздушное пространство России. 1 – вход, 0 –


нет.

PP_STATE_EXIT_FLAG – признак выхода из воздушного пространства России. 1 – выход, 0


– нет.
Если взлетаем в России, то в первой точке маршрута должно быть PP_PLAN_POINT = 2,
PP_STATE_ENTRY_FLAG = 1.

Если садимся в России, то в последней точке маршрута должно быть PP_PLAN_POINT = 3,


PP_STATE_EXIT_FLAG = 1.

Если взлетаем в России, а садимся не в России, то в первой точке маршрута должно быть
PP_PLAN_POINT = 2, PP_STATE_ENTRY_FLAG = 1, в некоторой промежуточной точке
должно быть PP_PLAN_POINT = 0 или 1, PP_STATE_EXIT_FLAG = 1,
в последней точке маршрута должно быть PP_PLAN_POINT = 3, PP_STATE_EXIT_FLAG =
0.

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

Пояснения к заданию:
PP_ID - это id точки маршрута
PP_NUMBER - это порядковый номер точки, то есть PP_ID = 43525242 с PP_NUMBER = 3
означает, что это третья точка в маршруте, которую самолет пролетает по плану полета.

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

Точка Тип PP_STATE_ENTRY PP_STATE_EXIT Страна


точки _FLAG _FLAG
Сочи 2 1 0 Россия
точка в России 1 0 0 Россия
... 0 0 0 Россия
точка в России 1 0 0 Россия
точка входа в Казахстан 1 0 1 Россия - Казахстан
точка в Казахстане 0 0 0 Казахстан
... 0 0 0 Казахстан
точка в Казахстане 0 0 0 Казахстан
точка входа в Россию 1 1 0 Россия - Казахстан
точка в России 0 0 0 Россия
... 0 0 0 Россия
точка в России 1 0 0 Россия
Новосибирск 3 0 1 Россия
Задание:

Напишите запрос, который находит все планы, у которых признак


международного полета в P_CATEGORIES не соответствует маршруту.

Примеры противоречий:

a) Аэродромы взлета и назначения в России, в точках маршрута, кроме крайних,


PP_STATE_ENTRY_FLAG = 0 и PP_STATE_EXIT_FLAG = 0. При этом в P_CATEGORIES
стоит, что план международный.

b) Хотя бы один из аэродромов не в России, а в P_CATEGORIES стоит, что план


внутрироссийский.

c) Аэродромы в России, в есть точки маршрута, кроме крайних, у


которых PP_STATE_ENTRY_FLAG = 1 и/или PP_STATE_EXIT_FLAG = 1.
Скажем, Москва -> Калининград. При этом в P_CATEGORIES стоит, что план
внутрироссийский.

Сделайте пожалуйста 3 отдельных запроса.