Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Допы 2012.docx
Скачиваний:
11
Добавлен:
24.09.2019
Размер:
125.27 Кб
Скачать
  1. Вывести фамилии сотрудников, начальники которых работают в другой стране.В результат вывести:

1. Идентификатор сотрудника,

2. Фамилию сотрудника,

3. Название страны, где расположен офис сотрудника,

4. Идентификатор непосредственного руководителя сотрудника,

5. Фамилию непосредственного руководителя сотрудника,

6. Название страны, где расположен офис непосредственного руководителя сотрудника.

SELECT tab.employee_id,tab.last_name,tab.country_name,em AS "Manager_id",ln AS "Last_name mngr",countries.country_name as "Mngr counrty_name"

FROM

(SELECT t.employee_id,t.last_name,t.department_id,country_name,em,ln,di

FROM

(SELECT e1.employee_id,e1.last_name,e1.department_id,e2.employee_id em,e2.last_name ln,e2.department_id di

FROM employees e1 INNER JOIN employees e2

ON e1.manager_id = e2.employee_id) t

JOIN departments ON t.department_id = departments.department_id

JOIN locations ON departments.location_id = locations.location_id

JOIN countries ON locations.country_id = countries.country_id) tab

JOIN departments ON tab.di = departments.department_id

JOIN locations ON departments.location_id = locations.location_id

JOIN countries ON locations.country_id = countries.country_id

WHERE tab.country_name != countries.country_name;

  1. Для таблиц схемы, имеющих индексы вывести:

? Имя таблицы;

? Имя первого (по алфавиту) неуникального индекса;

? Количество столбцов первого неуникального индекса;

? Имя первого (по алфавиту) уникального индекса;

? Количество столбцов первого уникального индекса;

? Общее число неуникальных индексов;

? Общее число уникальных индексов.

WITH

tab1 AS (Select tn, ui, ui1, num, num1, con, con1

from

(

SELECT DISTINCT tab12.table_name tn, ui, ui1, num, num1, con, con1

FROM

((SELECT table_name

from user_indexes) tab12

RIGHT JOIN

((SELECT tn, ui, num, max_r-min_r+1 as con

FROM

((select user_indexes.table_name tn, user_indexes.index_name ui, max(column_position) num

from user_indexes join user_ind_columns on user_indexes.index_name =

user_ind_columns.index_name

where user_indexes.uniqueness = 'NONUNIQUE'

group by user_indexes.table_name, user_indexes.index_name

order by user_indexes.table_name, user_indexes.index_name)

LEFT JOIN

(SELECT tab_n, min(r) as min_r, max(r) as max_r

FROM

(SELECT tab_n, rownum r

FROM

(

select table_name tab_n

from user_indexes

where user_indexes.uniqueness = 'NONUNIQUE'))

group by tab_n)

ON tn = tab_n))

FULL OUTER JOIN

(

SELECT tn1, ui1, num1, max_r1-min_r1+1 as con1

FROM

((select user_indexes.table_name tn1, user_indexes.index_name ui1, max(column_position) num1

from user_indexes join user_ind_columns on user_indexes.index_name =

user_ind_columns.index_name

where user_indexes.uniqueness = 'UNIQUE'

group by user_indexes.table_name, user_indexes.index_name

order by user_indexes.table_name, user_indexes.index_name)

LEFT JOIN

(SELECT tab_n1, min(r1) as min_r1, max(r1) as max_r1

FROM

(SELECT tab_n1, rownum r1

FROM

(

select table_name tab_n1

from user_indexes

where user_indexes.uniqueness = 'UNIQUE'))

group by tab_n1)

ON tn1 = tab_n1))

ON tn = tn1)

ON tab12.table_name = tn OR tab12.table_name = tn1))),

t_n AS (Select tn, ui, ui11, num, num1, con, con1, r3

from

(

(Select tn, tn1, ui, ui11, num, num1, con, con1, r3

from

(

(SELECT tn, ui, ui1, num, con, rownum as r3

FROM (SELECT *

FROM tab1

ORDER BY tn, ui)

)

LEFT JOIN

(SELECT tn tn1, ui1 ui11, ui ui_1, num1, con1, rownum as r4

FROM (SELECT *

FROM tab1

ORDER BY tn, ui1))

ON r3 = r4

)))),

counts AS (select tn, MIN(r3) AS "MIN_R_NUM3"

FROM t_n

GROUP BY tn),

res_table AS (SELECT t_n.tn table_name, t_n.ui nonu_index_name, t_n.num count_nonu,

t_n.ui11 u_index_name, t_n.num1 coun_uniq, r3 - MIN_R_NUM3 +1 c_pos1, con, con1

FROM t_n INNER JOIN counts ON t_n.tn = counts.tn)

SELECT table_name as "Table Name", nonu_index_name AS "Name of First Nonuniq Index",

count_nonu AS "Count of first nonuniq", u_index_name AS "Name of First Uniq Index",

coun_uniq as "Count of first Uniq", con AS "Count of Nonuniq", con1 AS "Count of Uniq"

FROM res_table

WHERE c_pos1 = '1';

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

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

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

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

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

DROP TABLE stud_data;

CREATE TABLE stud_data

(Номер 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_data;