Главная / Базы данных /
Введение в Oracle SQL / Тест 14
Введение в Oracle SQL - тест 14
Упражнение 1:
Номер 1
Дана таблица S_EMP, в которой содержится информация о сотрудниках компании:
ID | Номер сотрудника | PRIMARY KEY |
LAST_NAME | Фамилия | NOT NULL |
TITLE | Должность | NOT NULL |
MANAGER_ID | Номер начальника | |
SALARY | Зарплата | NOT NULL |
START_DATE | Дата начала работы | NOT NULL |
Выборку трех сотрудников, которые приняты на работу последними, выполняет запрос:
Ответ:
 (1) SELECT * FROM s_emp
WHERE ROWNUM <= 3
ORDER BY start_date DESC; 
 (2) SELECT * FROM (SELECT * FROM s_emp
ORDER BY start_date DESC)
WHERE ROWNUM <= 3; 
 (3) WITH emp_1 AS (SELECT * FROM s_emp
ORDER BY start_date DESC)
SELECT * FROM emp_1
WHERE ROWNUM <= 3; 
 (4) SELECT * FROM (SELECT * FROM s_emp
ORDER BY start_date)
WHERE ROWNUM <= 3; 
Номер 2
Дана таблица S_EMP, в которой содержится информация о сотрудниках компании:
ID | Номер сотрудника | PRIMARY KEY |
LAST_NAME | Фамилия | NOT NULL |
TITLE | Должность | NOT NULL |
MANAGER_ID | Номер начальника | |
SALARY | Зарплата | NOT NULL |
START_DATE | Дата начала работы | NOT NULL |
Выборку 10 самых низкооплачиваемых сотрудников выполняет запрос:
Ответ:
 (1) SELECT * FROM s_emp
WHERE ROWNUM <= 10
ORDER BY salary; 
 (2) SELECT * FROM (SELECT * FROM s_emp
ORDER BY salary DESC)
WHERE ROWNUM <= 10; 
 (3) WITH emp_1 AS (SELECT * FROM s_emp
ORDER BY salary DESC)
SELECT * FROM emp_1
WHERE ROWNUM <= 10; 
 (4) SELECT * FROM (SELECT * FROM s_emp
ORDER BY salary)
WHERE ROWNUM <= 10; 
Номер 3
Запрос SQL:SELECT * FROM (SELECT a.*, ROWNUM rn
FROM (SELECT * FROM s_emp ORDER BY TRUNC(SYSDATE - start_date) DESC) a)
WHERE rn = 5;Результат действия запроса - выбор ...
Ответ:
 (1) пяти сотрудников с наибольшим стажем работы 
 (2) пяти сотрудников с наименьшим стажем работы 
 (3) информации о сотруднике, чей стаж работы является пятым в порядке убывания 
 (4) информации о сотруднике, чей стаж работы является пятым в порядке возрастания 
Упражнение 2:
Номер 1
В базе данных существуют таблицы S_EMP и S_DEPT:
Запрос SQL: SELECT * FROM s_dept
WHERE id NOT IN (SELECT dept_id FROM s_emp);В случае наличия пустого значения в столбце DEPT_ID, результат выполнения запроса - ...
Ответ:
 (1) список отделов, в которых не работают сотрудники 
 (2) список сотрудников, которые не работают в отделах 
 (3) сообщение об ошибке 
 (4) пустое множество 
Номер 2
В базе данных существуют таблицы S_EMP и S_DEPT:
Запрос SQL: SELECT * FROM s_dept
WHERE id NOT IN (SELECT dept_id FROM s_emp);Избежать появления пустого множества в качестве результата запроса позволит ...
Ответ:
 (1) добавление предложения WHERE dept_id IS NOT NULL
в подзапрос 
 (2) добавление предложения WHERE dept_id IS NOT NULL
в основной запрос 
 (3) изменение оператора NOT IN
на NOT EXISTS
 
 (4) изменение оператора NOT IN
на <> ANY
 
Номер 3
В базе данных существуют таблицы S_REGION и S_DEPT:
Корректным запросом получения списка регионов, в которых нет отделов с названием 'Sales', является вариант:
Ответ:
 (1) SELECT region_id FROM s_dept
WHERE name <> 'Sales'; 
 (2) SELECT id FROM s_region
WHERE id NOT IN (SELECT region_id FROM s_dept
WHERE name = 'Sales'); 
 (3) SELECT id FROM s_region
WHERE NOT EXISTS (SELECT region_id FROM s_dept
WHERE name = 'Sales'); 
 (4) SELECT id FROM s_region
