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

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

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 4 страница | 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 страница

with tab

as(

select s.ФАМИЛИЯ,

count(decode(u.оценка, 5, s.номер_студента)) as Кол_во5,

count(decode(u.оценка, 4, s.номер_студента)) as Кол_во4,

count(decode(u.оценка, 3, s.номер_студента)) as Кол_во3,

count(decode(u.оценка, 2, s.номер_студента)) as Кол_во2,

count(оценка) as Итого

from студенты s left join (select distinct u1.номер, u1.оценка, u1.дата, u1.номер_студента, u1.номер_дисциплины

from успеваемость u1 join успеваемость u2

on u1.номер_студента = u2.номер_студента and u1.номер_дисциплины = u2.номер_дисциплины

minus

select distinct u1.номер, u1.оценка, u1.дата, u1.номер_студента, u1.номер_дисциплины

from успеваемость u1 join успеваемость u2

on u1.номер_студента = u2.номер_студента and u1.номер_дисциплины = u2.номер_дисциплины

where u1.оценка!= u2.оценка

union

select u1.номер, u1.оценка, u1.дата, u1.номер_студента, u1.номер_дисциплины

from успеваемость u1 join успеваемость u2

on u1.номер_дисциплины = u2.номер_дисциплины and u1.номер_студента = u2.номер_студента and u1.оценка!= u2.оценка and u1.дата > u2.дата) u

on s.номер_студента = u.номер_студента

group by s.ФАМИЛИЯ)

select * from tab

union all

select 'Итого', sum(Кол_во5), sum(Кол_во4), sum(Кол_во3), sum(Кол_во2), sum(Итого)

from tab

 

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

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

Наверняка есть более просто способ учета последней даты сдачи экзамена, но я его не нашел. Я добавил запись 1021 в таблицу успеваемость (для удобства),

в которой студент Гриценко переписал один экзамен, по которому получил 2 на 3. Для получения той таблицы успеваемости, которая нам нужна (одна запись для одного студента по рассматриваемой дисциплине) я сделал следующее:

- убрал из таблицы успеваемость все записи, где для одного студента стоит несколько оценок за 1 экзамен

- выделил те записи, которые содержат данные о последней оценке за экзамен (если оценок было больше 1)

- объединил п.1 и п.2. В итоге получили желаемую таблицу (с учетом добавления еще 1 записи).

 

11. Создать запрос для получения информации о кафедрах в виде:

  Кол-во сотрудников Средняя зарплата Максимальная зарплата
Кафедра1      
Кафедра2      
В целом:      

 

select distinct кафедра as " ",

count(*)OVER(PARTITION BY кафедра) as "Кол-во сотрудников",

avg(зарплата) OVER(PARTITION BY кафедра) as "Средняя з.п.",

min(зарплата)OVER(PARTITION BY кафедра) as "Минимальная з.п."

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

UNION all

SELECT 'В целом:', COUNT(*), AVG(зарплата), Min(зарплата)

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

 

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

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

 

12. Определить отделы, в которых суммарная зарплата сотрудников выше средней суммарной зарплаты по отделам, расположенным в том же городе. Вывести информацию о наименовании отдела, суммарной заработной плате отдела и средней заработной плате города, где расположен отдел.

 

select d.department_name, sumSal as "Сумма по отделу", avgSum "Средняя по городу"

from (select e.department_id, sum(salary) as sumSal,

(select avg(SUM(salary)) as avgSum

from employees

WHERE DEPARTMENT_ID in

(select department_id from departments d2 where

d2.location_id in (select d3.location_id

from departments d3 inner join locations l3 on d3.location_id = l3.location_id

where d3.department_id = e.department_id))

group by department_id) as avgSum

from employees E

group by e.department_id) t join departments d on t.department_id = d.department_id

having sumSal > avgSum

group by d.department_name,sumSal,avgSum;

 

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

