ДОПОЛНИТЕЛЬНО (надо было переделать):

SELECT  job_id "Job",

SUM (DECODE (department_id, 20, salary)) "Dept20",

SUM (DECODE (department_id, 50, salary)) "Dept50",

SUM (DECODE (department_id, 80, salary)) "Dept80",

SUM (DECODE (department_id, 90, salary)) "Dept90",

SUM (DECODE (department_id, 20, salary,

50, salary,

80, salary,

90, salary)) "Total"

FROM employees

GROUP BY job_id;

Job  Dept20  Dept50  Dept80  Dept90  Total

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

AC_ACCOUNT 

AC_MGR 

AD_ASST 

AD_PRES  24000  24000

AD_VP  34000  34000

FI_ACCOUNT 

FI_MGR 

HR_REP 

IT_PROG 

MK_MAN  13000  13000

MK_REP  6000  6000

PR_REP 

PU_CLERK 

PU_MAN 

SA_MAN  61000  61000

SA_REP  243500  243500

SH_CLERK  64300  64300

ST_CLERK  55700  55700

ST_MAN  36400  36400

19 rows selected

Доп задача 1.11

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

SELECT LPAD (last_name, LENGTH(last_name)*LENGTH(last_name)+(2*(LENGTH(last_name)-1)), last_name ||', ') "LAST_NAME"

FROM employees;

Или

SELECT RPAD (last_name, LENGTH(last_name)*LENGTH(last_name)+(2*(LENGTH(last_name)-1)), ', '||last_name) "LAST_NAME"

FROM employees;

LAST_NAME 

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

НЕ нашли? Не то? Что вы ищете?

Abel, Abel, Abel, Abel 

Ande, Ande, Ande, Ande 

Atkinson, Atkinson, Atkinson, Atkinson, Atkinson, Atkinson, Atkinson, Atkinson 

Austin, Austin, Austin, Austin, Austin, Austin 

Baer, Baer, Baer, Baer 

Baida, Baida, Baida, Baida, Baida 

Banda, Banda, Banda, Banda, Banda 

Практическое занятие 5

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

Напишите запрос для вывода названия отдела, местоположения отдела, количества служащих и среднего оклада по этому отделу. Назовите столбцы Name, Location, Number of People и Salary. Округлите средний оклад до ближайшего целого значения.

SELECT d. department_name "Name", d. location_id "Location", COUNT (employee_id) "Number of People", ROUND (AVG (salary), 0) "Salary"

FROM departments d

JOIN employees e

USING (department_id)

GROUP BY d. department_name, d. location_id;

Name  Location Number of People  Salary

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

Administration  1700  1  4400

Marketing  1800  2  9500

Sales  2500  34  8956

Purchasing  1700  6  4150

Finance  1700  6  8600

IT  1400  5  5760

Executive  1700  3  19333


Name

Location

Number of People

Salary

Accounting

1700

2

10150

Administration

1700

1

4400

Executive

1700

3

19333.33

IT

1400

3

6400

Marketing

1800

2

9500

Sales

2500

3

10033.33

Shipping

1500

5

3500


Напишите запрос для вывода фамилии, номера отдела и названия отдела для всех служащих.

SELECT e. last_name,  department_id, d. department_name

FROM departments d

RIGHT OUTER JOIN employees e

USING (department_id);

107 rows selected

LAST_NAME  DEPARTMENT_ID  DEPARTMENT_NAME 

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

Whalen  10  Administration 

Fay  20  Marketing 

Hartstein  20  Marketing 

Colmenares  30  Purchasing 

Himuro  30  Purchasing 

Tobias  30  Purchasing 

LAST_NAME

DEPARTMENT_ID

DEPARTMENT_NAME

Whalen

10

Administration

Hartstein

20

Marketing

Fay

20

Marketing

Mourgos

50

Shipping

Rajs

50

Shipping

Davies

50

Shipping

Matos

50

Shipping

Vargas

50

Shipping

……………..

19 rows selected

Выведите список всех должностей в отделе 80 (должности в списке не должны повторяться) и местоположение отдела. (в примере правильное выполнение запроса – 2 должности должно быть!)

SELECT e. job_id, d. location_id

FROM departments d

JOIN employees e

USING (department_id)

WHERE department_id = 80

GROUP BY e. job_id, d. location_id;

JOB_ID  LOCATION_ID 

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

SA_REP  2500 

SA_MAN  2500 

JOB_ID

LOCATION_ID

SA_MAN

2500

SA_REP

2500


Выведите фамилии всех служащих, содержащих букву «а» (в строчном регистре), с названиями отделов. Сохраните свою команду SQL в файле lab4_4.sql.

SELECT e. last_name, d. department_name

FROM departments d

JOIN employees e

USING (department_id)

WHERE e. last_name LIKE '%a%';

LAST_NAME  DEPARTMENT_NAME 

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

Whalen  Administration 

Fay  Marketing 

Hartstein  Marketing 

Baida  Purchasing 

Raphaely  Purchasing 

Tobias  Purchasing 

Colmenares  Purchasing 

Mavris  Human Resources 

Davies  Shipping 

Cabrio  Shipping 

LAST_NAME

DEPARTMENT_NAME

Whalen

Administration

Hartstein

Marketing

Fay

Marketing

Rajs

Shipping

Davies

Shipping

Matos

Shipping

Vargas

Shipping

Taylor

Sales

Kochhar

Executive

De Haan

Executive

rows selected.
Напишите запрос для вывода фамилии, должности, номера отдела и названия отдела всех служащих, работающих в городе Toronto.

SELECT e. last_name, e. job_id, d. department_id, d. department_name

FROM employees e

JOIN departments d

ON e. department_id = d. department_id

JOIN locations l

ON d. location_id = l. location_id

WHERE l. city IN 'Toronto';

LAST_NAME  JOB_ID  DEPARTMENT_ID DEPARTMENT_NAME 

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

Hartstein  MK_MAN  20 Marketing 

Fay  MK_REP  20 Marketing 


LAST_NAME

JOB_ID

DEPARTMENT_ID

DEPARTMENT_NAME

Hartstein

MK_MAN

20

Marketing

Fay

MK_REP

20

Marketing


Выведите фамилии и номера всех служащих вместе с фамилиями и номерами их менеджеров. Назовите столбцы EMPLOYEE, Emp#, Manager и Mgr#. Сохраните свою команду SQL в файле lab4_6.sql.

SELECT e. last_name "Employee", e. employee_id "Emp#", m. last_name "Manager", m. manager_id "Mgr#"

FROM employees e

JOIN employees m

ON (e. manager_id = m. employee_id);

Employee  Emp# Manager  Mgr#

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

Fay  202 Hartstein  100

Gietz  206 Higgins  101

Zlotkey  149 King 

Cambrault  148 King 

Errazuriz  147 King 

Employee

Emp#

Manager

Mgr#

Kochhar

101

King

100

De Haan

102

King

100

Mourgos

124

King

100

Zlotkey

149

King

100

…………….


Измените файл lab4_6.sql так, чтобы получить фамилии всех служащих, включая Кинга, который не имеют менеджера. Упорядочьте результат по возрастанию номера служащего. Сохраните изменённый запрос в текстовом файле lab4_7.sql. Выполните запрос.

SELECT e. last_name "Employee", e. employee_id "Emp#", m. last_name "Manager", m. manager_id "Mgr#"

FROM employees e

LEFT OUTER JOIN employees m

ON (e. manager_id = m. employee_id)

ORDER BY "Emp#";

Employee  Emp# Manager  Mgr#

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

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11