ДОПОЛНИТЕЛЬНО (надо было переделать):
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 |
Напишите запрос для вывода фамилии, должности, номера отдела и названия отдела всех служащих, работающих в городе 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 |