В подзапросах вычисляем департаменты, которые находятся в одном городе и, соответственно, находим среднюю суммарную зарплату по этим отделам и суммарную зарплату по отделу.

 

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

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

 

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

д2.название "Дисциплина2", у2.дата "Дата сдачи 2"

from студенты с join успеваемость у1

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

join успеваемость у2 on у1.номер_студента=у2.номер_студента

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

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

where (у2.дата - у1.дата)>0 and (у2.дата - у1.дата)<3;

where (у2.дата - у1.дата)>= 0 and (у2.дата - у1.дата)<3 and у2.дата!= у1.дата

 

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

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

 

14. Вывести сведения о сотрудниках, которые подчиняются тем же непосредственным руководителям, что и сотрудники Rajs или Abel, работают в тех же подразделениях компании, что и указанные сотрудники.

Требуется вывести: Фамилию сотрудника, Название должности сотрудника, Фамилию непосредственного руководителя сотрудника, Название подразделения компании, где работает сотрудник. Сведения о сотрудниках Rajs и Abel выводить не нужно

Сведения должны быть отсортированы по возрастанию: по названию подразделения компании, где работает сотрудник; по фамилии сотрудника.

 

SELECT t.last_name, jobs.job_title, e.last_name manager, d.department_name

FROM

(select last_name,, job_id, manager_id, department_id

from employees

where (manager_id, department_id) in

(select manager_id, department_id

from employees

where last_name in ('Rajs', 'Abel'))

and last_name not in ('Rajs', 'Abel'))t

INNER JOIN employees e

ON t.manager_id = e.employee_id

INNER JOIN jobs

ON jobs.job_id = t.job_id

INNER JOIN departments d

ON d.department_id = t.department_id

ORDER BY d.department_name, t.last_name;

 

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

В подзапросах находим сотрудников:

- у которых начальники такие же как у Rajs или Abel;

- которые работают в тех же отделах, что и Rajs или Abel и указываем, что записи о Rajs и Abel нам в таблице не нужны. Далее получившуюся таблицу объединяем с таблицами «employees», «jobs» и «departments» для нахождения фамилий, должностей и названий подразделений соответственно.

 

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

 

WITH y as

(SELECT x, rownum rn

FROM (select distinct x

from (select '&x' x from dual)

model

dimension by (0 d)

measures (x)

rules iterate (1000) UNTIL (iteration_number=length(x[0])) (x[iteration_number+1] = replace(x[iteration_number], ' ', ' '))))

SELECT x

FROM y

WHERE rn = (SELECT max(rn) FROM y);

 

 

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

Сначала задаем исходную строку, затем в разделе RULES организуем цикл, для которого задаем количество итераций ITERATE (1000). При это в каждой итерации цикла новая строка получается из предыдущей путем замены двойного пробела на одиночный. Так, мы в конце концов получим строчку только с одиночными пробелами, которая будет самой последней после выполнения цикла. Присвоив каждой строке свой номер с помощью ROWNUM, и выдернув затем строку с самым большим номером, мы и найдем искомую.

 

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

Номер отдела Название отдела Количество сотрудников Средний оклад Фамилия Оклад Должность
  Purchasing          
        Khoo   Purchasing Clerk
        Baida   Purchasing Clerk
        Tobias   Purchasing Clerk
        Himuro   Purchasing Clerk
        Colmenares   Purchasing Clerk
  Human Resources          
        Mavris   Human Resources Representative
  Shipping   3475,56      
        Weiss   Stock Manager
        Fripp   Stock Manager
        Kaufling   Stock Manager
……     ……   …….

 

SELECT

DECODE(ddept_id, NULL, ' ', ddept_id) AS "Номер отдела",

DECODE(dept_name, NULL, ' ', dept_name) AS "Название отдела",

DECODE(col, NULL, ' ', col) AS "Количество сотрудников",

DECODE(ROUND(avgsal,2), NULL, ' ', ROUND(avgsal,2)) AS "Средний оклад",

