Лабораторная работа 1
Составьте запрос для вывода неповторяющихся должностей из таблицы EMPLOYEES.
select distinct job_id from EMPLOYEES
Employee and Title
Создайте запрос для вывода всех данных из таблицы EMPLOYEES. Разделите столбцы запятыми. Назовите столбец THE_OUTPUT select EMPLOYEE_ID||’,’|| FIRST_NAME ||’,’|| LAST_NAME ||’,’|| EMAIL ||’,’|| PHONE_NUMBER ||’,’|| HIRE_DATE ||’,’|| JOB_ID ||’,’|| SALARY ||’,’|| COMMISSION_PCT ||’,’|| MANAGER_ID ||’,’|| DEPARTMENT_ID as «THE_OUTPUT» from EMPLOYEES
Выборка данных и изменение последовательности вывода строк
Ограничение количества возвращаемых строк с помощью предложения WHERE
Сортировка строк с помощью предложения ORDER BY
Создайте запрос для вывода имени и заработной платы служащих, зарабатывающих более $12000. Сохраните команду SQL в файле lab2_1.sql. выполните запрос. SELECT first_name, salary FROM employees where salary>12000
Создайте запрос для вывода фамилии и номера отдела служащего под номером 176
SELECT last_name, department_id FROM employees where employee_id=176
DEPARTMENT_ID
Измените файл lab2_1.sql и выведите фамилии и оклады всех служащих, чей оклад не входит в диапазон от $5000 до $12000. сохраните команду SQL в файле lab2_3.sql. SELECT first_name, salary FROM employees where salary>12000 or salary<5000
Выведите фамилию, идентификатор должности и дату начала работы всех служащих, нанятых в период с 20 февраля 1998 по 1 мая 1998 г. Отсортируйте данные в порядке возрастания даты найма. SELECT last_name, job_id, hire_date FROM employees where hire_date>=’20-FEB-1998′ and hire_date<=’1-MAY-1998′ Order by hire_date
Выведите фамилию и номер отдела всех служащих из отделов 20 и 50. Отсортируйте данные по фамилиям в алфавитном порядке. SELECT LAST_NAME, DEPARTMENT_ID FROM employees where department_id in (20,50) Order by LAST_NAME
DEPARTMENT_ID
Измените файл lab2_3.sql для вывода фамилий и окладов служащих отделов 20 и 50, зарабатывающих от $5000 до $12000. Назовите столбцы Employee и Monthly Salary, соответственно. Вновь сохраните команду SQL в файле lab2_6.sql. Выполните запрос. SELECT first_name as «Employee», salary as «Monthly Salary» FROM employees where salary>5000 and salary<12000 and department_id in (20,50)
Monthly Salary
Выведите фамилию и дату найма всех служащих, нанятых в 1994 г. SELECT last_name, hire_date FROM employees where hire_date>’31-DEC-93′ and hire_date<‘1-JAN-95’
Выведите фамилии и должности всех служащих, не имеющих менеджера. SELECT last_name, job_id FROM employees where manager_id is null
Выведите фамилию, и комиссионные всех служащих, зарабатывающих комиссионные. Отсортируйте данные в порядке убывания окладов и комиссионных. SELECT LAST_NAME, SALARY, COMMISSION_PCT FROM employees where commission_pct is not null Order by commission_pct desc
Практическое занятие 2
1. Вследствие проблем финансирования отделу HR необходим отчет, в котором показываются фамилии и оклады служащих, получающих более $12,000.
Создайте запрос для вывода фамилии и номера отдела служащего под номером 176
Отделу HR необходимы данные о высокооплачиваемых и низкооплачиваемых сотрудниках. Выведите фамилии и оклады всех служащих, чей оклад не входит в диапазон от $5000 до $12000.
Создайте отчет для вывода фамилии, идентификатора должности и даты начала работы всех служащих, с фамилиями Matos и Taylor. Отсортируйте данные в порядке возрастания даты найма.
Выведите фамилию и номер отдела всех служащих из отделов 20 и 50. Отсортируйте данные по фамилиям в алфавитном порядке.
Вывести фамилии и оклады служащих отделов 20 и 50, зарабатывающих от $5000 до $12,000. Назовите столбцы Employee и Monthly Salary, соответственно.
Отделу HR необходим отчет, в котором выводятся фамилии и даты найма всех служащих, нанятых в 2004 г
Создайте отчет, содержащий фамилии и должности всех служащих, не имеющих менеджера.
Создайте отчет для вывода фамилий, окладов и комиссионные всех служащих, зарабатывающих комиссионные. Отсортируйте данные в порядке убывания окладов и комиссионных.
Сотрудникам отдела HR требуются запросы с более гибкими возможностями. Так необходим отчет, в котором показываются фамилии и оклады служащих, зарабатывающих больше некоторой величины, вводимой пользователем после приглашения. (Можете изменить запрос, созданный при выполнении задания 1.) Запишите запрос в файл lab_02_10.sql. Ниже приводятся результаты, которые получаются, когда после приглашения вводится 12000
Отделу HR необходимы отчеты по каждому менеджеру. Создайте отчет, при выполнении которого запрашивается идентификатор менеджера (manager_ID) и выводятся следующие сведения о подчиняющихся ему сотрудниках: табельный номер, фамилия и номер отдела. Должна быть предоставлена возможность отсортировать результаты на основе заданного столбца.
Ошибка в запросе
Всем здравствуйте. Помогите пожалуйста исправить ошибку в запросах. Задача:
1. Отделу HR необходим отчет, в котором выводится следующее: — фамилии и отделы всех сотрудников из таблицы EMPLOYEES, независимо от того, относятся ли они к какому-то отделу или нет; — номера и наименования всех отделов из таблицы DEPARTMENTS, независимо от того, есть ли в них сотрудники или нет.
Колонки отчета назвать "Last Name", "Dept Employye", "Dept Num", "Dept Name"
Ошибка:
При выполнении запроса возникла синтаксическая ошибка ORACLE ORA-01790: expression must have same datatype as corresponding expression
2. Вывести названия колонок и тип данных для таблицы DEPARTMENTS.
Ответ сервера:
Структура результата не соответствует требованиям задачи
УД Select. Команда select sql по дисциплине Управление данными

