You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Курс «Основы структурированного языка запросов SQL»
Решение практических задач
Lesson 1 - Выбор данных с использованием оператора SELECT
/*1. Выбор данных с использованием оператора SELECT a. Выбрать все месторождения таблица DW_OILFIELD, все скважины таблица DW_WELLS; отобразить названия столбцов на русском языке. b. Найти все различные коды месторождений OILFIELD_ID по которым есть скважины (таблица DW_WELLS); c. Вывести информацию о МЭР (DW_MTH_OP_RAP) отобразив любые две колонки, например нефть, воду и их сумму в третьей отдельной колонке.*/--1.aselect*fromKIN_UNG.dw_oilfield;
select*fromKIN_UNG.dw_wells;
select oilfield_name as"Название месторождения"fromKIN_UNG.dw_oilfield;
-- 1.bselect distinct oilfield_id fromkin_ung.dw_wells;
-- 1.c.select well_id, OIL_M3, WAT_LIQ_INJ_m3, OIL_M3 + WAT_LIQ_INJ_M3 as"Сумма в м3"fromkin_ung.DW_MTH_OP_RAPwhere OIL_T>0;
Lesson 2 - Ограничение и сортировка данных
/*2. Ограничение и сортировка данных a. Найти последний день, в который были ошибки в журнале загрузки данных в РН-КИН UT_SA2DW_LOG; b. Найти таблицы в схеме имеющие комментарии, содержащие слово «проект» (all_tab_comments); c. Найти столбцы имеющие комментарии, содержащие фрагмент слов «коорд» или «X» в названии (all_col_comments); d. Определить последний патч, примененный на регионе UT_DB_PATCH_VERSION.*/--2.aselect*fromKIN_UNG.UT_SA2DW_LOGwhere MSG_TYPE LIKE'E%'order by created_on desc;
-- 2.bselect*from all_tab_comments where owner ='KIN_UNG'and table_name like'DW%'and comments like'%проект%';
-- 2.cselect*from all_tab_comments where comments like'%коорд%'or comments like'%X%';
select*from all_tab_comments where (comments like'%коорд%'or comments like'%X%') and owner ='KIN_UNG';
-- скобки используются для порядка выполнения, сначала ищем KIN_UNG, потом остальное-- см. еще правила приоритета-- 2.dselect*fromKIN_UNG.ut_db_patch_versionorder by1desc;
select*fromKIN_UNG.ut_db_patch_versionwhereorder by1desc;
Lesson 3 - Использование строковых функций, и преобразований
/*3. Использование строковых функций, и преобразований a. Вывести названия месторождений в верхнем регистре; b. Показать дату ошибки из UT_SA2DW_LOG или иную дату с точностью до секунд; c. Вывести все строки, содержащие информацию об ошибках за этот день (используя синтаксис вида to_date('01-02-2021', 'DD-MM-YYYY'));*/-- 3aselectUPPER(OILFIELD_NAME_FULL) as"Месторождение", INITCAP(OILFIELD_NAME_FULL) as"Месторождение"fromKIN_UNG.dw_oilfield;
-- 3.b-- L псевдоним таблицыselect msg_type, to_char(created_on, 'DD-MM-YYYY HH24:MI:SS') as"Дата ошибки", L.*fromKIN_UNG.UT_SA2DW_LOG L where msg_type ='ERR'order by created_on DESC;
select*fromKIN_UNG.UT_SA2DW_LOGwhere MSG_TYPE ='ERR';
-- 3.cselect msg_type, to_char(created_on, 'DD-MM-YYYY HH24:MI:SS'), L.*fromKIN_UNG.UT_SA2DW_LOG L
where trunc(L.created_on, 'DD') = to_date('01-02-2021', 'DD-MM-YYYY');
Lesson 4 - Групповые агрегатные функции
/*4. Групповые агрегатные функции a. Отобразить сумму добычи в тоннах по одному из объектов DW_MTH_OP_RAP; b. Посчитать количество записей РИГИС по скважине или объекту DW_GIS. c. Округлить среднюю добычу в тоннах по объекту до 1 знака до запятой и после DW_MTH_OP_RAP.*/-- 4.a-- быстрееselectsum(oil_t) fromkin_ung.dw_mth_op_rapwhere object_id =48;
-- дольшеselectsum(oil_t), object_id fromkin_ung.dw_mth_op_rapgroup by object_id;
-- 4.bselectcount(*) fromKIN_UNG.DW_GISwhere object_id =22;
select well_id, count(*) fromkin_ung.dw_gisgroup by well_id;
-- 4.cselect*fromKIN_UNG.DW_MTH_OP_RAP;
select*fromKIN_UNG.DW_GIS;
select-- до запятой
object_id, round(avg(oil_t), -1),
-- после запятой
round(avg(oil_t), 1)
fromKIN_UNG.DW_MTH_OP_RAPgroup by object_id;
Lesson 5 - Отображение данных из нескольких таблиц
/*5. Отображение данных из нескольких таблиц a. Отобразить координаты устья скважины с указанием названия месторождения и имени скважины (DW_OILFIELD, DW_WELLS, DW_WELL_HEAD_COORDS); b. Посчитать количество скважин по всем месторождениям региона; c. Посчитать количество скважин по месторождению, на которые есть Карты (DW_GRID).*/-- 5.a selecto.oilfield_name, w.well_name, c.x0, c.y0fromkin_ung.dw_oilfield o
joinkin_ung.dw_wells w
on (o.oilfield_id=w.oilfield_id)
joinkin_ung.dw_well_head_coords c
on (w.well_id=c.well_id) order by1;
-- для 3 таблиц должно быть 2 соединения (join/where), для 4табл -> 3, для 5табл -> 4selecto.oilfield_name, w.well_name, o.oilfield_id, m.oil_t, m.dtfromkin_ung.dw_oilfield o, kin_ung.dw_wells w, kin_ung.dw_mth_op_rap m
whereo.oilfield_id=w.oilfield_idandw.well_id=m.well_idandm.oil_t>0ando.oilfield_name='МАМОНТОВСКОЕ';
-- 5.bselect oilfield_id, count(*) fromKIN_UNG.dw_wellsgroup by oilfield_id;
selectf.oilfield_name, count(*) fromKIN_UNG.dw_wells w, KIN_UNG.dw_oilfield f
wherew.oilfield_id=f.oilfield_idgroup byf.oilfield_name;
-- 5.c-- возвращаем к какому месторождению привязаны картыselectf.oilfield_id, f.oilfield_name, o.object_name, g.captionfromkin_ung.dw_oilfield f , kin_ung.dw_object o, kin_ung.dw_grid g
wheref.oilfield_id=o.oilfield_idando.object_id=g.object_id;
-- ищем те месторождения, где есть хоть одна карта (частный случай) select distinctf.oilfield_idfromkin_ung.dw_oilfield f , kin_ung.dw_object o, kin_ung.dw_grid g
wheref.oilfield_id=o.oilfield_idando.object_id=g.object_id;
-- // Результат: 209, 588, 141, 229, 249, 572, 201, 215, 203, 259, 531-- объединяем из 5.b (где считали кол-во скважин) и наш предыдущий запросselectf.oilfield_name, count(*) fromKIN_UNG.dw_wells w, kin_ung.dw_oilfield f
wherew.oilfield_id=f.oilfield_idandf.oilfield_idin (select distinctf.oilfield_idfromkin_ung.dw_oilfield f , kin_ung.dw_object o, kin_ung.dw_grid g
wheref.oilfield_id=o.oilfield_idando.object_id=g.object_id)
group byf.oilfield_name;
Lesson 6 - Подзапросы и их классификация
/*6. Подзапросы и их классификация a. Вывести все названия типов контуров, загруженных в БД (DW_LINE, DW_DICT_LINE_KIND). b. Найти все скважины с добычей больше среднего по региону.*/select
(select oilfield_name f fromkin_ung.dw_oilfield f wheref.oilfield_id=w.oilfield_id) "Имя мест",
w.*fromkin_ung.dw_wells w;
select
w.*fromkin_ung.dw_wells w, (selectmax (oilfield_id) oilfield_id fromkin_ung.dw_oilfield) subq
wherew.oilfield_id=subq.oilfield_id;
-- 6.a.select
(selectd.value_fullfromKIN_UNG.dw_dict_line_kind d
whered.id_code=l.line_kind) "Тип", l.*fromkin_ung.dw_line l;
-- 6.a var2select (
selectd.value_fullfromKIN_UNG.dw_dict_line_kind d
whered.id_code=l.line_kind
) "Тип", l.*from (select distinct line_kind fromkin_ung.dw_line) l;
-- 6.a var3 самый быстрый ч\з joinselect*fromkin_ung.dw_dict_line_kind d
join
(select distinct line_kind fromkin_ung.dw_line) l
ond.id_code=l.line_kind;
-- 6.a var4select*fromKIN_UNG.dw_dict_line_kindwhere id_code in (select distinct line_kind fromkin_ung.dw_line);
-- 6.bselectavgs.well_id, round(avgs.avg_w, 2) rounded_avg_rate from
(selectR.well_id, AVG(oil_t) avg_w
FROMkin_ung.dw_mth_op_rap R
GROUP BYR.well_id) avgs
WHEREavgs.avg_w> (SELECTAVG(R.oil_t) FROMkin_ung.dw_mth_op_rap R);
-- 6.b var 2select*fromkin_ung.dw_mth_op_rap mq wheremq.oil_t>
(SELECTAVG(R.oil_t) FROMkin_ung.dw_mth_op_rap R);
Lesson 7 - Объединения множеств
/*7. Объединения множеств a. Найти два одинаковых и различающихся справочника в различных регионах; b. Найти пересечение двух различающихся справочников DW_DICT_METHOD разных регионов.*/-- 7.a-- берем любые таблицы - DW_DICT%SELECT*fromKIN_UNG.DW_DICT_CONTRACTOR
MINUS
SELECT*fromKIN_BN_ARL.DW_DICT_CONTRACTOR;
SELECT id_code, value_short, value_full fromKIN_BN_ARL.DW_DICT_GRID_KIND
MINUS
(SELECT id_code, value_short, value_full fromKIN_BN_ARL.DW_DICT_GRID_KIND
INTERSECT
SELECT id_code, value_short, value_full fromKIN_UNG.DW_DICT_GRID_KIND);
-- 7.bSELECTlower(id_code), lower(value_short), lower(value_full) FROMKIN_BN_ARL.dw_dict_method
INTERSECT
SELECTlower(id_code), lower(value_short), lower(value_full) FROMKIN_UNG.dw_dict_method;
Lesson 8 - Язык манипулирования данными (DML)
/*8. Язык манипулирования данными (DML) a. Добавить вручную новую скважину, переименовать ее и удалить; b. Изменить название карты DW_GRID.*/-- 8.aINSERT INTO"KIN_BN_ARL"."DW_WELLS" (OILFIELD_ID, WELL_ID, WELL_NAME) VALUES ('223', '3434', 'Тестовая скважина');
UPDATE"KIN_BN_ARL"."DW_WELLS"SET WELL_NAME ='Тесто'WHERE WELL_ID =3434;
DELETEFROM"KIN_BN_ARL"."DW_WELLS"WHERE WELL_ID =3434;
-- 8.bUPDATE"KIN_BN_ARL"."DW_GRID"SET CAPTION ='Карта начальных н-н толщиан, м'WHERE ROWID ='AAAZKqAAJAAAK0DAAB'AND ORA_ROWSCN ='32883536332970'