DECODE(last_name, NULL, ' ', last_name) AS "Фамилия",

DECODE(salary, NULL, ' ', salary) AS "Оклад",

DECODE(jt, NULL, ' ', jt) AS "Должность"

FROM (SELECT ddept_id, dept_name, col, avgsal, last_name, salary, jt, edept_id

FROM (SELECT d.department_id AS ddept_id, d.department_name AS dept_name,

COUNT(e.employee_id) OVER (PARTITION BY d.department_id) AS col,

AVG(e.salary) OVER (PARTITION BY d.department_id) AS avgsal, e.last_name AS last_name,

e.department_id AS edept_id, e.salary AS salary, j.job_title AS jt

FROM employees e JOIN departments d ON e.department_id = d.department_id

JOIN jobs j ON e.job_id = j.job_id)

GROUP BY GROUPING SETS ((ddept_id, dept_name, col, avgsal),(last_name, salary, jt, edept_id))

ORDER BY ddept_id, edept_id)

ORDER BY

(CASE WHEN ddept_id IS NOT NULL

THEN ddept_id

ELSE edept_id END), ddept_id;

 

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

В самом вложенном подзапросе соединяем таблицы Employees и Departments и, применяя аналитические функции, получаем необходимую нам информацию. Выборку группируем по отделам. В следующем селекте, данные для которого выбираем из только что полученной информации, используем наборы группировок GROUPING SETS, чтобы группировать данные по определенным группам. После этого применяем функции DECODE для различных столбцов, чтобы задать им то, что они должны выводить при определенных значениях. Ну и напоследок задаем сортировку с помощью ORDER BY по номеру отдела.

 

17. В произвольной строке, состоящей из символьных элементов, разделенных запятыми, отсортировать элементы по алфавиту. Например, символьную строку

abc,cde,ef,gh,mn,test,ss, df,fw,ewe,wwe

преобразовать к виду:

abc,cde,df,ef,ewe, fw,gh,mn,ss,test,wwe.

 

SELECT wm_concat(my_string) AS "Result"

FROM (SELECT regexp_substr('abc,cde,ef,gh,mn,test,ss, df,fw,ewe,wwe', '[a-z]+', 1, level) my_string

FROM dual

CONNECT BY regexp_substr('abc,cde,ef,gh,mn,test,ss, df,fw,ewe,wwe', '[a-z]+', 1, level) IS NOT NULL

ORDER BY my_string);

Другой вариант:

SELECT MAX(LTRIM(SYS_CONNECT_BY_PATH(str, ','),',')) AS "Res"

FROM (SELECT str, ROW_NUMBER() OVER (ORDER BY str) rn

FROM (SELECT regexp_substr('abc,cde,ef,gh,mn,test,ss, df,fw,ewe,wwe','[a-z]+',1,level) str

FROM dual

CONNECT BY regexp_substr('abc,cde,ef,gh,mn,test,ss, df,fw,ewe,wwe','[a-z]+',1,level) IS NOT NULL

ORDER BY 1))

START WITH rn = 1

CONNECT BY PRIOR rn = rn-1;

 

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

Во внутреннем запросе применяем регулярное выражение regexp_substr и цикл.

Каждая итерация цикла- это нахождение очередной подстроки до знака «,». Результат итераций будет записываться в столбик. С помощью ORDER BY отсортируем этот столбик, а затем командой sys_connect_by_path соберем уже отсортированный как надо столбик в одну строку.

 

18. Выделить в HTML разметке содержимое блоков с установленными атрибутами:

· тег <p> с CSS классом content

· тег <li> с CSS классом content

Например, для разметки:

<p>Абзац 1</p>

<p class="content">Абзац 2</p>

<ul>

<li>Элемент 1</li>

<li class="content">Элемент 2</li>

</ul>

Должно быть выделено:

<p class="content">Абзац 2</p>

