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

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

Main_Table PK User_Constraints 6 страница | 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 страница | Main_Table PK User_Constraints 12 страница | Main_Table PK User_Constraints 13 страница | Main_Table PK User_Constraints 14 страница | Main_Table PK User_Constraints 15 страница |


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

Сначала задаем исходную строку, затем в разделе RULES организуем цикл, для которого задаем количество итераций ITERATE (500). При это в каждой итерации цикла новая строка получается из предыдущей путем замены двойного пробела на одиночный. Так, мы в конце концов получим строчку только с одиночными пробелами, которая будет самой последней после выполнения цикла. Присвоив каждой строке свой номер с помощью 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.

 

with src as

(select 'abc,cde,ef,gh,mn,test,ss, df,fw,ewe,wwe' str

from dual)

 

select str

--соединяем столбец из значений строки в строку

from(select ltrim(sys_connect_by_path(substr,','),',') str

from(select substr, rownum rnum1, lag(rownum) over (order by substr) rnum2

--выводим столбик из значений нашей строки

from(select substr

from(select regexp_substr(str,'([[:alpha:]])*',1, level) substr

from src

connect by level < length (str))

where substr is not null

order by 1))

start with rnum2 is null

connect by prior rnum1 = rnum2

order by 1 desc) --сортируем что бы получить результирующую строку

where rownum = 1;

 

Результат:

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

 

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 src as

(

select

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

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

<ul>

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

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

</ul>' str

from dual)

select ltrim(substr)

-- с помощю регулярного выражения ищем нужные подстроки пока хотя бы одна из них не null