MINUS
SELECT region_id FROM s_dept
WHERE name = 'Sales'; 
Упражнение 3:
Номер 1
Декартово произведение таблиц в базе данных возникает в случае ...
Ответ:
 (1) отсутствия условия соединения 
 (2) применения оператора CROSS JOIN 
 (3) применения оператора множеств UNION 
 (4) применения операторов-кванторов EXISTS и ANY 
Номер 2
Избежать нежелательного декартова произведения возможно с использованием условия соединения в предложениях:
Ответ:
 (1) WHERE 
 (2) HAVING 
 (3) RIGHT OUTER JOIN 
 (4) NATURAL INNER JOIN 
 (5) CROSS JOIN 
Номер 3
Декартово произведение таблиц представляет собой ...
Ответ:
 (1) табличное пространство, содержащее все строки всех таблиц 
 (2) виртуальную таблицу со всеми строками и столбцами таблиц 
 (3) выборку, которая содержит комбинации всех строк таблиц друг с другом 
 (4) пустое множество 
Упражнение 4:
Номер 1
Таблицы базы данных:
Запрос SQL: SELECT * FROM s_region, s_dept, s_emp, s_customer;Данные о количестве строк и столбцов таблиц:
Имя таблицы | Число столбцов | Число строк |
S_REGION | 2 | 5 |
S_DEPT | 3 | 10 |
S_EMP | 13 | 25 |
S_CUSTOMER | 12 | 10 |
Выборка, возвращенная запросом, будет включать в себя ...
Ответ:
 (1) 30 столбцов и 55 строк 
 (2) 30 столбцов и 12500 строк 
 (3) 28 столбцов и 2500 строк 
 (4) 936 столбцов и 12500 строк 
Номер 2
Таблицы базы данных:
Запрос SQL: SELECT * FROM s_dept, s_emp, s_customer;Данные о количестве строк и столбцов таблиц:
Имя таблицы | Число столбцов | Число строк |
S_REGION | 2 | 5 |
S_DEPT | 3 | 10 |
S_EMP | 13 | 25 |
S_CUSTOMER | 12 | 10 |
Выборка, возвращенная запросом, будет включать в себя ...
Ответ:
 (1) 30 столбцов и 55 строк 
 (2) 30 столбцов и 12500 строк 
 (3) 28 столбцов и 2500 строк 
 (4) 936 столбцов и 12500 строк 
Номер 3
Таблицы базы данных:
Запрос SQL: SELECT * FROM s_dept, s_emp, s_region;Данные о количестве строк и столбцов таблиц:
Имя таблицы | Число столбцов | Число строк |
S_REGION | 2 | 5 |
S_DEPT | 3 | 10 |
S_EMP | 13 | 25 |
S_CUSTOMER | 12 | 10 |
Выборка, возвращенная запросом, будет включать в себя ...
Ответ:
 (1) 18 столбцов и 1250 строк 
 (2) 30 столбцов и 12500 строк 
 (3) 28 столбцов и 2500 строк 
 (4) 936 столбцов и 12500 строк 
Упражнение 5:
Номер 1
Дана таблица:
Запросы SQL:SELECT last_name, title FROM s_emp
WHERE id NOT IN (SELECT manager_id FROM s_emp);SELECT last_name, title FROM s_emp
WHERE id NOT IN (SELECT manager_id FROM s_emp
WHERE manager_id IS NOT NULL);
Различие в результатах действия запросов:
Ответ:
 (1) отсутствует 
 (2) "Запрос 1" возвращает список сотрудников, не являющихся начальниками, "Запрос 2" возвращает список сотрудников, являющихся начальниками 
 (3) "Запрос 1" возвращает список сотрудников, являющихся начальниками, "Запрос 2" возвращает список сотрудников, не являющихся начальниками 
 (4) "Запрос 1" может возвратить пустое множество, "Запрос 2" всегда возвращает непустое множество в случае наличия значений в столбце MANAGER_ID 
Номер 2
Дана таблица S_EMP, в которой содержится информация о сотрудниках компании:
ID | Номер сотрудника | PRIMARY KEY |
LAST_NAME | Фамилия | NOT NULL |
TITLE | Должность | NOT NULL |
MANAGER_ID | Номер начальника | |
SALARY | Зарплата | NOT NULL |
START_DATE | Дата начала работы | NOT NULL |
Запросы SQL:
SELECT title, AVG(salary) avg_sal FROM s_emp
GROUP BY title;SELECT last_name, title, AVG(salary) OVER (PARTITION BY title) avg_sal
FROM s_emp;
Различие в результатах действия запросов:
Ответ:
 (1) отсутствует 
 (2) выполнение "Запроса 1" вызовет ошибку, "Запрос 2" будет выполнен безошибочно 
 (3) "Запрос 1" возвращает число строк, равное числу должностей, "Запрос 2" возвращает число строк, равное числу сотрудников 
 (4) "Запрос 1" будет выполнен безошибочно, выполнение "Запроса 2" вызовет ошибку 