<li class="content">Элемент 2</li>

 

WITH tab_tag

AS (SELECT '<p>Абзац 1</p>

<p class="content">Абзац 2</p>

<ul>

<li>Элемент 1</li>

<li class="content">Элемент 2</li>

</ul>

' tag

FROM dual)

SELECT LTRIM(subtag) AS "Результат"

FROM (SELECT regexp_substr(tag, '.*<p class="content">.*', 1, level) AS subtag

FROM tab_tag

CONNECT BY regexp_substr(tag, '.*<p class="content">.*', 1, level) IS NOT NULL

UNION ALL

SELECT regexp_substr(tag, '.*<li class="content">.*', 1, level) AS subtag

FROM tab_tag

CONNECT BY regexp_substr(tag, '.*<li class="content">.*', 1, level) IS NOT NULL);

 

 

Результат

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

<p class="content">Абзац 2</p>

<li class="content">Элемент 2</li>

 

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

Сначала просто выбираем введенный нами тэг из таблицы Dual и сохраняем его как tab_tag с помощью WITH. Во внутренних запросах применяем регулярные выражения regexp_substr для искомых частей <p class="content и li class="content, при этом указывая, что до и после них могут стоять любые символы. Затем из этих «подтэгов» (subtag) обрезаем лишние пробелы и выводим результат.

 

19. Создать запрос для получения списка городов и отделов, расположенных в них. Результаты представить в виде:

Город Отдел
Seattle Accounting, Administration,Benefits, Construction,Control And Credit
Toronto Marketing
   

Список отделов в каждом городе должен быть отсортирован по алфавиту.

 

WITH tab AS

(SELECT t.*,

LAG (t.rn) OVER (PARTITION BY t.location_id ORDER BY t.rn) prev

FROM(SELECT d.location_id, l.city,d.department_name,

ROW_NUMBER () OVER (PARTITION BY l.city ORDER BY d.department_name) rn

FROM departments d INNER JOIN locations l

ON d.location_id=l.location_id

ORDER BY 2,3) t)

SELECT city город, max(dept) отделы

FROM (SELECT city, rn, LTRIM(sys_connect_by_path(department_name, ', '), ', ') As Dept

FROM tab

START WITH prev IS NULL

CONNECT BY PRIOR rn = prev AND PRIOR location_id = location_id)

GROUP BY city;

 

 

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

В первом запросе соединяем таблицы Locations и Departments для получения информации о названиях городов и отделов, а также присваиваем им номера с помощью применения аналитической функции row_number. Командой WITH сохраняем полученные значения в tab. А затем к полученным данным применяем функцию sys_connect_by_path с условиями start with и connect by prior и получаем искомый результат.

 

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

  Кафедра1 Кафедра2 Итого
Профессор      
Доцент      
…….      
Итого:      

 

with

aux_tbl as(select distinct должность,

(select count(номер_преподавателя)

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

where кафедра = 'Кафедра 1' and должность = п.должность) as "Кафедра 1",

(select count(номер_преподавателя)

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

where кафедра = 'Кафедра 2' and должность = п.должность) as "Кафедра 2",

(select count(номер_преподавателя)

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

where должность = п.должность) as "Итого:"

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

order by должность desc)

select *

from aux_tbl

union all

select 'Итого:', sum("Кафедра 1"), sum("Кафедра 2"), sum("Итого:")

from aux_tbl;

 

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

Сначала для первой кафедры находим количество каждых должностей на этой кафедре, затем делаем то же самое для второй кафедры, затем четвертым столбиком выводим количество каждых должностей для обеих кафедр. Далее объединяем получившуюся таблицу с «итоговым» селектом.

 


 

ВАРИАНТ 8

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

1. В таблицу Специальности добавить столбец Шифр Специальности. Написать и выполнить команду, позволяющую внести в этот столбец сокращенное наименование специальности, состоящее из первых букв каждого слова названия специальности.

 

