Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Main_Table PK User_Constraints 5 страница

CURRENT_YEAR MON TUE WED THU FRI SAT SUN | Z23456789 123456789 123456789 123456789 80 symbols | Main_Table PK User_Constraints 1 страница | Main_Table PK User_Constraints 2 страница | Main_Table PK User_Constraints 3 страница | Main_Table PK User_Constraints 7 страница | Main_Table PK User_Constraints 8 страница | Main_Table PK User_Constraints 9 страница | Main_Table PK User_Constraints 10 страница | Main_Table PK User_Constraints 11 страница |


Читайте также:
  1. 1 страница
  2. 1 страница
  3. 1 страница
  4. 1 страница
  5. 1 страница
  6. 1 страница
  7. 1 страница

 

Комментарий:

Первым временным представлением создаем текстовые цепочки сумм с помощью sys_connect_by_path. То же самое, что в итоговом столбце «сумма», но с лидирующим знаком «+».

Во втором временном представлении организовываем основной вывод результата: от результата предыдущего представления убираем лидирующий «+». Для того, чтобы сосчитать сумму из строки con_by_path используем подзапрос: каждое число столбца “A” проверяем на наличие в строке +'||A||, и если находим, то суммируем.

 

14. Создать запрос для получения сведений (Фамилия, Группа, Специальность, Отличник/Хорошист) обо всех отличниках в группе, а если таковых нет, то обо всех хорошистах. (Под отличниками понимаем студентов, сдавших все предусмотренные учебные планом экзамены на отлично с первого раза. Под хорошистами понимаем студентов, сдавших все предусмотренные учебные планом экзамены на отлично или хорошо с первого раза).

 

WITH otl AS

(SELECT номер_студента, 'отличник' "SM"

FROM

(SELECT DISTINCT номер_студента

FROM успеваемость

MINUS

SELECT номер_студента

FROM

(SELECT номер_студента, номер_дисциплины

FROM студенты

INNER JOIN группы

USING (номер_группы)

INNER JOIN учебные_планы

USING (код_специальности)

MINUS

SELECT номер_студента, номер_дисциплины

FROM успеваемость

WHERE оценка=5)

MINUS

SELECT номер_студента

FROM успеваемость t1

WHERE номер_дисциплины IN

(SELECT номер_дисциплины

FROM студенты

INNER JOIN группы

USING (номер_группы)

INNER JOIN учебные_планы

USING (код_специальности)

WHERE номер_студента=t1.номер_студента) AND оценка<5)),

hor AS

(SELECT номер_студента, 'хорошист' "SM"

FROM

(SELECT DISTINCT номер_студента

FROM успеваемость

MINUS

SELECT номер_студента

FROM

(SELECT номер_студента, номер_дисциплины

FROM студенты

INNER JOIN группы

USING (номер_группы)

INNER JOIN учебные_планы

USING (код_специальности)

MINUS

SELECT номер_студента, номер_дисциплины

FROM успеваемость

WHERE оценка>=4)

MINUS

SELECT номер_студента

FROM успеваемость t1

WHERE номер_дисциплины IN

(SELECT номер_дисциплины

FROM студенты

INNER JOIN группы

USING (номер_группы)

INNER JOIN учебные_планы

USING (код_специальности)

WHERE номер_студента=t1.номер_студента)

AND оценка<4

MINUS

SELECT номер_студента

FROM otl)),

groups_otl AS

(SELECT студенты.фамилия Фамилия, студенты.номер_группы Группа, sp.название_специальности Специальность, otl.SM "Отличник/Хорошист"

FROM otl

LEFT JOIN студенты

ON (otl.номер_студента=студенты.номер_студента)

LEFT JOIN группы gr

ON студенты.номер_группы=gr.номер_группы

LEFT JOIN специальности sp

ON gr.код_специальности=sp.код_специальности),

groups_hor AS

(SELECT студенты.фамилия Фамилия, студенты.номер_группы Группа, sp.название_специальности Специальность, hor.SM "Отличник/Хорошист"

FROM hor

LEFT JOIN студенты

ON (hor.номер_студента=студенты.номер_студента)

LEFT JOIN группы gr

ON студенты.номер_группы=gr.номер_группы

LEFT JOIN специальности sp

ON gr.код_специальности=sp.код_специальности)

SELECT Фамилия, Группа, Специальность, "Отличник/Хорошист"