Номер 3
Дана таблица S_EMP, в которой содержится информация о сотрудниках компании:
ID | Номер сотрудника | PRIMARY KEY |
LAST_NAME | Фамилия | NOT NULL |
TITLE | Должность | NOT NULL |
MANAGER_ID | Номер начальника | |
SALARY | Зарплата | NOT NULL |
START_DATE | Дата начала работы | NOT NULL |
Запрос SQL:
SELECT last_name, SUM(salary) OVER() sum_sal FROM s_emp;Во избежание ошибки выполнения запроса для получения списка фамилий сотрудников и общей суммы зарплаты, в команду следует добавить:
Ответ:
 (1) ничего 
 (2) предложение GROUP BY last_name
 
 (3) предложение PARTITION BY last_name
 
 (4) предложение PARTITION BY salary
 
Упражнение 6:
Номер 1
Верные высказывания относительно аналитических функций на примере: SELECT SUM(...) OVER () FROM ...;
Ответ:
 (1) функция возвращает одну строку и один аггрегированный результат 
 (2) функция возвращает все строки таблицы и один аггрегированный результат для каждой строки 
 (3) группой строк считаются все строки таблицы 
 (4) разбиение множества строк таблицы на подгруппы невозможно 
Номер 2
Верные высказывания относительно функций аггрегирования на примере: SELECT SUM(...) FROM ...;
Ответ:
 (1) функция возвращает одну строку и один аггрегированный результат 
 (2) функция возвращает все строки таблицы и один аггрегированный результат для каждой строки 
 (3) группой строк считаются все строки таблицы 
 (4) разбиение множества строк таблицы на подгруппы выполняется предложением PARTITION BY ...
 
Номер 3
Верные высказывания относительно аналитических функций на примере: SELECT SUM(...) OVER (PARTITION BY ...)
FROM ...;
Ответ:
 (1) функция возвращает одну строку и один аггрегированный результат 
 (2) функция возвращает все строки таблицы и один аггрегированный результат для каждой строки 
 (3) группой строк считаются все строки таблицы 
 (4) множество строк таблицы разделено на подгруппы предложением PARTITION BY ...
 
Упражнение 7:
Номер 1
Верные высказывания относительно опций аналитических функций на примере: SELECT SUM(...) OVER () FROM ...;
Ответ:
 (1) разбиение множества строк таблицы на подгруппы выполняется предложением GROUP BY 
 (2) порядок строк в подгруппах задается предложением ORDER BY
 
 (3) вывод пустых значений последними определяется предложением NULLS FIRST 
 (4) отбор результирующих групп, удовлетворяющих условию, выполняется предложением HAVING 
Номер 2
Опции PRECEDING
и FOLLOWING
аналитических функций определяют ...
Ответ:
 (1) группы аггрегирования 
 (2) границы аггрегирования 
 (3) порядок вывода пустых значений 
 (4) порядок сортировки значений в группах 
Номер 3
Первое и последнее значения интервалов агрегирования позволяют получать функции:
Ответ:
 (1) NULLS FIRST
и NULLS LAST
 
 (2) UNBOUNDED
и CURRENT ROW
 
 (3) FIRST_VALUE
и LAST_VALUE
 
 (4) ASCENDING
и DESCENDING
 
Упражнение 8:
Номер 1
В запросе с аналитической функцией, определение интервала аггрегирования "от начала группы до обрабатываемой строки" задается параметрами:
Ответ:
 (1) PRECEDING
и FOLLOWING
 
 (2) ASCENDING
и DESCENDING
 
 (3) UNBOUNDED
и CURRENT ROW
 
 (4) FIRST_VALUE
и LAST_VALUE
 
Номер 2
Дано выражение: INTERVAL '12' MONTH Эквивалентное значение имеют выражения:
Ответ:
 (1) NUMTOYMINTERVAL (1, 'YEAR')
 
 (2) NUMTODSINTERVAL (1, 'YEAR')
 
 (3) NUMTODSINTERVAL (12, 'MONTH')
 
 (4) NUMTODSINTERVAL (12, 'DAY')
 
Номер 3
Корректными параметрами выражения INTERVAL 'n' ...
являются ...
Ответ:
 (1) YEAR
 
 (2) QUARTAL
 
 (3) MONTH
 
 (4) WEEK
 
 (5) DAY
 
 (6) SECOND
 