ALTER TABLE СПЕЦИАЛЬНОСТИ ADD(шифр VARCHAR2(20));

MERGE INTO специальности sp1

USING (SELECT код_специальности, название_специальности,

replace(translate(initcap(название_специальности), 'йцукенгшщзхъфывапролджэячсмитьбю', '_'), '') as шифр

FROM специальности) sp2

ON (sp1.код_специальности = sp2.код_специальности)

WHEN MATCHED THEN

UPDATE SET sp1.шифр = sp2.шифр;

 

SELECT * FROM специальности;

 

Результат:

 

1 СИСТЕМЫ АВТОМАТИЧЕСКОГО УПРАВЛЕНИЯ

2 МАТЕМАТИЧЕСКОЕ ОБЕСПЕЧЕНИЕ ЭВМ

3 ВЫЧИСЛИТЕЛЬНЫЕ СЕТИ И СИСТЕМЫ

4 ЭКОНОМИКА ПРЕДПРИЯТИЙ

 

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

С помощью команды MERGE INTO в пустой столбец «шифр» добавляем сокращенное наименование специальности.

С помощью команды initcap(название_специальности) делаем первые буквы слов в названии специальности заглавными.

С помощью команды translate(initcap(название_специальности),'йцукенгшщзхъэждлорпавыфячсмитьбю',' ') заменяем все строчные буквы на пробелы.

С помощью команды replace(translate(initcap(название_специальности),'йцукенгшщзхъэждлорпавыфячсмитьбю',' '),' ','') as шифр заменяем все пробелы на пустые значения.

 

2. Создать запрос для определения дат начала проведения Уимблдонского турнира в ближайшие сто лет, зная, что турнир начинается за шесть недель до последнего понедельника августа.

 

SELECT CASE

WHEN TO_CHAR(NEXT_DAY(LAST_DAY('1.08.'||TO_CHAR(TO_DATE(sysdate),'YYYY'))-7, 'ПОНЕДЕЛЬНИК')-42, 'dd.mm.yyyy') > TO_CHAR(sysdate, 'dd.mm.yyyy')

THEN TO_CHAR(NEXT_DAY(LAST_DAY('1.08.'||(TO_CHAR(TO_DATE(sysdate),'YYYY')+level))-7, 'ПОНЕДЕЛЬНИК')-42, 'dd.mm.yyyy')

ELSE TO_CHAR(NEXT_DAY(LAST_DAY('1.08.'||(TO_CHAR(TO_DATE(sysdate),'YYYY')+level-1))-7, 'ПОНЕДЕЛЬНИК')-42, 'dd.mm.yyyy')

END Даты

FROM DUAL

CONNECT BY level <= 100;

 

 

Результат:

 

Даты

16.07.2012

15.07.2013

14.07.2014

20.07.2015

18.07.2016

17.07.2017

16.07.2018

15.07.2019

20.07.2020

19.07.2021

18.07.2022

17.07.2023

15.07.2024

14.07.2025

20.07.2026

 

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

С помощью команды '1.08.'||TO_CHAR(TO_DATE(sysdate),'YYYY') задаем 1 августа текущего года.

С помощью команды LAST_DAY('1.08.'||TO_CHAR(TO_DATE(sysdate),'YYYY'))-7 находим последний день недели и отнимаем 7 для получения понедельника.

С помощью команды NEXT_DAY(LAST_DAY('1.08.'||(TO_CHAR(TO_DATE(sysdate),'YYYY')+level))-7, 'ПОНЕДЕЛЬНИК')-42 находим последний понедельник августа и отнимаем от него 42 дня (т.е. 6 недель), чтобы узнать дату начала турнира.

С помощью CONNECT BY level <= 100 выводим результаты на ближайшие сто лет.

 

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

Номер ФИО Дата Оценка Дисциплина

1 Петров С.С. 12-05-2008 4 Математика

2 Сомов Л.Л. 4-05-2008 5 Физика