from(select regexp_substr(str,'.*<p class="content">.*',1,level) substr

from src

connect by regexp_substr(str,'.*<p class="content">.*',1,level) is not null

union all

select regexp_substr(str,'.*<li class="content">.*',1,level) substr

from src

connect by regexp_substr(str,'.*<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;

 

Результат:

 

London Human Resources

Seattle Accounting,Administration,Benefits,Construction,Contracting,Corporate Tax,Executive,Finance,Government Sales,IT Helpdesk,IT Support,Manufacturing,NOC,Operations,Payroll,Purchasing,Recruiting, Retail Sales,Shareholder Services,Treasury,1 Control And Credit

Munich Public Relations

South San Francisco Shipping

Toronto Marketing

Southlake IT

Oxford Sales

 

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

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

 

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

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

 

with

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

--подсчет количества должностей преподавателей на кафедре 1

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

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

--подсчет количества должностей преподавателей на кафедре 2

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

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

----подсчет общего количества должностей преподавателей на кафедрах

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

from преподаватели where должность = п.должность) as "Всего:"

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

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

select *

from aux_tbl

union all

--количество преподавателей на кафедре 1, кафедре 2 и общее число преподавателей

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

from aux_tbl;

 

Результат:

Профессор 1 0 1

Преподаватель 1 1 2

Доцент 1 2 3

Ассистент 1 1 2

Итого: 4 4 8

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

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


ВАРИАНТ 18

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

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

 

ALTER TABLE специальности

ADD(Шифр_специальности VARCHAR2(10));

 

table СПЕЦИАЛЬНОСТИ altered.

 

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

USING

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

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

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

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

WHEN MATCHED THEN

UPDATE SET s.шифр_специальности = s1.шифр_специальности;

 

4 rows merged.

 

SELECT *

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

 

КОД_СПЕЦИАЛЬНОСТИ НАЗВАНИЕ_СПЕЦИАЛЬНОСТИ Шифр_Специальности

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

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

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

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

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

4 rows selected

 

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

 

SELECT TO_CHAR(NEXT_DAY(LAST_DAY('1.08.'||(TO_CHAR(SYSDATE,'YYYY') + level - 1)) - 7, 'Понедельник') - 42,'DD.MM.YYYY')

AS "Wimbledoon start"

FROM dual

CONNECT BY level <= 100;

 

Wimbledoon start

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

16.07.2012

15.07.2013

14.07.2014

20.07.2015

18.07.2016

17.07.2017

………

15.07.2109

14.07.2110

20.07.2111

 

100 rows selected

 

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

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

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

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

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

 

CREATE TABLE stud_ex

(НОМЕР NUMBER(1),

ФИО VARCHAR2(25),

Дата DATE,

Оценка NUMBER(1),

Дисциплина VARCHAR2(25))

ORGANIZATION EXTERNAL

(TYPE oracle_loader

DEFAULT DIRECTORY stud

ACCESS PARAMETERS

(RECORDS DELIMITED BY NEWLINE

LOGFILE stud:'log111'

BADFILE stud:'bad111'

FIELDS TERMINATED BY WHITESPACE LRTRIM

(НОМЕР POSITION (1:8) CHAR,

ФИО POSITION (10:26) CHAR,

Дата POSITION(28:40) CHAR(13) date_format DATE mask "dd-mm-yyyy",

Оценка POSITION (42:52) CHAR,

Дисциплина POSITION (54:74) CHAR))

LOCATION ('marks.txt'))

REJECT LIMIT UNLIMITED;

 

SELECT *

FROM stud_ex;

 

НОМЕР ФИО ДАТА ОЦЕНКА ДИСЦИПЛИНА

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

1 Петров С.С. 12.05.08 4 Математика

2 Сомов Л.Л. 04.05.08 5 Физика

3 Амосов Д.Г. 03.05.08 4 Физика

 


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

 

undefine fdate;

undefine ldate;

 

WITH tab_d

AS (SELECT dates

FROM (SELECT TRUNC(d + rn) dates

FROM (SELECT level rn, TO_DATE('&&fdate','DD.MM.YYYY')-1 d

FROM dual

CONNECT BY level <= TO_DATE('&&ldate','DD.MM.YYYY') + 1 - TO_DATE('&fdate','DD.MM.YYYY')))

ORDER BY dates)

 

SELECT *

FROM tab_d

MINUS

SELECT DISTINCT dates

FROM tab_d INNER JOIN преподаватели p

ON tab_d.dates = p.дата_контракта AND p.дата_контракта < TO_DATE('&ldate','DD.MM.YYYY')

AND p.дата_контракта > TO_DATE('&fdate','DD.MM.YYYY');

 

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

 

SELECT TO_CHAR(Фамилия || SUBSTR(Имя,1,1) ||'.'|| SUBSTR(Отчество,1,1) ||'.') AS "ФИО", зарплата AS "Зарплата/стипендия", 'Преподаватель' AS "Статус"

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

UNION

SELECT TO_CHAR(Фамилия || SUBSTR(Имя,1,1) ||'.'|| SUBSTR(Отчество,1,1) ||'.') AS "ФИО", стипендия AS "Зарплата/стипендия", 'Студент' AS "Статус"

FROM студенты;

 

ФИО Зарплата/стипендия Статус

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

ВикулинаВ.И. 3000 Преподаватель ГриценкоВ.Н. 300 Студент

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

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

 

13 rows selected

 

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

 

SELECT фамилия, зарплата

FROM (SELECT фамилия,зарплата,

RANK () OVER(ORDER BY зарплата desc) r,

ROW_NUMBER () OVER(ORDER BY зарплата desc) rn,

DENSE_RANK () OVER(ORDER BY зарплата desc) dr

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

WHERE r=rn and dr IN (1,2,3) OR dr=3;

 

ФАМИЛИЯ ЗАРПЛАТА

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

Костыркин 4000

Викулина 3000

Абдулов 3000

 

 

7. 7. Создать запрос для определения стажа работы преподавателей. Результат вывести в формате ## лет ## мес ## дней.

 

SELECT фамилия, дата_контракта, (TRUNC(MONTHS_BETWEEN(sysdate, дата_контракта)/12)|| ' лет '||

TRUNC(MOD(MONTHS_BETWEEN(sysdate, дата_контракта), 12))|| ' месяцев '||

CASE

WHEN SUBSTR(sysdate, 0, 2) < SUBSTR(дата_контракта, 0, 2)

THEN SUBSTR(LAST_DAY(ADD_MONTHS(дата_контракта, TRUNC(MONTHS_BETWEEN(sysdate, дата_контракта)))), 0, 2) - SUBSTR(дата_контракта, 0, 2) + substr(sysdate, 0, 2)

WHEN SUBSTR(sysdate, 0, 2) >= SUBSTR(дата_контракта, 0, 2)

THEN SUBSTR(sysdate, 0, 2) - SUBSTR(дата_контракта, 0, 2)

END || ' дней') AS "RESULT"

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

 

ФАМИЛИЯ ДАТА_КОНТРАКТА RESULT

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

Костыркин 01.09.97 14 лет 9 месяцев 4 дней

Викулина 01.04.98 14 лет 2 месяцев 4 дней

Соколов 01.02.78 34 лет 4 месяцев 4 дней

Казанко 01.09.88 23 лет 9 месяцев 4 дней

Абдулов 01.06.88 24 лет 0 месяцев 4 дней

 

8. Создать представление для вывода фамилии преподавателя, должности и зарплаты. Представление должно гарантировать, что пользователь не сможет ввести отрицательное значение зарплаты и зарплату, большую 50000.

 

CREATE VIEW prepod_info

AS SELECT фамилия, должность, зарплата

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

WHERE зарплата BETWEEN 0 AND 50000

WITH CHECK OPTION;

 

view PREPOD_INFO created.

 

SELECT *

FROM prepod_info;

 

ФАМИЛИЯ ДОЛЖНОСТЬ ЗАРПЛАТА

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

Костыркин Профессор 4000

Викулина Доцент 3000

Соколов Ассистент 1500

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

Абдулов Доцент 3000

Студейкин Доцент 2500

Загарийчук Ассистент 2000

Тарасова Преподаватель 2000

 

9 rows selected

 

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

 

CREATE VIEW stud_exams

AS SELECT s.фамилия,

CASE u.оценка

WHEN 5 THEN 'отл'

WHEN 4 THEN 'хор'

WHEN 3 THEN 'удовл'

WHEN 2 THEN 'неудовл'

ELSE 'Не сдавал' END "ОЦЕНКА",

DECODE(u.оценка, NULL, 'Не сдавал', TO_CHAR(u.дата)) AS "ДАТА СДАЧИ",

DECODE (u.оценка, NULL, 'Не сдавал', TO_CHAR(p.название)) AS "НАЗВАНИЕ ПРЕДМЕТА"

FROM студенты s join группы g ON s.номер_группы = g.номер_группы

JOIN учебные_планы up ON g.код_специальности = up.код_специальности

LEFT JOIN успеваемость u ON s.номер_студента = u.номер_студента AND up.номер_дисциплины = u.номер_дисциплины

LEFT JOIN дисциплины p ON up.номер_дисциплины = p.номер_дисциплины;

 

view STUD_EXAMS created.

 

SELECT *

FROM stud_exams;

 

ФАМИЛИЯ ОЦЕНКА ДАТА СДАЧИ НАЗВАНИЕ ПРЕДМЕТА

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

Поляков отл 10.06.99 Физика

Старова отл 10.06.99 Физика

Старова отл 12.06.99 Математика

Гриценко неудовл 10.06.99 Физика

……….

Ежов Не сдавал Не сдавал Не сдавал

Улиткин Не сдавал Не сдавал Не сдавал

Устинов Не сдавал Не сдавал Не сдавал

 

9 rows selected

 

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

 

SELECT название

FROM (SELECT DISTINCT номер_дисциплины, COUNT(*) OVER(PARTITION BY номер_дисциплины) col

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

INNER JOIN дисциплины d ON tab_disc.номер_дисциплины = d.номер_дисциплины

WHERE col = (SELECT COUNT(*)

FROM (SELECT DISTINCT код_специальности

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

 

НАЗВАНИЕ

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

Математика

 

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

 

SELECT фамилия, стипендия, ROUND(100*стипендия/SUM(стипендия) OVER (PARTITION BY номер_группы),2)||'%' AS процент

FROM студенты;

 

ФАМИЛИЯ СТИПЕНДИЯ ПРОЦЕНТ

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

Поляков 200 26,67%

Старова 250 33,33%

Гриценко 300 40%

Котенко 0 0%

Нагорный 200 100%

 

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

 

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

 

WITH grades

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 grades

UNION ALL

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

FROM grades;

 

ФАМИЛИЯ КОЛ_ВО5 КОЛ_ВО4 КОЛ_ВО3 КОЛ_ВО2 ИТОГО

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

Ежов 0 0 0 0 0

Нагорный 1 0 0 0 1

Устинов 0 0 0 1 1

Гриценко 0 0 1 1 2

Усов 1 1 1 0 3

….

Поляков 1 1 0 0 2

Итого 5 2 2 2 11

 

9 rows selected

 

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

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

 

ВОЗМОЖНО, НЕВЕРНО

SELECT DISTINCT кафедра AS " ",

COUNT(*) OVER(PARTITION BY кафедра) AS "Кол_во сотрудников",

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

MAX(зарплата) OVER(PARTITION BY кафедра) AS "Максимальная зарплата"

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

UNION ALL

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

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

 

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

 

SELECT p.фамилия, p.должность, pr.фамилия AS "Фамилия начальника", pr.должность AS "Должность начальника"

FROM преподаватели p LEFT JOIN преподаватели pr ON pr.номер_преподавателя = p.подчиняется;

 

ФАМИЛИЯ ДОЛЖНОСТЬ Фамилия начальника Должность начальника

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

Викулина Доцент Костыркин Профессор

Соколов Ассистент Викулина Доцент

Казанко Преподаватель Соколов Ассистент

Тарасова Преподаватель Абдулов Доцент

Абдулов Доцент

Костыркин Профессор

 

9 rows selected

 

15. Удалить из таблицы Преподаватели всех преподавателей, которые подчиняются Викулиной (непосредственно и опосредованно).

 

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

WHERE номер_преподавателя IN (SELECT номер_преподавателя

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

WHERE фамилия!= 'Викулина'

START WITH фамилия = 'Викулина'

CONNECT BY PRIOR номер_преподавателя = подчиняется);

 

2 rows deleted.

 

SELECT *

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

 

 

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


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


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

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