Упражнение 9:
Номер 1
Дана таблица S_EMP, в которой содержится информация о сотрудниках компании:
ID | Номер сотрудника | PRIMARY KEY |
LAST_NAME | Фамилия | NOT NULL |
TITLE | Должность | NOT NULL |
MANAGER_ID | Номер начальника | |
SALARY | Зарплата | NOT NULL |
START_DATE | Дата начала работы | NOT NULL |
Запрос SQL:
SELECT last_name, title, start_date,
AVG(salary) OVER (ORDER BY start_date
RANGE BETWEEN INTERVAL '3' MONTH PRECEDING AND CURRENT ROW) avg_sal
FROM s_emp;Результат действия запроса - вывод фамилии, должности, даты начала работы ...
Ответ:
 (1) и зарплаты сотрудников, чей стаж составляет не более трех месяцев 
 (2) с указанием средней зарплаты сотрудников в данной должности (для каждой строки) 
 (3) и среднего значения зарплаты, которое вычисляется среди сотрудников, разница в стаже с которыми не более трех месяцев (для обрабатываемой строки) 
 (4) с указанием средней зарплаты в компании для каждой строки 
Номер 2
Запрос SQL:SELECT last_name, title, start_date,
AVG(salary) OVER (ORDER BY start_date
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) avg_sal
FROM s_emp;Команда иллюстрирует формирование интервалов аггрегирования по ...
Ответ:
 (1) строкам 
 (2) значениям 
 (3) условию 
 (4) группе 
Номер 3
Запрос SQL:SELECT last_name, title, start_date,
AVG(salary) OVER (ORDER BY start_date
RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) avg_sal
FROM s_emp;Команда иллюстрирует формирование интервалов аггрегирования по ...
Ответ:
 (1) строкам 
 (2) значениям 
 (3) условию 
 (4) группе 
Упражнение 10:
Номер 1
Дана таблица S_EMP, в которой содержится информация о сотрудниках компании:
ID | Номер сотрудника | PRIMARY KEY |
LAST_NAME | Фамилия | NOT NULL |
TITLE | Должность | NOT NULL |
DEPT_ID | Номер отдела | |
SALARY | Зарплата | NOT NULL |
START_DATE | Дата начала работы | NOT NULL |
Необходимо получить фамилию, номер отдела, должность сотрудника с указанием суммарной зарплаты для каждой должности нарастающим итогом. Решением поставленной задачи является вариант:
Ответ:
 (1) SELECT last_name, title, dept_id, SUM(salary) sum_sal
FROM s_emp
GROUP BY last_name, title, dept_id; 
 (2) SELECT last_name, title, dept_id,
SUM(salary) OVER (PARTITION BY title) sum_sal
FROM s_emp; 
 (3) SELECT last_name, title, dept_id,
SUM(salary) OVER (PARTITION BY dept_id) sum_sal
FROM s_emp; 
 (4) SELECT last_name, title, dept_id,
SUM(salary) OVER (PARTITION BY title,dept_id) sum_sal
FROM s_emp; 
Номер 2
Дана таблица S_EMP, в которой содержится информация о сотрудниках компании:
ID | Номер сотрудника | PRIMARY KEY |
LAST_NAME | Фамилия | NOT NULL |
TITLE | Должность | NOT NULL |
DEPT_ID | Номер отдела | |
SALARY | Зарплата | NOT NULL |
START_DATE | Дата начала работы | NOT NULL |
Необходимо получить фамилию, номер отдела, должность сотрудника с указанием суммарной зарплаты для каждого отдела нарастающим итогом. Решением поставленной задачи является вариант:
Ответ:
 (1) SELECT last_name, title, dept_id, SUM(salary) sum_sal
FROM s_emp
GROUP BY last_name, title, dept_id; 
 (2) SELECT last_name, title, dept_id,
SUM(salary) OVER (PARTITION BY title) sum_sal
FROM s_emp; 
 (3) SELECT last_name, title, dept_id,
SUM(salary) OVER (PARTITION BY dept_id) sum_sal
FROM s_emp; 
 (4) SELECT last_name, title, dept_id,
SUM(salary) OVER (PARTITION BY title,dept_id) sum_sal
FROM s_emp; 
Номер 3
Дана таблица S_EMP, в которой содержится информация о сотрудниках компании:
ID | Номер сотрудника | PRIMARY KEY |
LAST_NAME | Фамилия | NOT NULL |
TITLE | Должность | NOT NULL |
MANAGER_ID | Номер начальника | |
SALARY | Зарплата | NOT NULL |
START_DATE | Дата начала работы | NOT NULL |
Необходимо получить фамилию, номер отдела, должность сотрудника с указанием суммарной зарплаты для каждой должности в каждом отделе нарастающим итогом. Решением поставленной задачи является вариант:
Ответ:
 (1) SELECT last_name, title, dept_id, SUM(salary) sum_sal