3 Амосов Д.Г. 3-05-2008 4 Физика

 

CREATE TABLE EXT_STUD

(Номер NUMBER(6),

ФИО VARCHAR2(50),

Дата DATE,

Оценка NUMBER(1),

Дисциплина VARCHAR2(50));

ORGANIZATION EXTERNAL

(TYPE ORACLE_LOADER

DEFAULT DIRECTORY student

ACCESS PARAMETERS

(RECORDS DELIMITED BY NEWLINE

BADFILE 'bad_stud.bad'

LOGFILE 'log_stud.log'

FIELDS TERMINATED BY WHITESPACE)

LOCATION ('stud.dat'))

REJECT LIMIT 100;

 

DESCRIBE EXT_STUD;

 

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

С помощью CREATE TABLE создаем нужную таблицу, после чего организовываем считывание файла: директория по умолчанию student, ACCESS PARAMETERS – параметры, по которым таблица должна быть заполнена, строки разделены переходом на новую строку с помощью RECORDS DELIMITED BY NEWLINE, файл ошибок 'bad_stud.bad', файл логов 'log_stud.log', в строке данные разделены пробелом (FIELDS TERMINATED BY WHITESPACE), разрешается 100 ошибок при занесении данных из файла (REJECT LIMIT 100).

 

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

 

SELECT date_not

FROM (SELECT d1 + level -1 date_not

FROM (SELECT TO_DATE('&dt1') d1, TO_DATE('&dt2') d2 FROM DUAL)

CONNECT BY level <= d2 - d1 + 1)

WHERE date_not NOT IN (SELECT "ДАТА_КОНТРАКТА" FROM "ПРЕПОДАВАТЕЛИ")

ORDER BY date_not;

 

Результат:

 

02.11.95

03.11.95

04.11.95

05.11.95

06.11.95

07.11.95

08.11.95

09.11.95

10.11.95

11.11.95

12.11.95

13.11.95

14.11.95

15.11.95

16.11.95

 

 

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

С помощью SELECT TO_DATE('&dt1') d1, TO_DATE('&dt2') d2 FROM DUAL вводим начальную и конечную даты.

С помощью CONNECT BY level <= d2 - d1 + 1 получаем все данные из заданного диапазона.

Из условия WHERE date_not NOT IN (SELECT "ДАТА_КОНТРАКТА" FROM "ПРЕПОДАВАТЕЛИ") получаем даты, не содержащиеся в датах приема на работу преподавателей.

 

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

 

SELECT CAST(фамилия ||' '|| SUBSTR(имя, 0, 1) ||'. '|| SUBSTR(отчество, 0, 1)||'.' AS VARCHAR2(30))ФИО,

зарплата AS "Зарплата/Стипендия", 'Преподаватель' AS "Статус"

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

UNION

SELECT фамилия ||' '|| SUBSTR(имя, 0, 1) ||'. '|| SUBSTR(отчество, 0, 1)||'.' ФИО,

стипендия AS "Зарплата/Стипендия", 'Студент' AS "Статус"

FROM студенты;

 

Результат:

Абдулов С. А. 3000 Преподаватель

Викулина В. И. 3000 Преподаватель

Гриценко В. Н. 300 Студент

Ежов А. П. 200 Студент

Загарийчук И. Д. 2000 Преподаватель

Казанко В. В. 2000 Преподаватель

Костыркин О. В. 4000 Преподаватель

Котенко А. Н. 0 Студент

Нагорный Е. В. 200 Студент

Позднякова Л. А. 2500 Преподаватель

 

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

С помощью CAST приводим тип данных VARCHAR2(30), добавляем столбец Зарплата/Стипендия и мнимый столбец Статус, содержащий значение преподавателя, затем добавляем столбец Зарплата/Стипендия и мнимый столбец Статус, содержащий значение студента и соединяем полученные таблицы.

 

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


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


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

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