Напишите запрос для вывода номера каждого менеджера, имеющего подчинѐнных, и заработную плату самого низкооплачиваемого из его подчинѐнных. Исключите менеджеров для которых неизвестны их менеджеры. Исключите все группы, где минимальный оклад составляет менее $6000. Произведите упорядочение по убыванию минимальной заработной платы
SELECT manager_id, min(salary) AS min_salary
WHERE manager_id IS NOT NULL
GROUP BY manager_id
HAVING (min(salary) > 6000);
- Выборка данных из нескольких таблиц
SELECT employees.first_name, employees.last_name, departments.department_name
FROM employees LEFT JOIN departments ON departments.department_id = employees.department_id;

Напишите запрос для вывода должности (названия) и количества служащих, занимающих каждую должность
SELECT jobs.job_title, count(employees.job_id) as counts
FROM employees LEFT JOIN jobs ON employees.job_id = jobs.job_id
GROUP BY jobs.job_title;

Напишите запрос для вывода названия отдела, названия должности в этом отделе и средней заработной платы указанной должности в этом отделе. Используйте псевдонимы и упорядочение по названию отдела
SELECT departments.department_name as «Отдел», jobs.job_title as «Должность», round(avg(employees.salary)) as «Средняя ЗП»
FROM employees LEFT JOIN jobs ON employees.job_id = jobs.job_id
LEFT JOIN departments ON employees.department_id = departments.department_id
WHERE jobs.job_id is not null AND departments.department_id is not null
GROUP BY jobs.job_title, departments.department_name
ORDER BY departments.department_name;

Укажите отдел и должности в нем, для которых средняя заработная плата больше 8000. Используйте псевдонимы и упорядочение по названию отдела
SELECT departments.department_name as «Отдел», jobs.job_title as «Должность»
FROM employees LEFT JOIN jobs ON employees.job_id = jobs.job_id
LEFT JOIN departments ON employees.department_id = departments.department_id
WHERE jobs.job_id is not null AND departments.department_id is not null
GROUP BY jobs.job_title, departments.department_name
HAVING round(avg(employees.salary)) >= 8000;

Напишите запрос для вывода фамилии, должности, номера отдела и названия отдела всех служащих, работающих в городе Toronto
SELECT employees.last_name as «Фамилия», departments.department_id as «Номер отдела», departments.department_name as «Отдел», jobs.job_title as «Должность»
FROM employees LEFT JOIN jobs ON employees.job_id = jobs.job_id
LEFT JOIN departments ON employees.department_id = departments.department_id
LEFT JOIN locations ON locations.location_id = departments.location_id
WHERE jobs.job_id is not null AND departments.department_id is not null
AND locations.city = ‘Toronto’;
- Соединение таблиц с собой
SELECT t2.last_name as «Фам_начальника», t2.salary as «ЗП_начальника», t1.last_name as «Фам_служащего», t1.salary as «ЗП_служащего»
FROM employees t1 JOIN employees t2 ON t1.manager_id = t2.employee_id
WHERE t1.manager_id is not null
ORDER BY t2.last_name;

По всем служащим, нанятым раньше своих менеджеров, выведите фамилии и даты найма самих служащих, а также фамилии и даты найма их менеджеров. Назовите столбцы Employee, Date employee, Manager и Date manager. Произведите упорядочение по фамилии менеджеров
SELECT t2.last_name as «Manager», t2.hire_date as » Date manager», t1.last_name as «Employee», t1.hire_date as «Date employee»
FROM employees t1 JOIN employees t2 ON t1.manager_id = t2.employee_id
WHERE t1.manager_id is not null
AND t1.hire_date ‘Zlotkey’;

Создайте запрос для вывода номеров и фамилий всех служащих, оклад которых выше среднего. Отсортируйте данные в порядке увеличения окладов
SELECT employee_id, last_name
WHERE salary > (SELECT avg(salary) FROM employees)
ORDER BY salary;

Покажите номер отдела с наивысшей средней заработной платой и наименьший оклад работающего в нѐм сотрудника
(SELECT department_id FROM employees WHERE salary =
(SELECT max(avg(salary)) FROM employees GROUP BY(salary)))
GROUP BY department_id;

Выведите фамилию, название отдела и название города, в котором он находится, для служащих, зарабатывающих комиссионные
SElECT employees.last_name, departments.department_name, locations.city
LEFT JOIN departments ON departments.department_id = employees.department_id
LEFT JOIN locations ON departments.location_id=locations.location_id
WHERE commission_pct is not null;

Создайте запрос для вывода фамилий и дат найма всех служащих, нанятых после Davies