FROM s_emp
GROUP BY last_name, title, dept_id; 
 (2) SELECT last_name, title, dept_id,
SUM(salary) OVER (PARTITION BY title) sum_sal
FROM s_emp; 
 (3) SELECT last_name, title, dept_id,
SUM(salary) OVER (PARTITION BY dept_id) sum_sal
FROM s_emp; 
 (4) SELECT last_name, title, dept_id,
SUM(salary) OVER (PARTITION BY title, dept_id) sum_sal
FROM s_emp; 
Упражнение 11:
Номер 1
Запрос SQL:SELECT last_name, title, dept_id,
SUM(salary) OVER (PARTITION BY title) sum_sal
FROM s_emp;Группами в данном запросе являются ...
Ответ:
 (1) все строки таблицы 
 (2) множества строк с одинаковыми значениями в столбце TITLE 
 (3) множества строк с одинаковыми значениями в столбце SALARY 
 (4) множества строк с одинаковыми значениями в столбце DEPT_ID 
Номер 2
Запрос SQL:SELECT last_name, title, dept_id,
SUM(salary) OVER (PARTITION BY title, dept_id) sum_sal
FROM s_emp;Группами в данном запросе являются ...
Ответ:
 (1) все строки таблицы 
 (2) множества строк с одинаковыми значениями в столбце TITLE 
 (3) множества строк с одинаковыми значениями в столбце DEPT_ID 
 (4) множества строк с одинаковыми комбинациями значений в столбцах TITLE и DEPT_ID 
Номер 3
Запрос SQL:SELECT manager_id, MIN(salary) min_sal, COUNT(id) emp_count
FROM s_emp
WHERE manager_id IS NOT NULL
GROUP BY manager_id
HAVING min_sal > 1000;Группами в данном запросе являются ...
Ответ:
 (1) все строки таблицы 
 (2) множества строк с одинаковыми значениями в столбце SALARY 
 (3) множества строк с одинаковыми значениями в столбце MANAGER_ID 
 (4) множества строк с одинаковыми значениями в столбце ID 
Упражнение 12:
Номер 1
Запросы со скалярными функциями аггрегирования:
Ответ:
 (1) SELECT manager_id, MIN(salary) min_sal, COUNT(id) emp_count
FROM s_emp
WHERE manager_id IS NOT NULL
GROUP BY manager_id
HAVING min_sal > 1000; 
 (2) SELECT last_name, title, dept_id,
SUM(salary) OVER (PARTITION BY title) sum_sal
FROM s_emp; 
 (3) SELECT last_name, title, start_date,
AVG(salary) OVER (ORDER BY start_date
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) avg_sal
FROM s_emp; 
 (4) SELECT id, last_name, salary + NVL(commission_pct,0)
FROM s_emp
WHERE dept_id BETWEEN 31 AND 35
ORDER BY last_name;
 
Номер 2
Запросы с аналитическими функциями аггрегирования:
Ответ:
 (1) SELECT manager_id, MIN(salary) min_sal, COUNT(id) emp_count
FROM s_emp
WHERE manager_id IS NOT NULL
GROUP BY manager_id
HAVING min_sal > 1000; 
 (2) SELECT last_name, title, dept_id,
SUM(salary) OVER (PARTITION BY title) sum_sal
FROM s_emp; 
 (3) SELECT last_name, title, start_date,
AVG(salary) OVER (ORDER BY start_date
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) avg_sal
FROM s_emp; 
 (4) SELECT id, last_name, salary + NVL(commission_pct,0)
FROM s_emp
WHERE dept_id BETWEEN 31 AND 35
ORDER BY last_name;
 
Номер 3
Верными относительно сравнения скалярных и аналитических функций аггрегирования являются следующие высказывания:
Ответ:
 (1) скалярные функции аггрегирования, в отличие от аналитических, не допускают разбиения множества строк таблицы на подгруппы 
 (2) аналитические функции, в отличие от скалярных, возвращают аггрегированный результат для каждой строки таблицы 
 (3) при отсутствии предложений группировки, для скалярных и аналитических функций группой строк являются все строки таблицы 
 (4) скалярные функции аггрегирования, в отличие от аналитических, возвращают аггрегированный результат для каждой строки таблицы