FROM groups_otl

UNION ALL

SELECT *

FROM groups_hor

WHERE Группа NOT IN

(SELECT DISTINCT Группа

FROM groups_otl)

ORDER BY Группа

 

 

Результат:

 

ФАМИЛИЯ ГРУППА СПЕЦИАЛЬНОСТЬ Отличник/Хорошист

--------------- --------------- ---------------------------------------- -----------------

Старова 121 СИСТЕМЫ АВТОМАТИЧЕСКОГО отличник

УПРАВЛЕНИЯ

 

Комментарий:

C помощью временных представлений находим номера студентов, которые являются отличниками и хорошистами. Отличники: выбираем номера студентов и помечаем как «отличник» из временной таблицы отличников (В подзапросе сначала выбираем всех студентов, затем из них выкидываем тех, что учатся не на 5 по своему учебному плану). Из того, что получилось убираем тех, кто не круглый отличник по специальности. Для хорошистов делаем так же, но из них убираем всех отличников (отличник не является хорошистом).

Временные представления групп отличников и групп хорошистов нужны для получения информации о студенте (группа, специальность). В главном запросе выбираем всю информацию из временного представления groups_otl об отличниках и из информации о хорошистах groups_hor, объединяем выборки в одну, сортируем вывод информации по группе.

 

15. Создать запрос для определения сотрудников, которые имеют перерыв в стаже работы в фирме (Таблицы Employees и Job_History).

 

SELECT e.employee_id

FROM employees e JOIN

(SELECT DISTINCT first_value(start_date) OVER (PARTITION BY employee_id ORDER BY employee_id, start_date) st, employee_id

FROM job_history) t

ON t.employee_id = e.employee_id

WHERE e.hire_date!= t.st

UNION

SELECT employee_id

FROM job_history j1

HAVING (MAX(end_date)-MIN(start_date)+1)!=(SELECT SUM(end_date-start_date+1)

FROM job_history j2

WHERE j1.employee_id=j2.employee_id)

GROUP BY employee_id

 

Результат:

 

EMPLOYEE_ID

-----------

 

Комментарий:

Выбираем всех сотрудников, чьи номера присутствуют в таблице job_history и соединяем по номеру сотрудника с таблицей employees с условием равенство даты найма и даты начала работы. Объединем по номеру сотрудника с результатом вычисления MAX(end_date)-MIN(start_date)+1)!=(SELECT SUM(end_date-start_date+1 (Если у сотрудника был перерыв в стаже, то разница между последней датой окончания и первой датой начала работы не будет совпадать с суммой промежутков работы.)

 

16. Создать запрос для вывода информации о студентах, у которых интервал между датами сдачи экзаменов составляет менее трех дней. Информацию вывести в виде:

Фамилия Дисциплина 1 Дата сдачи1 Дисциплина 2 Дата сдачи 2
Поляков Математика 15.04.1998 Физика 17.04.1998

 

SELECT distinct с1.фамилия "Фамилия", д1.название "Дисциплина1", у1.дата "Дата сдачи 1", д2.название "Дисциплина2", у2.дата "Дата сдачи 2"

FROM успеваемость у1

JOIN успеваемость у2

ON у1.номер_студента=у2.номер_студента

JOIN студенты с1

ON у1.номер_студента = с1.номер_студента

JOIN дисциплины д1

ON у1.номер_дисциплины = д1.номер_дисциплины

JOIN дисциплины д2

ON у2.номер_дисциплины = д2.номер_дисциплины

WHERE (у2.дата - у1.дата)>=0 AND (у2.дата - у1.дата)<3 AND д2.название!= д1.название

 

Результат:

Фамилия Дисциплина1 Дата сдачи 1 Дисциплина2 Дата сдачи 2

--------------- ------------------------------ ------------ ------------------------------ ------------

Поляков Физика 10.06.99 Математика 12.06.99

Старова Физика 10.06.99 Математика 12.06.99

 

Комментарий:

Выбираем нужные в итоговом выводе столбцы. Первым соединением соединяем таблицу успеваемости саму с собой, чтобы определить все интервалы между экзаменами. Вторым соединением получаем фамилию студента. Третьим левым соединяем со списком дисциплин (определяем дисциплину 1).

Четвертым правым соединяем со списком дисциплин (определяем дисциплину 2). В разделе WHERE фильтруем половину экзаменов (т.к. экзамены дублируются) и проверяем на соответствие интервалу менее трех дней в отобранном списке экзаменов.

 

17. Создать запрос для определения списка студентов, сдавших экзамены по дисциплинам, не предусмотренным учебным планом специальности, на которой учатся студенты.

 

WITH stud AS

(SELECT DISTINCT ст.Фамилия last_name, спец.код_специальности job_id, усп.номер_дисциплины d_number

FROM СТУДЕНТЫ ст

JOIN ГРУППЫ гр

ON ст.номер_группы = гр.номер_группы

JOIN СПЕЦИАЛЬНОСТИ спец

ON гр.код_специальности = спец.код_специальности

JOIN УСПЕВАЕМОСТЬ усп

ON ст.номер_студента=усп.номер_студента)

SELECT DISTINCT last_name AS "Студент"

FROM stud t1

WHERE d_number NOT IN

(SELECT номер_дисциплины

FROM учебные_планы

WHERE код_специальности=t1.job_id)

 

Результат:

Студент

---------------

Гриценко

 

Комментарий:

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

Главный запрос проверяет номер специальности на несуществование в данных подзапроса (который находит все номера дисциплин для данного кода специальности, который поставляется из главного запроса). Т.к. дисциплин может быть несколько, то и на вывод может попасть несколько одинаковых студентов – для вывода уникальной записи использем Distinct.

 

18. Получить информацию о работе кафедр в виде:

  Кафедра 1 Кафедра 2 Итого
Количество преподавателей      
Суммарный оклад      
Средний оклад      

 

SELECT 'Количество преподавателей' " ",

sum

(CASE кафедра

WHEN 'Кафедра 1' THEN 1

ELSE 0 END) AS "Кафедра 1",

sum

(CASE кафедра

WHEN 'Кафедра 2' THEN 1

ELSE 0 END) AS "Кафедра 2",

sum (1) AS "Итого"

FROM преподаватели

UNION ALL

SELECT 'Суммарный оклад',

sum

(CASE кафедра WHEN 'Кафедра 1' THEN зарплата

ELSE 0 END),

sum

(CASE кафедра WHEN 'Кафедра 2' THEN зарплата

ELSE 0 END),

sum (зарплата) AS "Итого"

FROM преподаватели

UNION ALL

SELECT 'Средний оклад',

(SELECT avg(зарплата)

FROM преподаватели

WHERE кафедра='Кафедра 1'),

(SELECT avg(зарплата)

FROM преподаватели

WHERE кафедра='Кафедра 2'),

(SELECT avg(зарплата)

FROM преподаватели)

FROM dual

 

Результат:

Кафедра 1 Кафедра 2 Итого

------------------------- --------- --------- -----

Количество преподавателей 4 5 9

Суммарный оклад 10500 12000 22500

Средний оклад 2625 2400 2500

 

Комментарий:

Первые два select`a основываются на переводе столбца в строку с помощью case (Если данные относятся к выбираемым в данной строке – суммируем).

Третий блок select состоит из независимых подзапросов, каждый из которых считает свою ячейку.

 

19. Имеется таблица с колонкой, которая содержит множество значений, разделенных запятыми. Требуется создать запрос, который каждое значение выведет на отдельной строке. Например, дана таблица:

Номер Телефон
  2-78,2-89
  2-78,2-83,8-34

Результат:

Номер Телефон
  2-78
  2-89
  2-78
  2-83
  8-34

 

Создаём таблицу и заполняем её:

CREATE TABLE num_t (номер VARCHAR2(25), телефон VARCHAR2(25));

INSERT INTO num_t VALUES (952240,'2-78,2-89');

INSERT INTO num_t VALUES (952423,'2-78,2-83,8-34');

desc num_t

 

Name Null Type

------- ---- ------------

НОМЕР VARCHAR2(25)

ТЕЛЕФОН VARCHAR2(25)

SELECT decode(lvl, 1, Номер) Номер, Телефон

FROM

(SELECT distinct Номер, level lvl, regexp_substr(Телефон,'[^,]+',1,level) Телефон

FROM num_t

CONNECT BY regexp_count(Телефон, '[^,]+') >= level

ORDER BY Номер, Телефон)

 

Комментарий:

Разбиваем данные второго столбца таблицы на части, отделенные запятыми, а затем их последовательно извлекаем по порядку до тех пор, пока количество шагов не станет больше количества групп символов.

Повторяем эти действия для каждого номера, после чего в случае, когда шаг извлечения данных первый, пишем значение номера, иначе - оставляем поле номера пустым.

 

20. Задана таблица

A COL1
   
   
   
   
   
   
   
   
   
   

Требуется сгруппировать значения по группам так, чтобы сумма в группе не превышала заданное число (100).

A COL1 GRP
     
     
     
     
     
     
     
     
     
     

 

Создаём таблицу и заполняем её:

CREATE TABLE col1 (A NUMBER(8), COL1 NUMBER(8));

INSERT INTO col1 VALUES (1,10);

INSERT INTO col1 VALUES (2,90);

INSERT INTO col1 VALUES (3,1);

INSERT INTO col1 VALUES (4,5);

INSERT INTO col1 VALUES (5,5);

INSERT INTO col1 VALUES (6,50);

INSERT INTO col1 VALUES (7,99);

INSERT INTO col1 VALUES (8,2);

INSERT INTO col1 VALUES (9,0);

INSERT INTO col1 VALUES (10,50);

 

Name Null Type

---- ---- ---------

A NUMBER(8)

COL1 NUMBER(8)

 

SELECT A, Col1,GRP, Total

FROM col1

MODEL

DIMENSION BY(row_number() OVER(ORDER BY A) rn)

MEASURES(A,COL1,COL1 total,1 GRP)

RULES(total[rn > 1] ORDER BY A = CASE

WHEN total[cv() - 1] + COL1[cv()] <= 100 THEN total[cv() - 1] + COL1[cv()]

ELSE COL1[cv()] END,

GRP[rn > 1] ORDER BY A = CASE

WHEN total[cv() - 1] + COL1[cv()] <= 100 THEN GRP[cv() - 1]

ELSE GRP[cv()-1] +1 END)

ORDER BY rn

 

Результат:

 

A COL1 GRP TOTAL

- ---- --- -----

1 10 1 10

2 90 1 100

3 1 2 1

4 5 2 6

5 5 2 11

6 50 2 61

7 99 3 99

8 2 4 2

9 0 4 2

10 50 4 52

 

10 rows selected

 

Комментарий:

Решаем с помощью model. В столбце Total храним текущие суммы, если они не превышают 100. Если сумма Total и текущего значения больше или равна 100 - группируем также как и в прошлый раз, а если нет то добавляем единицу.

 

 


ВАРИАНТ 7

(Базы данных Студент и Human Resources)

1. Создать запрос для вывода 3 дисциплин, по которым на сессии было получено максимальное количество пятерок. Если по каким-то дисциплинам получено такое же количество пятерок, как и по дисциплине с наименьшим количеством пятерок из первой тройки, то она тоже должна попасть в список. Задачу решить с использованием аналитических функций.

 

select НАЗВАНИЕ as "Предмет", mark AS "Кол-во пятерок"

from (select d.НАЗВАНИЕ, count(u.ОЦЕНКА) mark,

RANK() over (order by count(u.ОЦЕНКА) desc) rank

from ДИСЦИПЛИНЫ d join УСПЕВАЕМОСТЬ u on d.НОМЕР_ДИСЦИПЛИНЫ = u.НОМЕР_ДИСЦИПЛИНЫ

where u.ОЦЕНКА = 5

group by d.НАЗВАНИЕ)

where rank < 4

order by mark desc;

 

Комментарий:

Соединяем таблицы «дисциплины» и «успеваемость», чтобы узнать по каким предметам были получены пятерки, далее считаем кол-во этих пятерок и ранжируем по этому количетсву. И выводим только те предметы ранг которых меньше 4х.

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

+ не забудьте учесть, что должны быть выведены все дисциплины только с наименьшим количеством пятёрок (а с самым большим и средним – по одной дисциплине).

 

2. Есть таблица, в которой значения в двух столбцах Obj1 и Obj2 определяют номера объектов, между которыми имеется связь. Один объект может быть связан с несколькими, те в свою очередь могут быть связаны друг с другом. В результате, значения образуют связанные множества. На входе имеем номер некоторого объекта, нужно получить все элементы множества, к которому оно относится.

 

with t0 as (

select 1 value1, 2 value2 from dual

union all

select 2, 3 from dual

union all

select 2, 4 from dual

union all

select 8, 6 from dual

union all

select 5, 6 from dual

),

t as (

select value1, value2 from t0

union

select value2, value1 from t0

)

select distinct value1

from t

connect by nocycle

prior value1 = value2

start with value1 = &s;

 

результат = 1 2 3 4

 

Комментарий:

t0 имитирует исходную таблицу, создаем иерархический запрос, который проходит по связанным элементам и строит из них дерево, и по определении конца множества (попадание в бесконечный цикл) завершаем работу запроса. NOCYCLE – позволяет в запросе с предложением CONNECT BY распознать, что встретился бесконечный цикл и прекратить выполнение запроса без выдачи ошибки (вместо возврата ошибки зацикливания при выполнении предложения CONNECT BY)

 

3. Имеется таблица с тремя столбцами: именем, фамилией и коэффициентом, показывающим сколько раз должна повторяться запись. Требуется написать запрос, выводящий таблицу, содержащую строки с именами и фамилиями сотрудников. Число строк для каждого сотрудника должно определяться значением коэффициента. То есть, если Иван Петров имел коэффициент 3, а Сергей Сидоров – коэффициент 5, то в результатах запроса должны быть 3 строки для сотрудника Петрова и 5 строк для Сидорова.

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

 

Пример выходного отчёта:

Сквозной № № в группе Имя Фамилия
    Иван Петров
    Иван Петров
    Иван Петров
    Сергей Сидоров
    Сергей Сидоров
    Сергей Сидоров
    Сергей Сидоров
    Сергей Сидоров

 

select rownum as "Сквозной номер", grNum as "№ в группе", Имя, фамилия

from (select level grNum, t1.Имя, t1.Фамилия

from t t1 join t t2 on t1.имя!= t2.имя

connect by level < t1.Коэф + 1

and prior t1.Коэф = t1.Коэф

and prior dbms_random.value is not null

order by Имя, Фамилия, level);

 

Комментарий:

Используя рекурсивный запрос, генерируем последовательность из заданного количества записей (коэффициент) для каждой записи в нашей таблице. С помощью rownum организовываем сквозную нумерацию, а с помощью distinct level – нумерацию в группе.

В принципе, конечно, работать будет. Но попробуйте протестировать, например на таких данных:

with t as(

select 'Иван' имя, 'Петров' фамилия, 10 коэф from dual union all

select 'Сергей' имя, 'Сидоров' фамилия, 12 коэф from dual union all

select 'Александр' Имя, 'Сергеев' Фамилия, 14 коэф from dual)

 

И Вы уже будете в 9 раз дольше ждать ответа – из-за размножения строк при построении дерева (бОльшие коэффициенты даже не предлагаю задавать – ответа можно совсем не дождаться).

Т.е. задачу зачту и в этом виде после исправления сортировки, но если Вы придумаете вариант лучше – будет здорово.

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

undefine d1

undefine d2

 

with d as

(select dates

from(select TRUNC(s + x) dates

from (select level x, to_date('&&d1','DD-MM-YYYY')-1 s from dual connect by level <= to_date('&&d2','DD-MM-YYYY') + 1 - to_date('&d1','DD-MM-YYYY')))

order by dates)

 

select * from d

minus

select distinct dates

from d inner join преподаватели п

on d.dates = п.дата_контракта and п.дата_контракта < to_date('&d2','DD-MM-YYYY')

and п.дата_контракта > to_date('&d1','DD-MM-YYYY');

 

результаты для диапазона от 25.04.79 до 15.05.79 (даты найма в этом диапазоне: 01.05.79 и 10.05.79)

 

Комментарий:

Создаем табличку состоящая и диапазона дат, границы которого мы задаем, затем вычитаем из всего кол-ва дат, те даты, которые являются датами найма сотрудников и попадают в заданный диапазон. Обе границы входят в диапазон

 

5. Создать запрос, позволяющий выводить информацию о студентах и преподавателях (Фамилия с инициалами, Зарплата/Стипендия, Статус – преподаватель или студент).

 

select to_char(ФАМИЛИЯ || ' ' ||substr(ИМЯ,1,1) || '. ' || substr(ОТЧЕСТВО,1,1) || '. ') as "Имя", ЗАРПЛАТА as "З.П./СТИПЕНДИЯ", to_char ('Преподаватель') as "Статус"

from ПРЕПОДАВАТЕЛИ

union all

select to_char(ФАМИЛИЯ || ' ' ||substr(ИМЯ,1,1) || '. ' || substr(ОТЧЕСТВО,1,1) || '. ') as "Имя", СТИПЕНДИЯ, to_char ('Студент')as "Статус"

from СТУДЕНТЫ;

 

Комментарий:

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

 

6. Получить информацию о подчиненности таблиц в схеме в виде:

ИмяТаблицы1(ИмяFK1 ссылается на ИмяТаблицы2/ИмяPK2)

ИмяТаблицы2(ИмяFK2 ссылается на ИмяТаблицы3/ИмяPK3) ……

select distinct uc.table_name || '(' || uc.constraint_name || ' cсылается на ' || a.table_name || '/' || uc.r_constraint_name || ')' as "Table info"

from user_constraints uc join user_cons_columns ucc

on uc.constraint_name = ucc.constraint_name

join user_constraints a

on a.constraint_name = uc.r_constraint_name

join user_cons_columns b on a.constraint_name = b.constraint_name

where uc.constraint_type like 'R' and ucc.position = b.position;

 

 

Комментарий:

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

 

7. Создать представление, которое выводит фамилию студента, оценку, дату сдачи экзамена и название предмета. Оценка должна выводиться в формате: отл, хор, удовл или неудовл. Для студентов, не сдававших экзамен, должно выводиться – Не сдавал – в столбцах Оценка, Дата сдачи экзамена и Название предмета.

create view stud_progress as

select distinct s.ФАМИЛИЯ, decode(u.оценка, null,'Не сдавал', 5, 'отл', 4, 'хор', 3, 'удвл', 2,'неудовл') as "Оценка",

decode(u.дата, null,'Не сдавал', u.дата) as "Дата сдачи",

decode (d.название, null,'Не сдавал', d.название) as "Название"

from студенты s left join успеваемость u on s.номер_студента = u.номер_студента

left join дисциплины d on d.номер_дисциплины = u.номер_дисциплины

order by s.ФАМИЛИЯ;

 

Комментарий:

Объединяем таблицы «студенты», «успеваемость» и «дисциплины» для того, чтобы узнать какие дисциплины, и на какую оценку сдавали студенты. Если студенты не сдавали экзамены то, с помощью функции decode мы заменяем пустые поля на «Не сдавал».

 

8. Создать запрос для получения списка дисциплин, которые изучаются на всех специальностях.

 

select distinct НАЗВАНИЕ as "Предмет"

from дисциплины d join УЧЕБНЫЕ_ПЛАНЫ up1 on d.номер_дисциплины = up1.номер_дисциплины

join УЧЕБНЫЕ_ПЛАНЫ up2 on up1.номер_дисциплины = up2.номер_дисциплины

where up1.код_специальности!= up2.код_специальности;

 

Предмет

------------------------------

Математика

Комментарий:

С помощью объединения таблицы «учебные_планы» c таблицей «дисциплины» узнаем какие дисциплины изучаются на разных специальностях и далее объединяем с таблицей «дисциплины», чтобы узнать название этих дисциплин.

 

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

 

select a.ФАМИЛИЯ, a.СТИПЕНДИЯ, round(RATIO_TO_REPORT(a.СТИПЕНДИЯ) OVER (partition by a.НОМЕР_ГРУППЫ),2) AS "Доля", a.НОМЕР_ГРУППЫ

from СТУДЕНТЫ a

join СТУДЕНТЫ b

on a.НОМЕР_ГРУППЫ = b.НОМЕР_ГРУППЫ

group by a.НОМЕР_ГРУППЫ, a.ФАМИЛИЯ, a.СТИПЕНДИЯ

order by a.НОМЕР_ГРУППЫ

 

Комментарий:

С помощью объединения таблицы «студенты» с самой собой по номеру группы узнаем процентную долю стипендии студента относительно суммарной стипендии в группе

 

10. Создать запрос для получения информации о количестве полученных студентами пятерок, четверок, троек и двоек. Результат запроса должен быть представлен в виде:

Фамилия Кол-во 5 Кол-во 4 Кол-во 3 Кол-во 2 Итого
Поляков          
Старова          
Нагорный          
           
Итого:          

 


Дата добавления: 2015-08-18; просмотров: 161 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Main_Table PK User_Constraints 4 страница| Main_Table PK User_Constraints 6 страница

mybiblioteka.su - 2015-2024 год. (0.061 сек.)