Учебники

Подзапросы для решения вопросов запросов

1. Какие из следующих типов являются подзапросами?

  1. Заказанные подзапросы
  2. Сгруппированные подзапросы
  3. Однорядные подзапросы
  4. Ни один из вышеперечисленных

Ответ: C. Подзапрос — это полный запрос, вложенный в предложение SELECT, FROM, HAVING или WHERE другого запроса. Подзапрос должен быть заключен в круглые скобки и содержать как минимум предложение SELECT и предложение FROM. Однорядные подзапросы и многострочные подзапросы являются основными типами подзапросов.

2. Какое из следующих утверждений верно для подзапросов?

  1. Они выполняются после выполнения основного запроса.
  2. Они выполняются параллельно основному запросу
  3. Пользователь может выполнить основной запрос, а затем, если требуется, выполнить подзапрос
  4. Они выполняются до выполнения основного запроса.

Ответ: D. Подзапрос всегда выполняется до выполнения основного запроса. Сначала выполняются подзапросы. Результат подзапроса используется в качестве входных данных для внешнего запроса.

3. Какое из следующих утверждений верно относительно результата подзапроса?

  1. Результат подзапроса обычно игнорируется при выполнении.
  2. Результат подзапроса не дает результата, он просто помогает ускорить выполнение основного запроса
  3. Результат подзапроса используется основным запросом.
  4. Результат подзапроса всегда NULL

Ответ: C. Сначала выполняются подзапросы. Результат подзапроса используется в качестве входных данных для внешнего запроса.

4. Какой из следующих пунктов обязательно используется в подзапросе?

  1. ВЫБРАТЬ
  2. ГДЕ
  3. СОРТИРОВАТЬ ПО
  4. ГРУППА ПО

Ответ: A. Подзапрос похож на любой другой запрос, который должен начинаться с предложения SELECT. Они содержатся внутри внешнего запроса.

5. Что из нижеперечисленного является способом написания подзапроса в основном запросе?

  1. С помощью JOINS
  2. Используя предложение WHERE
  3. Используя предложение GROUP BY
  4. Путем написания инструкции SELECT, встроенной в предложение другой инструкции SELECT

Ответ: D. Подзапрос — это полный запрос, вложенный в предложение SELECT, FROM, HAVING или WHERE другого запроса. Подзапрос должен быть заключен в круглые скобки и содержать как минимум предложение SELECT и предложение FROM.

6. В данных сценариях, который надлежащим образом обосновал бы использование подзапроса?

  1. Когда нам нужно подвести итоги
  2. Когда нам нужно преобразовать значения символов в значения даты или числа
  3. Когда нам нужно выбрать строки из таблицы с условием, которое зависит от данных из той же или другой таблицы.
  4. Ни один из вышеперечисленных

Ответ: C.

7. В каком из следующих пунктов можно использовать подзапрос?

  1. HAVING
  2. ГДЕ
  3. ОТ
  4. Все вышеперечисленное

Ответ: D. Подзапрос не отличается от обычного запроса. Он может использовать все первичные предложения оператора SELECT.

8. Какой из следующих однострочных операторов можно использовать для написания подзапроса?

  1. > =
  2. <
  3. знак равно
  4. Все вышеперечисленное

Ответ: D. Операторы из одной строки включают в себя =,>, <,> =, <= и <>.

9.Какой из следующих многострочных операторов можно использовать с подзапросом?

  1. В
  2. ЛЮБОЙ
  3. ВСЕ
  4. Все вышеперечисленное

Ответ: D. Многострочные подзапросы возвращают более одной строки результатов. Операторы, которые можно использовать с многострочными подзапросами, включают IN, ALL, ANY и EXISTS.

10.Что касается вывода, полученного из подзапроса?

  1. Остается в буферном кеше
  2. Он остается внутри подзапроса и может быть использован позже при необходимости
  3. Используется для завершения внешнего (основного) запроса
  4. Как А, так и С

Ответ: C. Сначала выполняются подзапросы. Результат подзапроса используется в качестве входных данных для внешнего запроса.

11. Вам нужно найти зарплату для всех сотрудников, у которых зарплата выше, чем у вице-президента компании «ABC». Какой из следующих запросов даст вам требуемый результат? (Рассмотрим структуру таблицы как дано)

SQL> DESC employees
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 FIRST_NAME			  VARCHAR2(20)
 LAST_NAME		 NOT NULL VARCHAR2(25)
 EMAIL			 NOT NULL VARCHAR2(25)
 PHONE_NUMBER			  VARCHAR2(20)
 HIRE_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
 MANAGER_ID			  NUMBER(6)
 DEPARTMENT_ID			  NUMBER(4)
  1.  SELECT first_name, last_name, salary
    FROM employees 
    WHERE salary > (SELECT salary
    FROM employees 
    WHERE job_id = 'VICE-PRESIDENT'); 
  2. SELECT first_name, last_name, salary
    FROM employees 
    WHERE salary = (SELECT salary
    FROM employees 
    WHERE job_id = 'VICE-PRESIDENT'); 
  3. SELECT first_name, last_name, salary
    FROM employees 
    WHERE job_id = 'VICE-PRESIDENT'); 
  4. Ни один из вышеперечисленных

Ответ: A. В опции ‘A’ внутренний подзапрос дает зарплату вице-президента в результате внешнего запроса.

12. Что из перечисленного относится к подзапросам?

  1. Подзапросы могут быть написаны на любой стороне оператора сравнения
  2. Скобки не являются обязательными для подзапросов
  3. Однорядные подзапросы могут использовать многострочные операторы, но наоборот невозможны
  4. Все вышеперечисленное

Ответ: A. Подзапросы могут быть размещены слева или справа от оператора сравнения в зависимости от отступа запроса и удобства использования.

13. Каков будет результат следующего запроса? (Рассмотрим данную структуру таблицы)

SQL> DESC employees
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 FIRST_NAME			  VARCHAR2(20)
 LAST_NAME		 NOT NULL VARCHAR2(25)
 EMAIL			 NOT NULL VARCHAR2(25)
 PHONE_NUMBER			  VARCHAR2(20)
 HIRE_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
 MANAGER_ID			  NUMBER(6)
 DEPARTMENT_ID			  NUMBER(4)
SELECT first_name, last_name, salary
FROM employees
WHERE salary ANY (SELECT salary FROM employees); 
  1. Он успешно выполняется, давая желаемые результаты
  2. Выполняется успешно, но не дает желаемых результатов.
  3. Выдает ошибку ORA
  4. Он успешно выполняется и дает два значения для каждой строки, полученной в наборе результатов

Ответ: C. Многострочные операторы нельзя использовать в однорядных подзапросах и наоборот.

14. Какое из следующих утверждений верно для однорядных подзапросов?

  1. Они дают один результат из основного запроса
  2. Они дают только одну строку в наборе результатов
  3. Они возвращают только одну строку из внутреннего оператора SELECT
  4. Они дают несколько строк из основного (внешнего) запроса

Ответ: C. Подзапрос из одной строки может возвращать максимум одно значение.

15.Что касается многострочных подзапросов?

  1. Они могут вернуть более одного столбца в результате внутреннего запроса
  2. Они возвращают несколько строк в основном запросе, но только один набор результатов во внутреннем запросе
  3. Они возвращают одну строку в основном запросе, но несколько строк во внутреннем подзапросе
  4. Они возвращают более одной строки из внутреннего оператора SELECT

Ответ: D. Многостолбочные подзапросы возвращают более одного столбца в своем наборе результатов, многострочные подзапросы возвращают более одной строки из внутреннего запроса.

16. Что из перечисленного верно для однорядных подзапросов?

  1. Они возвращают только один ряд
  2. Они используют однорядные операторы
  3. Оба а и Б
  4. Ни один из вышеперечисленных

Ответ: C.

17. Какие из следующих операторов нельзя использовать в подзапросе?

  1. А ТАКЖЕ
  2. <
  3. >
  4. <>

Ответ: A. Однострочные операторы включают в себя =,>, <,> =, <= и <>. Многорядные операторы, которые можно использовать с многострочными подзапросами, включают IN, ALL, ANY и EXISTS.

Осмотрите экспонат и ответьте на следующие вопросы с 18 по 21.

Стол СОТРУДНИКОВТаблица ОТДЕЛОВ

18.Вы должны выяснить имена всех сотрудников, которые принадлежат к тому же отделу, что и сотрудник «Джессика Батчер», который находится в отделе 100 и имеет идентификатор сотрудника 40. Какой из следующих запросов будет правильным?

  1. SELECT first_name, last_name
    FROM employees
    WHERE last_name = 'Butcher'
    And first_name = 'Jessica'; 
  2. SELECT first_name, last_name
    FROM employees
    WHERE department =100; 
  3. SELECT first_name, last_name
    FROM employees
    WHERE department  = (SELECT department
    FROM employees
    WHERE first_name = 'Jessica'
    AND last_name = 'Butcher'); 
  4. SELECT first_name, last_name
    FROM employees
    WHERE department  = (SELECT department
    FROM employees
    WHERE first_name = 'Jessica'
    AND last_name = 'Butcher'
    AND department = 100
    AND employee_id = 40); 

Ответ: D. «D» более подходит, чем «C», потому что он фильтрует идентификатор сотрудника, который является уникальным и гарантирует, что подзапрос вернет только одну строку. «C» может потерпеть неудачу, если есть несколько сотрудников с одинаковыми именем и фамилией.

19.Вы должны выяснить сотрудников, которые принадлежат к отделу «Джессика Батчер» и имеют зарплату, превышающую зарплату «Джессика Батчер», чей ID сотрудника равен 40. Какой из следующих запросов будет работать?

  1. SELECT first_name, last_name
    FROM employees
    WHERE last_name = 'Butcher'
    AND first_name = 'Jessica'
    AND salary > 10000; 
  2. SELECT first_name, last_name
    FROM employees
    WHERE department = 100; 
  3. SELECT first_name, last_name
    FROM employees
    WHERE department = (SELECT department
    			FROM employees
    			WHERE first_name = 'Jessica'
    			AND last_name = 'Butcher'
    			AND employee_id = 40)
    AND salary > (SELECT salary
    			 FROM employees
    			 WHERE first_name = 'Jessica'
    			 AND last_name = 'Butcher'
    			 AND employee_id = 40); 
  4. SELECT first_name, last_name
    FROM employees
    WHERE department  = (SELECT department
    			FROM employees
    			WHERE first_name = 'Jessica'
    			AND last_name = 'Butcher'
    			AND department = 100); 

Ответ: C. В один оператор SQL можно записать более одного подзапроса, чтобы добавить более одного условия.

20. На основании ответов на вопросы 18 и 19, какой тип подзапросов они используют?

  1. Подзапрос из одной строки
  2. Многострочный подзапрос
  3. Оба а и Б
  4. Встроенный подзапрос

Ответ: A. Вопросы 18 и 19, приведенные выше, демонстрируют использование подзапросов в операторе SELECT.

21. Рассмотреть два утверждения о внешних и внутренних запросах в контексте подзапросов SQL?

я. Внутренние запросы могут получать данные только из одной таблицы

II. Внутренние запросы могут получать данные из более чем одной таблицы

Какие из приведенных выше утверждений являются правдой?

  1. (я)
  2. (II)
  3. Оба (i) и (ii)
  4. Ни (я), ни (II)

Ответ: B. Подзапросы могут извлекать данные из более чем одной таблицы.

Изучите структуру таблицы следующим образом и ответьте на следующие вопросы с 22 по 27:

SQL> DESC employees
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 FIRST_NAME			  VARCHAR2(20)
 LAST_NAME		 NOT NULL VARCHAR2(25)
 EMAIL			 NOT NULL VARCHAR2(25)
 PHONE_NUMBER			  VARCHAR2(20)
 HIRE_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
 MANAGER_ID			  NUMBER(6)
 DEPARTMENT_ID			  NUMBER(4)

22. Каков будет результат следующего запроса? (Выберите наиболее подходящий ответ)

SQL> DESC employees
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 FIRST_NAME			  VARCHAR2(20)
 LAST_NAME		 NOT NULL VARCHAR2(25)
 EMAIL			 NOT NULL VARCHAR2(25)
 PHONE_NUMBER			  VARCHAR2(20)
 HIRE_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
 MANAGER_ID			  NUMBER(6)
 DEPARTMENT_ID			  NUMBER(4)
SELECT last_name, job_id, salary
FROM employees
WHERE salary = (SELECT max(salary)
FROM employees); 
  1. Он успешно выполняется и дает работникам, зарплата которых равна максимальной зарплате.
  2. Выполняется успешно, но не дает требуемых результатов.
  3. Выдает ошибку, поскольку групповая функция используется в подзапросе.
  4. Выдает ошибку, так как отдельный подзапрос должен содержать многострочный оператор.

Ответ: A. Групповая функция может использоваться внутри подзапроса.

23. Каков будет результат следующего запроса?

SELECT first_name, last_name, min(salary)
FROM employees
GROUP BY department_id 
HAVING MIN(salary) > 
		(SELECT min(salary)
		FROM employees
		WHERE department_id = 100); 
  1. Он успешно выполняется и дает имена и минимальную зарплату, превышающую 100 сотрудников всех сотрудников
  2. Выполняется успешно и дает зарплату сотрудникам в отделе 100
  3. Он успешно выполняется и дает имена и минимальные зарплаты всех сотрудников.
  4. Выдает ошибку.

Ответ: A. Предложение HAVING может использоваться в подзапросах, как показано

24. Вам нужно найти работу с максимальной средней зарплатой. Какой из следующих запросов даст вам требуемые результаты?

  1. SELECT job_id, avg(salary)
    FROM employees
    GROUP BY job_id; 
  2. SELECT job_id, avg(salary)
    FROM employees
    GROUP BY job_id
    HAVING job_id in (SELECT max(avg(salary) FROM employees); 
  3. SELECT job_id, avg(salary)
    FROM employees
    GROUP BY job_id
    HAVING max(avg(salary) in (SELECT max(avg(salary) FROM employees); 
  4. SELECT job_id, avg(salary)
    FROM employees
    GROUP BY job_id
    HAVING avg(salary) in (SELECT max(avg(salary) FROM employees GROUP BY job_id); 

Ответ: D. Подзапросы могут использовать групповые функции и предложение HAVING для ограничения групп.

25. Следующий запрос выдает ошибку. Выберите правильную причину ошибки, как указано в параметрах.

SELECT first_name, last_name
FROM employees
WHERE commission_pct  = (SELECT min(commission_pct )
          FROM employees
          GROUP BY department_id); 
  1. Предложение GROUP BY не требуется в подзапросе
  2. Функцию нельзя использовать в операторе SELECT подзапроса
  3. Подзапрос из одной строки дает несколько записей
  4. Использование оператора «=» недопустимо; оператор IN будет работать правильно

Ответ: C, D. Предложение GROUP BY дает минимальную комиссию_pct для каждого отдела, и, следовательно, множественные результаты извлекаются в основной запрос с ошибкой.

26.Просмотрите запрос, приведенный ниже. Сколько записей будет возвращено в результате запроса выше? (Предполагается, что в компании нет сотрудника с идентификатором вакансии XX)

SELECT first_name, last_name
FROM employees
WHERE salary = (SELECT salary
		FROM employees
		WHERE job_id = 'XX');
  1. 1
  2. НОЛЬ
  3. 0
  4. Запрос вызывает ошибку ORA, поскольку подзапрос недействителен.

Ответ: C. Поскольку в компании нет сотрудника с job_id «XX», подзапрос не возвращает результата, который при приравнивании к job_id в основном запросе дает 0.

27. Что произойдет, если условие WHERE в запросе, заданном в вопросе 26, будет заменено новым (WHERE job_id NOT NULL)? (Предположим, что количество записей в таблице «сотрудники» равно 14).

  1. 1
  2. 14
  3. 0
  4. Ошибка ORA

Ответ: D. При выполнении запроса возникает исключение «ORA-01427: однострочный подзапрос возвращает более одной строки».

28.Какое из следующих действительных многострочных операторов используется для подзапросов?

  1. <=
  2. ЛЮБОЙ> =
  3. знак равно
  4. > =

Ответ: B. Многострочные подзапросы возвращают более одной строки результатов. Операторы, которые можно использовать с многострочными подзапросами, включают IN, ALL, ANY и EXISTS. Многострочные операторы IN, ANY, ALL должны использоваться с одним операторы строки, как показано в варианте B.

Изучите структуру таблицы как дано. Рассмотрите вопрос, приведенный ниже, и ответьте на вопросы с 29 по 33, которые следуют

SQL> DESC employees
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 FIRST_NAME			  VARCHAR2(20)
 LAST_NAME		 NOT NULL VARCHAR2(25)
 EMAIL			 NOT NULL VARCHAR2(25)
 PHONE_NUMBER			  VARCHAR2(20)
 HIRE_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
 MANAGER_ID			  NUMBER(6)
 DEPARTMENT_ID			  NUMBER(4)
SELECT first_name, last_name, salary, commission_pct 
FROM employees 
WHERE salary < ANY  (SELECT salary
		FROM employees
		WHERE department_id  = 100)
AND department_id  <> 101; 

29.Чему оценивает ЛЮБОЙ оператор в приведенном выше запросе?

  1. ПРАВДА
  2. ЛОЖНЫЙ
  3. НОЛЬ
  4. 0

Ответ: A. Многорядные операторы возвращают логические результаты. Поскольку в отделе 100 есть результаты заработной платы, она возвращает ИСТИНА. Если есть 0 результатов, он оценивается как ЛОЖЬ.

30. Каков будет результат запроса, если мы предположим, что в отделе 100 работает только один сотрудник?

  1. Выполняется успешно, давая один результат
  2. Выполняется успешно, давая зарплаты всем сотрудникам
  3. НОЛЬ
  4. Выдает ошибку ORA

Ответ: D. Если у отдела 100 есть один результат (подзапрос из одной строки), оператор <ANY выдает ошибку, поскольку он является многострочным оператором.

31. Каков будет результат приведенного выше запроса, если оператор <ANY заменен на оператор = ANY?

  1. Oracle будет обрабатывать каждое значение зарплаты, возвращенной подзапросом, так же, как и оператор IN
  2. Там не будет никакой разницы в результатах
  3. Результаты будут отличаться
  4. Выполнение выдаст ошибку ORA

Ответ: A. = ЛЮБОЙ оператор эквивалентен оператору IN.

32. Что можно сказать об операторе <ЛЮБОЙ в приведенном выше запросе?

  1. Дает максимальную величину зарплаты
  2. Дает минимальное значение зарплаты
  3. Это означает, что он дает значения, которые меньше, чем самые высокие
  4. Ни один из вышеперечисленных

Ответ: C. Многострочный оператор <ANY вычисляет операторы «Меньше, чем максимум» подзапроса. ‘> ALL’ Больше, чем самое высокое значение, возвращаемое подзапросом. ‘<ALL’ Меньше, чем наименьшее значение, возвращаемое подзапросом. ‘<ANY’ Меньше, чем самое высокое значение, возвращаемое подзапросом. ‘<ANY’ Больше минимального значения, возвращаемого подзапросом. ‘= ANY’ Равен любому значению, возвращаемому подзапросом (так же, как IN). Строка ‘[NOT] EXISTS’ должна соответствовать значению в подзапросе

<

33. Предположим, что оператор <ЛЮБОЙ заменен на> ЛЮБОЙ. Что правда об этом операторе?

  1. Дает максимальную зарплату
  2. Он находит только максимальную зарплату из подзапроса
  3. Дает больше минимальной зарплаты
  4. Дает минимальную зарплату

Ответ: C. Многострочный оператор> ANY вычисляет операторы «Больше, чем минимум» подзапроса. ‘> ALL’ Больше, чем самое высокое значение, возвращаемое подзапросом. ‘<ALL’ Меньше, чем наименьшее значение, возвращаемое подзапросом. ‘<ANY’ Меньше, чем самое высокое значение, возвращаемое подзапросом. ‘> ANY’ Больше минимального значения, возвращаемого подзапросом. ‘= ANY’ Равен любому значению, возвращаемому подзапросом (так же, как IN). Строка ‘[NOT] EXISTS’ должна соответствовать значению в подзапросе

<

34. Изучите данную структуру таблицы и рассмотрите следующий запрос:

SQL> DESC employees
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 FIRST_NAME			  VARCHAR2(20)
 LAST_NAME		 NOT NULL VARCHAR2(25)
 EMAIL			 NOT NULL VARCHAR2(25)
 PHONE_NUMBER			  VARCHAR2(20)
 HIRE_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
 MANAGER_ID			  NUMBER(6)
 DEPARTMENT_ID			  NUMBER(4)
SELECT employee_id, first_name, last_name
FROM employees
WHERE salary IN (SELECT max(salary)
		FROM employees
		GROUP BY department_id ); 

Какое предложение WHERE среди следующего эквивалентно приведенному в приведенном выше запросе? (Предположим, что зарплаты 2500, 3000, 3500,4000)

  1. WHERE salary < ANY (SELECT max(salary)
    			FROM employees
    			GROUP BY department_id ); 
  2. WHERE salary < ALL (SELECT max(salary)
    			FROM employees
    			GROUP BY department_id ); 
  3. WHERE salary = (SELECT max(salary)
    			FROM employees
    			GROUP BY department_id ); 
  4. WHERE salary IN (2500,3000,3500,4000); 

Ответ: D. Когда используется оператор IN, Oracle обрабатывает отдельные результаты подзапроса, как показано в опции D.

Изучите структуру таблицы СОТРУДНИКОВ, приведенную ниже, и ответьте на следующие вопросы с 35 по 37.

SQL> DESC employees
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 FIRST_NAME			  VARCHAR2(20)
 LAST_NAME		 NOT NULL VARCHAR2(25)
 EMAIL			 NOT NULL VARCHAR2(25)
 PHONE_NUMBER			  VARCHAR2(20)
 HIRE_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
 MANAGER_ID			  NUMBER(6)
 DEPARTMENT_ID			  NUMBER(4)

<

35. Вам необходимо выяснить, у какого из работников зарплата меньше, чем у зарплаты для идентификатора вакансии ‘FIN_ACT’. Какой из следующих запросов даст вам требуемый результат?

  1. SELECT employee_id, first_name, last_name
    FROM employees
    WHERE salary < ALL 
    		(SELECT salary
    		 FROM employees
    		 WHERE job_id = 'FIN_ACT')
    		 AND job_id <> 'FIN_ACT'; 
  2. SELECT employee_id, first_name, last_name
    FROM employees
    WHERE salary > ALL 
    		(SELECT salary
    		FROM employees
    		WHERE job_id = 'FIN_ACT')
    		AND job_id <> 'FIN_ACT'; 
  3. SELECT employee_id, first_name, last_name
    FROM employees
    WHERE salary < ANY 
    		(SELECT salary
    		FROM employees
    		WHERE job_id = 'FIN_ACT')
    		AND job_id <> 'FIN_ACT'; 
  4. SELECT employee_id, first_name, last_name
    FROM employees
    WHERE salary = 	(SELECT salary
    		FROM employees
    		WHERE job_id = 'FIN_ACT')
    		AND job_id <> 'FIN_ACT'; 

Ответ: A. <ALL означает меньше, чем минимум. ‘> ALL’ Больше, чем самое высокое значение, возвращаемое подзапросом. ‘<ALL’ Меньше, чем наименьшее значение, возвращаемое подзапросом. ‘<ANY’ Меньше, чем самое высокое значение, возвращаемое подзапросом. ‘> ANY’ Больше минимального значения, возвращаемого подзапросом. ‘= ANY’ Равен любому значению, возвращаемому подзапросом (так же, как IN). Строка ‘[NOT] EXISTS’ должна соответствовать значению в подзапросе

36. Каков будет результат вышеупомянутого запроса (опция A в вопросе выше), если вместо <ALL заменить на> ALL?

  1. Он будет успешно выполнен, давая тот же результат.
  2. Это выдаст ошибку ORA
  3. Он будет выполнен успешно, но предоставит сведения о сотрудниках, зарплата которых меньше, чем у всех сотрудников с идентификатором job_id ‘FI_ACCOUNTANT’.
  4. Ни один из вышеперечисленных

Ответ: C. > ALL означает меньше, чем минимум. ‘> ALL’ Больше, чем самое высокое значение, возвращаемое подзапросом. ‘<ALL’ Меньше, чем наименьшее значение, возвращаемое подзапросом. ‘<ANY’ Меньше, чем самое высокое значение, возвращаемое подзапросом. ‘> ANY’ Больше минимального значения, возвращаемого подзапросом. ‘= ANY’ Равен любому значению, возвращаемому подзапросом (так же, как IN). Строка ‘[NOT] EXISTS’ должна соответствовать значению в подзапросе

37. Вам нужно найти зарплату для всех сотрудников, которые не работают в отделе 100. Какой из следующих запросов даст вам требуемый результат?

  1. SELECT employee_id, first_name, last_name
    FROM employees
    WHERE salary !=ALL 
    		(SELECT salary
    		FROM employees
    		WHERE department_id  = 100)
    		AND department_id  <> 100; 
  2. SELECT employee_id, first_name, last_name
    FROM employees
    WHERE salary NOT IN 
    		(SELECT salary
    		FROM employees
    		WHERE department_id  = 100)
    		AND department_id  <> 100; 
  3. SELECT employee_id, first_name, last_name
    FROM employees
    WHERE salary NOT ALL 
    		(SELECT salary
    		FROM employees
    		WHERE department_id  = 100)
    		AND department_id  <> 100; 
  4. SELECT employee_id, first_name, last_name
    FROM employees
    WHERE salary != (SELECT salary
    		FROM employees
    		WHERE department_id  = 100)
    		AND department_id  <> 100; 

Ответ: C. NOT может использоваться с многорядными операторами IN, ANY и ALL.

Изучите структуру таблицы как дано. Рассмотрите следующий запрос и ответьте на вопросы 38 и 39, которые следуют. Вам нужно найти сотрудников, у которых нет подчиненных, подчиняющихся им. (Предположим, что есть 0 ожидаемых результатов)

SQL> DESC employees
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 FIRST_NAME			  VARCHAR2(20)
 LAST_NAME		 NOT NULL VARCHAR2(25)
 EMAIL			 NOT NULL VARCHAR2(25)
 PHONE_NUMBER			  VARCHAR2(20)
 HIRE_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
 MANAGER_ID			  NUMBER(6)
 DEPARTMENT_ID			  NUMBER(4)
SELECT first_name, last_name 
FROM employees
WHERE employee_id NOT IN 
		(SELECT manager_id
		FROM employees); 

38. Каков будет результат запроса, приведенного выше?

  1. 10
  2. НОЛЬ
  3. Ошибка ORA
  4. 0

Ответ: D. Одно из значений во внутреннем подзапросе — NULL (все сотрудники не являются менеджерами!)

39.Какое из следующих предложений WHERE должно быть добавлено / изменено к вышеуказанному запросу, чтобы получить ожидаемые результаты?

  1. WHERE employee_id != (SELECT manager_id FROM employees); 
  2. WHERE employee_id IN (SELECT manager_id FROM employees);  
  3. WHERE employee_id <>ALL (SELECT manager_id FROM employees); 
  4. WHERE employee_id NOT IN (SELECT manager_id
    			FROM employees
    			WHERE manager_id is NOT NULL); 

Ответ: B, D. Если подзапрос может иметь значения NULL, не используйте оператор NOT IN или, если он используется, измените подзапрос с помощью дополнительного предложения WHERE (опция D)

40.Что в целом относится к подзапросам?

  1. Подзапросы должны выполняться отдельно от основных запросов
  2. Подзапросы могут выполняться по желанию пользователя, они не связаны с основным выполнением запроса.
  3. Подзапросы равны двум последовательным запросам, где результаты внутреннего запроса используются основным запросом
  4. Все вышеперечисленное

Ответ: C.

41. Что из следующего верно для подзапросов?

  1. Подзапрос может вернуть 0 или более строк
  2. Подзапрос может использоваться только в предложении SELECT
  3. Вложенность подзапросов ограничена 2 уровнями
  4. Групповые функции нельзя использовать в подзапросах

Ответ: A. Подзапрос — это полный запрос, вложенный в предложение SELECT, FROM, HAVING или WHERE другого запроса. Подзапрос должен быть заключен в круглые скобки и содержать как минимум SELECT и предложение FROM. Однорядный подзапрос может вернуть максимум одно значение. Подзапросы с несколькими столбцами возвращают более одного столбца во внешний запрос.

42. Изучите структуру таблицы как дано.

SQL> DESC employees
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 FIRST_NAME			  VARCHAR2(20)
 LAST_NAME		 NOT NULL VARCHAR2(25)
 EMAIL			 NOT NULL VARCHAR2(25)
 PHONE_NUMBER			  VARCHAR2(20)
 HIRE_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
 MANAGER_ID			  NUMBER(6)
 DEPARTMENT_ID			  NUMBER(4)

Рассмотрим следующий запрос.

SELECT first_name, last_name 
FROM employees
WHERE employee_id NOT IN 
		(SELECT manager_id, hire_date
		FROM employees 
		WHERE manager_id is not null); 

Этот запрос возвращает ошибку. В чем причина ошибки?

  1. Используемый оператор NOT IN недопустим
  2. Предложение WHERE в подзапросе написано неправильно
  3. Столбец в предложении SELECT подзапроса должен быть только один, если в основном запросе используется неравенство
  4. Подзапрос использует ту же таблицу, что и основной запрос

Ответ: C. Столбцы, выбранные в подзапросе, должны быть такими же, как на другой стороне оператора сравнения. Любое неравенство типа данных или количества столбцов может привести к ошибке ORA.

43. Должен быть извлечен отчет, в котором указаны все отделы, в которых назначен один или несколько сотрудников. Какой из следующих запросов даст требуемый результат? (Рассмотрим структуру таблицы как дано)

SQL> DESC employees
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 FIRST_NAME			  VARCHAR2(20)
 LAST_NAME		 NOT NULL VARCHAR2(25)
 EMAIL			 NOT NULL VARCHAR2(25)
 PHONE_NUMBER			  VARCHAR2(20)
 HIRE_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
 MANAGER_ID			  NUMBER(6)
 DEPARTMENT_ID			  NUMBER(4)
  1. SELECT department_name
    FROM employees
    WHERE department_id  IN (SELECT distinct (department_id )
    			FROM employees); 
  2. SELECT department_name
    FROM employees
    WHERE department_id  ANY (SELECT distinct (department_id )
    			FROM employees); 
  3. SELECT department_name
    FROM employees
    WHERE department_id  < ANY (SELECT distinct (department_id )
    			FROM employees); 
  4. SELECT department_name
    FROM employees
    WHERE department_id  = ANY (SELECT distinct (department_id )
    			FROM employees); 

Ответ: А, Д.

44. Каков максимальный уровень вложенных запросов, разрешенных в Oracle в одном операторе SQL?

  1. 20
  2. 50
  3. неограниченный
  4. 255

Ответ: D. Oracle поддерживает вложенность запросов до 255 уровней.

45. Какой должна быть лучшая практика, когда мы знаем, какие значения нам нужно передать основному запросу в запросах Oracle?

  1. Использование GROUP BY
  2. Использование подзапросов
  3. Использование HAVING
  4. Ни один из вышеперечисленных

Ответ: D. Может стать возможным, что подзапросы дают нулевой результат, что приводит к 0 строкам в основном результате; следовательно, хорошей практикой является их использование, только если мы знаем, какие ценности нам нужны.

Изучите структуру таблицы как дано. Рассмотрите следующий запрос и ответьте на следующие вопросы 46 и 47:

SQL> DESC employees
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 FIRST_NAME			  VARCHAR2(20)
 LAST_NAME		 NOT NULL VARCHAR2(25)
 EMAIL			 NOT NULL VARCHAR2(25)
 PHONE_NUMBER			  VARCHAR2(20)
 HIRE_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
 MANAGER_ID			  NUMBER(6)
 DEPARTMENT_ID			  NUMBER(4)
SELECT employee_id, first_name, last_name, job_id
FROM employees
WHERE job_id = (SELECT job_id FROM employees); 

46. ​​Вам нужно найти всех сотрудников, чей идентификатор работы совпадает с идентификатором сотрудника с идентификатором 210. Какие из следующих пунктов WHERE вы бы добавили / изменили для достижения этого результата? (Рассмотрим структуру таблицы как дано

  1. WHERE job_id = (SELECT job_id FROM employees WHERE employee_id = 210); 
  2. WHERE job_id IN (SELECT job_id FROM employees WHERE employee_id = 210); 
  3. WHERE job_id > (SELECT job_id FROM employees WHERE employee_id = 210); 
  4. WHERE job_id >= (SELECT job_id FROM employees WHERE employee_id = 210); 

Ответ: А.

47. Предположим, что вы изменили предложение WHERE, как указано в варианте A в вопросе 46, следующим образом.

WHERE job_id = (SELECT job_id FROM employees WHERE employee_id < 210); 

Каков будет результат этого изменения?

  1. Результаты будут такими же
  2. Ошибка ORA, брошенная при исполнении
  3. Результаты будут отличаться
  4. Запрос будет выполнен успешно, давая 0 строк.

Ответ: B. Подзапрос дает более одного результата для данного изменения, и поэтому многострочный оператор должен заменить «=» в основном запросе, приведенном выше.

48. Изучите структуру таблиц, как показано на рисунке ниже.

Стол СОТРУДНИКОВСтол GRADE

Вам необходимо отобразить имена сотрудников, которые имеют самую высокую зарплату. Какой из следующих операторов SQL будет правильным?

  1. SELECT first_name, last_name, grade
    FROM employees, grade
    WHERE (SELECT max (salary) FROM employees) BETWEEN losal and hisal; 
  2. SELECT first_name, last_name, grade
    FROM employees, grade
    WHERE (SELECT max (salary) FROM employees) BETWEEN losal and hisal
    AND salary BETWEEN losal and hisal; 
  3. SELECT first_name, last_name, grade
    FROM employees, grade
    WHERE salary = (SELECT max (salary) FROM employees) 
    AND salary BETWEEN losal and hisal; 
  4. SELECT first_name, last_name, grade
    FROM employees, grade
    WHERE salary IN (SELECT max (salary) FROM employees) 
    AND max(salary) BETWEEN losal and hisal; 

Ответ: B, C. Подзапросы могут быть написаны с любой стороны от оператора

49. Что такое подзапрос в предложении FROM оператора SQL? (Выберите наиболее подходящий ответ)

  1. Подзапрос из одной строки
  2. Многострочный подзапрос
  3. Встроенный вид
  4. Связанный подзапрос

Ответ: C. Если подзапрос появляется в предложении FROM операторов SELECT, он формирует встроенное представление. Oracle внутренне создает временное представление для выполнения запроса.

50. Какое максимальное количество уровней вложенности разрешено в подзапросе типа встроенного представления?

  1. 255
  2. 300
  3. 216
  4. неограниченный

Ответ: D. Поскольку нет ограничения на количество таблиц, которые могут быть объединены, нет ограничения на количество встроенных представлений в запросе.

51.Что верно в отношении сопутствующих подзапросов?

  1. Таблицы, используемые в основном запросе, также используются в связанном подзапросе.
  2. Подзапросы, которые ссылаются на столбец, используемый в основном запросе, называются сопутствующими подзапросами.
  3. Подзапросы, которые пишутся без скобок, называются подзапросами
  4. Подзапросы, которые в обязательном порядке используют таблицы, отличные от тех, которые используются в основном запросе, называются подзапросами, относящимися друг к другу.

Ответ: B. Коррелированный подзапрос ссылается на столбец во внешнем запросе и выполняет подзапрос один раз для каждой строки во внешнем запросе, в то время как Некоррелированный подзапрос сначала выполняет подзапрос и передает значение во внешний запрос.

52.Какое из следующих утверждений не может быть родительским утверждением для подзапроса?

  1. ВЫБРАТЬ
  2. ГРУППА ПО
  3. ОБНОВИТЬ
  4. УДАЛЯТЬ

Ответ: B. Остальные параметры могут быть в основном запросе (родительском запросе) подзапроса.

53.Что верно в отношении сопутствующего подзапроса?

  1. Оценивается только один раз для родительского запроса
  2. Оценивается только трижды для родительского запроса
  3. Он оценивается один раз для каждой строки, обработанной родительским подзапросом
  4. Все вышеперечисленное

Ответ: C. Коррелированный подзапрос ссылается на столбец во внешнем запросе и выполняет подзапрос один раз для каждой строки во внешнем запросе, а оператор EXISTS используется для проверки наличия связи или ссылки.

54. Изучите данную структуру таблицы. Вам необходимо написать запрос, который возвращает имена сотрудников, чьи зарплаты превышают среднюю зарплату в соответствующем отделе. Что из следующего будет работать? (Выберите наиболее подходящий ответ)

SQL> DESC employees
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 FIRST_NAME			  VARCHAR2(20)
 LAST_NAME		 NOT NULL VARCHAR2(25)
 EMAIL			 NOT NULL VARCHAR2(25)
 PHONE_NUMBER			  VARCHAR2(20)
 HIRE_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
 MANAGER_ID			  NUMBER(6)
 DEPARTMENT_ID			  NUMBER(4)
  1. SELECT employee_id, first_name, last_name
    FROM employees e
    WHERE salary > (SELECT avg (salary)
    		FROM employees
    		WHERE e.department_id  = department_id )
    		ORDER BY department_id ; 
  2. SELECT employee_id, first_name, last_name
    FROM employees e
    WHERE salary > ANY (SELECT avg(salary)
    		FROM employees
    		WHERE e.department_id  = department_id )
    		ORDER BY department_id ; 
  3. SELECT employee_id, first_name, last_name
    FROM employees e
    WHERE salary = (SELECT avg(salary)
    		FROM employees
    		WHERE e.department_id  = department_id )
    		ORDER BY department_id ; 
  4. SELECT employee_id, first_name, last_name
    FROM employees e
    WHERE salary < ANY  (SELECT avg(salary)
    		FROM employees
    		WHERE e.department_id  = department_id )
    		ORDER BY department_id ; 

Ответ: A. Здесь ID отдела получен, используется для оценки родительского запроса, и если зарплата в этой строке больше, чем средняя зарплата в отделах этой строки, возвращается этот результат.

55. Изучите данную структуру таблицы. Какой из следующих запросов отобразит дубликаты записей в таблице СОТРУДНИКИ?

SQL> DESC employees
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 FIRST_NAME			  VARCHAR2(20)
 LAST_NAME		 NOT NULL VARCHAR2(25)
 EMAIL			 NOT NULL VARCHAR2(25)
 PHONE_NUMBER			  VARCHAR2(20)
 HIRE_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
 MANAGER_ID			  NUMBER(6)
 DEPARTMENT_ID			  NUMBER(4)
  1. SELECT *
    FROM employees E
    WHERE exists (SELECT 1 FROM employees E1
    		WHERE E.employee_id = E1.employee_id); 
  2. SELECT *
    FROM employees E
    WHERE exists (SELECT 1 FROM employees E1
    		WHERE E.employee_id = E1.employee_id
    		AND E.ROWID < E1.ROWID); 
  3. SELECT *
    FROM employees E
    WHERE exists (SELECT 1 FROM employees E1
    		WHERE E.ROWID < E1.ROWID); 
  4. SELECT *
    FROM employees E
    WHERE = ANY (SELECT 1 FROM employees E1
    		WHERE E.employee_id = E1.employee_id
    		And E.ROWID < E1.ROWID); 

Ответ: A. Коррелированный подзапрос ссылается на столбец во внешнем запросе и выполняет подзапрос один раз для каждой строки во внешнем запросе, а оператор EXISTS используется для проверки наличия связи или ссылки. Его можно использовать для поиска повторяющихся строк в таблице, где двойственность определяется столбцом или набором столбцов.

Изучите структуры таблиц DEPARTMENTS и СОТРУДНИКОВ и ответьте на следующие вопросы 56 и 57.

SQL> DESC employees
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 FIRST_NAME			  VARCHAR2(20)
 LAST_NAME		 NOT NULL VARCHAR2(25)
 EMAIL			 NOT NULL VARCHAR2(25)
 PHONE_NUMBER			  VARCHAR2(20)
 HIRE_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
 MANAGER_ID			  NUMBER(6)
 DEPARTMENT_ID			  NUMBER(4)
SQL> DESC departments
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 DEPARTMENT_ID		 NOT NULL NUMBER(4)
 DEPARTMENT_NAME	 NOT NULL VARCHAR2(30)
 MANAGER_ID			  NUMBER(6)
 LOCATION_ID			  NUMBER(4)

56.Какой из следующих запросов будет отображать системную дату и количество записей в таблице DEPARTMENTS и EMPLOYEES?

  1. SELECT sysdate,
    		(SELECT * FROM departments) dept_count,
    		(SELECT * FROM employees) emp_count
    FROM DUAL; 
  2. SELECT sysdate,
    		(SELECT count(*) FROM departments) dept_count,
    		(SELECT count(*) FROM employees) emp_count
    FROM DUAL
    GROUP BY department_id ; 
  3. SELECT sysdate,
    		(SELECT * FROM departments) dept_count,
    		(SELECT * FROM employees) emp_count
    FROM DUAL
    GROUP BY employee_id; 
  4. SELECT sysdate,
    		(SELECT count(*) FROM departments) dept_count,
    		(SELECT count(*) FROM employees) emp_count
    FROM DUAL; 

Ответ: D. Однострочный подзапрос также может быть вложен в предложение SELECT внешнего запроса. В этом случае значение, возвращаемое подзапросом, доступно для каждой строки вывода, сгенерированной внешним запросом. Как правило, этот метод используется для выполнения вычислений со значением, полученным из подзапроса.

57. Какой из следующих запросов скажет, является ли данный сотрудник руководителем в компании «XYZ»?

  1. SELECT employee_id, manager_id
    FROM employees A
    WHERE employee_id ANY (SELECT manager_id from employees B)
    ORDER BY manager_id desc; 
  2. SELECT employee_id, manager_id
    FROM employees A
    WHERE employee_id < ALL (SELECT manager_id from employees B)
  3. SELECT employee_id, manager_id
    FROM employees A
    WHERE employee_id IN (SELECT manager_id from employees B)
    ORDER BY manager_id desc; 
  4. SELECT employee_id, manager_id
    FROM employees A
    WHERE employee_id in (SELECT manager_id from employees B)
    GROUP BY department_id ; 

Ответ: C.

Осмотрите экспонат и ответьте на следующий вопрос 58:

Стол СОТРУДНИКОВТаблица ОТДЕЛОВТаблица МЕСТО

58. Какой из следующих запросов даст вам максимальную зарплату сотрудника в конкретном городе?

  1. SELECT max (salary), city
    FROM
    (SELECT salary, department_id , loc, city
    FROM employees natural join departments natural join locations); 
  2. SELECT salary, city
    FROM
    (SELECT salary, department_id , loc, city
    FROM employees natural join departments natural join locations); 
  3. SELECT max (salary), city
    FROM
    (SELECT salary, department_id , loc, city
    FROM employees natural join departments natural join locations)
    GROUP BY city; 
  4. SELECT max (avg(salary)), city
    FROM
    (SELECT salary, department_id , loc, city
    FROM employees natural join departments natural join locations); 

Ответ: C. Когда подзапрос с несколькими столбцами используется в предложении FROM внешнего запроса, он создает временную таблицу, на которую могут ссылаться другие предложения внешнего запроса. Эта временная таблица более формально называется встроенным представлением. Результаты подзапроса обрабатываются как любая другая таблица в предложении FROM. Если временная таблица содержит сгруппированные данные, сгруппированные подмножества обрабатываются как отдельные строки данных в таблице.

Изучите структуру таблицы, как указано ниже.

SQL> DESC employees
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 FIRST_NAME			  VARCHAR2(20)
 LAST_NAME		 NOT NULL VARCHAR2(25)
 EMAIL			 NOT NULL VARCHAR2(25)
 PHONE_NUMBER			  VARCHAR2(20)
 HIRE_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
 MANAGER_ID			  NUMBER(6)
 DEPARTMENT_ID			  NUMBER(4)
SQL> DESC departments
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 DEPARTMENT_ID		 NOT NULL NUMBER(4)
 DEPARTMENT_NAME	 NOT NULL VARCHAR2(30)
 MANAGER_ID			  NUMBER(6)
 LOCATION_ID			  NUMBER(4)

Рассмотрите следующий запрос и ответьте на вопросы, которые следуют с 59 по 62.

SELECT  department_name
FROM departments d INNER JOIN employees e
ON (d.employee_id = e.employee_id)
GROUP BY department_name; 

59. Какой из следующих запросов может заменить вышеуказанный запрос с помощью подзапросов, дающих тот же результат?

  1. SELECT department_name
    FROM departments
    WHERE department_id  = ANY (SELECT department_id  FROM employees); 
  2. SELECT department_name
    FROM departments
    WHERE department_id  IN (SELECT distinct(department_id ) FROM employees); 
  3. SELECT department_name
    FROM departments
    WHERE department_id  = (SELECT distinct(department_id ) FROM employees); 
  4. SELECT department_name
    FROM departments
    WHERE department_id  ANY (SELECT distinct(department_id ) FROM employees); 

Ответ: А, Б.

60. Предположим, что подзапрос, как показано в приведенном выше запросе, модифицирован следующим образом.

(SELECT distinct (department_id ) FROM employees ORDER BY department_id ); 

Каков будет результат в результате этого изменения? (Выберите наиболее подходящий ответ)

  1. Он упорядочит значение Department_id, извлеченное из подзапроса, и отобразит их в порядке возрастания
  2. Он выдаст ошибку ORA, поскольку предложение ORDER BY должно сопровождаться предложением GROUP BY.
  3. Он выдаст ошибку ORA, потому что предложение ORDER BY не может быть использовано внутри подзапроса.
  4. Это будет успешно выполнено.

Ответ: C. Подзапрос, кроме одного в предложении FROM, не может иметь предложение ORDER BY. Если вам нужно отобразить вывод в определенном порядке, включите предложение ORDER BY в качестве последнего предложения внешнего запроса.

61. Предположим, что приведенный выше запрос изменен как приведенный ниже.

SELECT department_name
FROM departments
WHERE department_id  = ANY (SELECT department_id  FROM employees)
ORDER BY department_id  desc; 

Каков будет результат в результате этого изменения? (Выберите наиболее подходящий ответ)

  1. Он упорядочит значение Department_id, извлеченное из подзапроса, и отобразит их в порядке возрастания
  2. Он упорядочит значение Department_id, извлеченное из подзапроса, и отобразит их в порядке убывания.
  3. Он выдаст ошибку ORA, потому что предложение ORDER BY не может быть использовано внутри подзапроса.
  4. Ни один из вышеперечисленных

Ответ: D. Подзапрос, кроме одного в предложении FROM, не может иметь предложение ORDER BY. Если вам нужно отобразить вывод в определенном порядке, включите предложение ORDER BY в качестве последнего предложения внешнего запроса.

62.Какое из следующего можно использовать для упорядочения результатов в подзапросе?

  1. СОРТИРОВАТЬ ПО
  2. HAVING
  3. ГРУППА ПО
  4. Все вышеперечисленное

Ответ: C. По умолчанию предложение GROUP BY выполняет упорядочение в подзапросе.

Осмотрите экспонат ниже и ответьте на вопросы с 63 по 65, которые следуют:

Стол АУДИТ

Рассмотрим следующий запрос:

SELECT au_id, au_title
FROM audit
WHERE au_details in (SELECT au_details
		  FROM audit
		  WHERE au_title like 'S%')
		  ORDER BY au_title; 

63. Каков будет результат запроса, приведенного выше?

  1. Это дает все AU_ID и AU_TITLEs, начинающиеся с буквы ‘S%’
  2. Это дает все AU_ID и AU_TITLE, начинающиеся с буквы ‘S%’, упорядоченные по заголовкам в порядке возрастания
  3. Выдает ошибку ORA
  4. Возвращает значение 0

Ответ: C. Столбец с CLOB, BLOB, NCLOB или ARRAY нельзя использовать в подзапросе.

64. Каков будет результат следующего запроса?

SELECT *
FROM employees
WHERE salary BETWEEN (SELECT max(salary)
			FROM employees
			WHERE department_id  = 100) 
AND (SELECT min(salary) FROM employees where department_id  = 100); 

Этот запрос возвращает ошибку. В чем причина ошибки?

  1. Предложение GROUP BY должно использоваться как функция MAX
  2. Оба подзапроса не могут использовать один и тот же идентификатор отдела в одном и том же внешнем запросе.
  3. Оператор МЕЖДУ нельзя использовать с подзапросом
  4. В предложении SELECT должны быть указаны столбцы, а не звездочка (*)

Ответ: C. Оператор BETWEEN может использоваться внутри подзапроса, но не с подзапросом.

65.Что верно при использовании NOT IN при написании запросов с подзапросами в них?

  1. NOT IN игнорирует все значения NULL и выдает только значения NOT NULL
  2. NOT IN помещает все значения NULL последними и дает NOT NULL для отображения первым
  3. NOT IN не должен использоваться, если в наборе результатов ожидается значение NULL
  4. NOT IN — это просто отрицание оператора IN и может быть изменено без предупреждения.

Ответ: C. SQL обрабатывает значения NULL по-другому, и поэтому рекомендуется избегать NOT IN, если набор результатов может содержать NULL.

Рассмотрим следующие структуры таблиц и ответьте на следующие вопросы с 66 по 72:

Стол СОТРУДНИКОВТаблица ОТДЕЛОВ

66. Вам необходимо выяснить названия и идентификаторы отделов, в которых наименьшая зарплата превышает самую высокую зарплату в отделе 10. Какой из следующих запросов даст требуемый результат.

  1. SELECT department_id , min(salary)
    FROM employees
    GROUP BY department_id 
    HAVING min(salary) >
    		(
    		select max(salary)
    		FROM employees
    		where department_id  = 10
    		)
  2. SELECT department_id , min(salary)
    FROM employees
    GROUP BY department_id 
    HAVING min(salary) > ANY
    		(
    		select max(salary)
    		FROM employees
    		)
  3. SELECT department_id , min(salary)
    FROM employees
    HAVING max(salary) < ANY
    		(
    		select min(salary)
    		FROM employees
    		where department_id  = 10
    		)
  4. SELECT department_id , min(salary)
    FROM employees
    GROUP BY department_id 
    HAVING min(salary) > ALL
    		(
    		select max(salary)
    		FROM employees
    		where department_id  = 10
    		)

Ответ: А.

67. Напишите запрос, чтобы найти сотрудников, чья зарплата равна зарплате хотя бы одного сотрудника в отделе с идентификатором 10. (Выберите лучший ответ)

  1. SELECT employee_id, Salary
    FROM employees
    WHERE salary in
    		(
    		SELECT salary
    		FROM employees
    		where department_id  = 10
    		)
  2. SELECT employee_id, Salary
    FROM employees
    WHERE salary =ANY
    		(
    		SELECT salary
    		FROM employees
    		where department_id  = 10
    		)
  3. SELECT employee_id, Salary
    FROM employees
    WHERE salary ALL
    		(
    		SELECT salary
    		FROM employees
    		where department_id  = 10
    		)
  4. SELECT employee_id, Salary
    FROM employees
    WHERE salary  < ANY
    		(
    		SELECT salary
    		FROM employees
    		where department_id  = 10
    		)

Ответ: А, Б.

68. Вам нужно выяснить всех сотрудников, у которых зарплата превышает хотя бы одного сотрудника в отделе 10. Какой из следующих запросов даст вам требуемый результат?

  1. SELECT employee_id, Salary
    FROM employees
    WHERE salary >= ANY
    		(
    		SELECT salary
    		FROM employees
    		where department_id  = 10
    		)
  2. SELECT employee_id, Salary
    FROM employees
    WHERE salary > ANY
    		(
    		SELECT salary
    		FROM employees
    		where department_id  = 10
    		)
  3. SELECT employee_id, Salary
    FROM employees
    WHERE salary < ANY
    		(
    		SELECT salary
    		FROM employees
    		where department_id  = 10
    		)
  4. SELECT employee_id, Salary
    FROM employees
    WHERE salary = ALL
    		(
    		SELECT salary
    		FROM employees
    		where department_id  = 10
    		)

Ответ: Б.

69. Вам нужно выяснить всех сотрудников, у которых зарплата меньше, чем у всех сотрудников в отделе 10. Какой из следующих запросов даст вам требуемый результат?

  1. SELECT employee_id, Salary
    FROM employees
    WHERE salary > ALL
    		(
    		SELECT salary
    		FROM employees
    		where department_id  = 10
    		)
  2. SELECT employee_id, Salary
    FROM employees
    WHERE salary =ALL
    		(
    		SELECT salary
    		FROM employees
    		where department_id  = 10
    		)
  3. SELECT employee_id, Salary
    FROM employees
    WHERE salary < ALL
    		(
    		SELECT salary
    		FROM employees
    		where department_id  = 10
    		)
  4. SELECT employee_id, Salary
    FROM employees
    WHERE salary < ANY
    		(
    		SELECT salary
    		FROM employees
    		where department_id  = 10
    		)

Ответ: C. Многострочные подзапросы возвращают более одной строки результатов. Операторы, которые можно использовать с подзапросами из нескольких строк, включают IN, ALL, ANY и EXISTS. Многозаполненные подзапросы возвращают более одного столбца во внешний запрос. Столбцы данных передаются во внешний запрос в том же порядке, в котором они перечислены в предложении SELECT подзапроса.

70. Вам необходимо выяснить всех сотрудников, чей менеджер и отдел совпадают с сотрудником, имеющим идентификатор сотрудника 121 или 200. Какой из следующих запросов даст вам требуемый результат?

  1. SELECT employee_id, manager_id,department_id 
    FROM employees
    WHERE (manager_id,department_id ) = ANY
    		(
    		select manager_id,
    		department_id 
    		FROM employees
    		where employee_id in (121,200)
    		)
  2. SELECT employee_id, manager_id,department_id 
    FROM employees
    WHERE (manager_id,department_id ) < ANY
    		(
    		select manager_id,
    		department_id 
    		FROM employees
    		where employee_id in (121,200)
    		)
  3. SELECT employee_id, manager_id,department_id 
    FROM employees
    WHERE (manager_id,department_id ) > ANY
    		(
    		select manager_id,
    		department_id 
    		FROM employees
    		where employee_id in (121,200)
    		)
  4. SELECT employee_id, manager_id,department_id 
    FROM employees
    WHERE (manager_id,department_id ) in
    		(
    		select manager_id,
    		department_id 
    		FROM employees
    		where employee_id in (121,200)
    		)

Ответ: A, D. Многострочные подзапросы возвращают более одного ряда результатов. Операторы, которые можно использовать с подзапросами из нескольких строк, включают IN, ALL, ANY и EXISTS. Подзапросы с несколькими столбцами возвращают более одного столбца во внешний запрос. Столбцы данных передаются во внешний запрос в том же порядке, в котором они перечислены в предложении SELECT подзапроса.

71. Вам необходимо найти название отдела сотрудника с идентификатором сотрудника 200. Какой из следующих запросов будет правильным? (Выберите наиболее подходящий ответ)

  1. SELECT employee_id, first_name, last_name,department_id ,
    (SELECT department_name
    FROM departments d, employees E
    WHERE d.department_id  = e.department_id 
    And employee_id = 200
    )
    FROM employees e
  2. SELECT employee_id, first_name, last_name,department_id ,
    (SELECT department_ID
    FROM departments d
    WHERE d.department_id  = department_id 
    )
    FROM employees e
    WHERE employee_id = 200; 
  3. SELECT employee_id, first_name, last_name,department_id ,
    (SELECT department_name
    FROM departments d
    WHERE d.department_id  = e.department_id 
    And employee_id = 200
    )
    FROM employees e
  4. SELECT employee_id, first_name, last_name,department_id ,
    (SELECT department_name
    FROM departments d,employee E 
    WHERE d.department_id  = e.department_id 
    )
    FROM employees e

Ответ: C.

72. Вам нужно найти сотрудника с самым высоким заработком с идентификатором работы SA_REP. Какой из следующих запросов будет правильным? (Выберите наиболее подходящий ответ)

  1. SELECT job_id, employee_id, Salary
    FROM employees e
    WHERE job_id  =
    (
    SELECT  distinct salary
    FROM employees E1
    WHERE E.job_id  = E1.job_id 
    AND E.salary <=  E1.salary
    AND job_id  = 'SA_REP' 
  2. SELECT department_id , employee_id, Salary
    FROM employees E
    WHERE 1 =
    (
    SELECT  count(distinct salary)
    FROM employees E1
    WHERE E.job_id  = E1.job_id 
    AND E.salary <=  E1.salary
    AND job_id  = 'SA_REP'
    )
  3. SELECT department_id , employee_id, Salary
    FROM employees E
    WHERE 0 =
    (
    SELECT  count(distinct salary)
    FROM employees E1
    WHERE E.job_id  = E1.job_id 
    AND E.salary =  E1.salary
    AND job_id  = 'SA_REP'
    )
  4. SELECT department_id , employee_id, Salary
    FROM employees E
    WHERE 1 =
    (
    SELECT salary
    FROM employees E1
    WHERE E.job_id  < E1.job_id 
    AND E.salary <=  E1.salary
    AND job_id  = 'SA_REP'
    )

Ответ: Б.

Рассмотрите структуру таблицы СОТРУДНИКОВ, как показано на выставке, и ответьте на следующие вопросы с 73 по 77:

Стол СОТРУДНИКОВ

73. Вам нужно найти работу, в которой есть хотя бы один сотрудник. Какой из следующих запросов будет правильным? (Выберите наиболее подходящий ответ)

  1. SELECT employee_id, Job_id
    FROM employees E
    WHERE exists
    (
    SELECT 1
    FROM employees E1
    WHERE E.job_id  = E1.job_id )
  2. SELECT employee_id, Job_id 
    FROM employees E
    WHERE exists
    (
    SELECT *
    FROM employees E1
    WHERE E.job_id  = E1.job_id )
  3. SELECT employee_id, Job_id 
    FROM employees E
    WHERE not exists
    (
    SELECT *
    FROM employees E1
    WHERE E.job_id  = E1.job_id )
  4. SELECT employee_id, Job_id 
    FROM employees E
    WHERE exists
    (
    SELECT 1
    FROM employees E1
    WHERE E.job_id  < E1.job_id )

Ответ: A. Оператор EXISTS используется для проверки и сопоставления записей между запросами. Возвращает булево значение. Коррелированный подзапрос ссылается на столбец во внешнем запросе и выполняет подзапрос один раз для каждой строки во внешнем запросе, а оператор EXISTS используется для проверки наличия связи или ссылки. Некоррелированный подзапрос сначала выполняет подзапрос и передает значение во внешний запрос.

74. Вам нужно найти работу, в которой нет работников. Какой из следующих запросов будет правильным? (Выберите наиболее подходящий ответ)

  1. SELECT employee_id, Job_id 
    FROM employees E
    WHERE exists
    (
    SELECT *
    FROM employees E1
    WHERE E.job_id  = E1.job_id )
  2. SELECT employee_id, Job_id 
    FROM employees E
    WHERE not exists
    (
    SELECT 1
    FROM employees E1
    WHERE E.job_id  = E1.job_id )
  3. SELECT employee_id, Job_id 
    FROM employees E
    WHERE not exists
    (
    SELECT *
    FROM employees E1
    WHERE E.job_id  = E1.job_id )
  4. SELECT employee_id, Job_id 
    FROM employees E
    WHERE exists
    (
    SELECT 1
    FROM employees E1
    WHERE E.job_id  < E1.job_id )

Ответ: B. NOT EXISTS является оператором отрицания для EXISTS.

75. Вам нужно найти третью максимальную зарплату из таблицы СОТРУДНИКОВ. Какой из следующих запросов даст вам требуемые результаты? (Выберите наиболее подходящий ответ)

  1. SELECT * 
    FROM employees E
    WHERE salary = (SELECT count(distinct salary ) 
    		FROM employees 
    		WHERE e.salary = salary 
    		); 
  2. SELECT * 
    FROM employees E
    WHERE 1 = (SELECT count(distinct salary ) 
    		FROM employees 
    		WHERE e.salary < salary 
    		); 
  3. SELECT * 
    FROM employees E
    WHERE 2 = (SELECT count(distinct salary ) 
    		FROM employees 
    		WHERE e.salary >salary 
    		); 
  4. SELECT * 
    FROM employees E
    WHERE 3 = (SELECT count(distinct salary ) 
    		FROM employees 
    		WHERE e.salary <= salary 
    		); 

Ответ: Д.

76. Вам нужно найти максимальную зарплату, используя пользовательский ввод для получения значения N. Какой из следующих запросов даст вам требуемые результаты? (Выберите наиболее подходящий ответ)

  1. SELECT salary FROM 
    (
    	SELECT rowid as user_sal 
    	FROM (SELECT distinct salary  from employees ORDER BY salary  desc)
    ) 
    WHERE user_sal=&N ; 
  2. SELECT salary FROM 
    (	
    	SELECT rownum as user_sal
    	FROM (SELECT distinct salary  FROM employees   		GROUP BY salary )
    ) 
    WHERE user_sal <= &N ; 
  3. SELECT salary FROM 
    (
    	SELECT rownum as user_sal, salary 	FROM (SELECT distinct salary  FROM employees 		 ORDER BY salary  desc)
    ) 
    WHERE user_sal=&N ; 
  4. SELECT salary FROM 
    (
    	SELECT max(rownum) as user_sal, salary 	FROM (SELECT distinct salary  FROM employees 		ORDER BY salary  desc)
    ) 
    WHERE user_sal=&N ; 

Ответ: C. ROWNUM — псевдостолбец, используемый для поиска результатов n-го порядка.

77. Что произойдет, если значение для переменной & N в указанном выше запросе (опция C в вопросе 76) не совпадает ни с одной строкой? (Выбрать лучший ответ)

  1. Оператор выдаст ошибку ORA
  2. Оператор вернет все строки в таблице
  3. Оператор будет возвращать NULL в качестве результата вывода.
  4. Оператор не будет возвращать строки в результате.

Ответ: Д.

78. Каков максимальный уровень, до которого вложенные запросы могут быть вложены?

  1. 255
  2. 100
  3. 2
  4. 16

Ответ: А.

79.Что верно в отношении оператора EXISTS в запросах SQL по отношению к подзапросам?

  1. Столбцы, выбранные в подзапросах, важны
  2. Внутренние запросы должны возвращать строки, любой результат важен, а не ВЫБРАН
  3. Оба а и Б
  4. Ни А, ни Б

Ответ: Б.

80.Что верно для ЛЮБОГО оператора, используемого для подзапросов?

  1. Возвращает строки, которые соответствуют всем значениям в списке / подзапросе
  2. Возвращает строки, которые соответствуют первым 5 значениям в списке / подзапросе
  3. Возвращает строки, которые соответствуют любому значению в списке / подзапросе
  4. Возвращает значение 0, когда все строки совпадают в списке / подзапросе

Ответ: C.

81.Что верно для оператора ALL, используемого для подзапросов? (Выберите наиболее подходящий ответ.)

  1. Возвращает строки, которые соответствуют всем значениям в списке / подзапросе
  2. Возвращает строки, которые соответствуют только некоторым значениям в списке / подзапросе
  3. Возвращает строки, только если все значения совпадают в списке / подзапросе
  4. Все вышеперечисленное

Ответ: C. ‘> ALL’ Больше, чем самое высокое значение, возвращаемое подзапросом. ‘<ALL’ Меньше, чем наименьшее значение, возвращаемое подзапросом. ‘<ANY’ Меньше, чем самое высокое значение, возвращаемое подзапросом. ‘> ANY’ Больше минимального значения, возвращаемого подзапросом. ‘= ANY’ Равен любому значению, возвращаемому подзапросом (так же, как IN). ‘[NOT] EXISTS’ Строка должна соответствовать значению в подзапросе.

82.Что верно при использовании подзапросов в операторах INSERT в Oracle?

  1. Они могут использоваться в предложении INSERT без каких-либо ограничений.
  2. Они могут использоваться в предложении INSERT только для числовых значений.
  3. Список SELECT подзапроса должен совпадать со списком столбцов оператора INSERT.
  4. Ни один из вышеперечисленных

Ответ: C.

Изучите структуры таблиц, приведенные ниже, и ответьте на следующие вопросы с 83 по 86.

SQL> DESC employees
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 FIRST_NAME			  VARCHAR2(20)
 LAST_NAME		 NOT NULL VARCHAR2(25)
 EMAIL			 NOT NULL VARCHAR2(25)
 PHONE_NUMBER			  VARCHAR2(20)
 HIRE_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
 MANAGER_ID			  NUMBER(6)
 DEPARTMENT_ID			  NUMBER(4)
SQL> DESC departments
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 DEPARTMENT_ID		 NOT NULL NUMBER(4)
 DEPARTMENT_NAME	 NOT NULL VARCHAR2(30)
 MANAGER_ID			  NUMBER(6)
 LOCATION_ID			  NUMBER(4)

83. Вам необходимо найти сведения обо всех сотрудниках, которые были наняты на работу с идентификатором «SA_REP» в июне 2013 года. Какой из следующих запросов даст требуемые результаты? (Рассмотрим структуру таблицы как дано)

  1. SELECT first_name 
    FROM employees 
    WHERE employee_id  =
    (	SELECT employee_id 
    	FROM employees 
    	WHERE to_char(hiredate, 'MM/YYYY')= '02/1981'
    	AND job_id  = 'SA_REP'
    ); 
  2. SELECT first_name 
    FROM employees 
    WHERE employee_id  = ANY
    (	SELECT employee_id 
    	FROM employees 
    	WHERE to_char(hiredate, 'MM/YYYY')= '02/1981'
    	AND job_id  = 'SA_REP'
    ); 
  3. SELECT first_name 
    FROM employees 
    WHERE employee_id  ANY
    (	SELECT employee_id 
    	FROM employees 
    	WHERE to_char(hiredate, 'MM/YYYY')= '02/1981'
    	AND job_id  = 'SA_REP'
    ); 
  4. SELECT first_name 
    FROM employees 
    WHERE employee_id  exists
    (	SELECT employee_id 
    	FROM employees 
    	WHERE to_char(hiredate, 'MM/YYYY')= '02/1981'
    	AND job_id  = 'SA_REP'
    ); 

Ответ: Б.

84. Какие из следующих утверждений эквивалентны?

  1. SELECT employee_id , salary
    FROM employees 
    WHERE salary < ALL (SELECT salary FROM employees WHERE department_id=100); 
  2. SELECT employee_id , salary
    FROM employees WHERE salary < (SELECT min(salary) FROM employees WHERE department_id=100); 
  3. SELECT employee_id 
    FROM employees 
    WHERE salary not >= ANY (SELECT salary FROM employees WHERE department_id=100); 
  4. Ни один из вышеперечисленных

Ответ: А, Б.

85. Рассмотрите следующие два запроса:

Запрос 1:

SELECT first_name 
FROM employees e join departments d
ON e.department_id  = d.department_id
WHERE department_name='ACCOUNTS'; 

Запрос 2:

SELECT first_name 
FROM employees  e 
WHERE department_id  = ANY (SELECT department_id 		FROM departments d 
		WHERE department_name='ACCOUNTS'); 

Что можно сказать о двух утверждениях?

  1. Оба запроса должны генерировать одинаковый результат.
  2. Оба запроса приведут к ошибке.
  3. Если есть два отдела с одинаковыми именами, оба запроса не будут выполнены.
  4. Оба запроса будут выполнены успешно, даже если существует более одного отдела с именем «СЧЕТА».

Ответ: А, Д.

86.Вы должны отобразить всех сотрудников, у которых самая высокая зарплата в отделе 100. Вы запускаете запрос, как показано ниже.

 
SELECT E.first_name, E.last_name , E.salary
FROM employees E
WHERE E.salary > ALL (SELECT E1.salary
      FROM employees E1
      WHERE E.department_id  =E1.department_id 
      AND E.department_id  = 100); 

Каков будет результат вышеуказанного запроса?

  1. Он успешно выполняется и дает требуемые результаты
  2. Он выполняется успешно, но не дает требуемого вывода
  3. Выдает ошибку ORA при исполнении
  4. Это выполняется успешно и дает требуемый результат, когда> ALL заменяется на> = ALL

Ответ: B, D. > ВСЕ не дадут требуемого результата, так как может быть два сотрудника с одинаковой зарплатой и которые имеют самые высокие заработки в отделе 100

Рассмотрим структуру таблиц, как показано на выставке, и ответьте на следующие вопросы с 87 по 89:

Стол СОТРУДНИКОВТаблица ОТДЕЛОВ

87.Вы должны получить имена (в обратном алфавитном порядке) всех сотрудников в отделе с идентификатором = 100 и с максимальной зарплатой в идентификаторе задания = SA_REP. Какой из следующих запросов даст требуемый результат? (Выберите наиболее подходящий выход)

  1. SELECT E.first_name, job_id , salary
    FROM employees E
    WHERE salary =
    		(SELECT max(salary)
    		FROM employees E1
    		WHERE E1.department_id  = 100
    		GROUP BY job_id )
    AND job_id  = 'SA_REP'
    ORDER BY first_name; 
  2. SELECT E.first_name, job_id , salary
    FROM employees E
    WHERE salary in
    		(SELECT max(salary)
    		FROM employees E1
    		where E1.department_id  = 100)
    ORDER BY first_name; 
  3. SELECT E.first_name, job_id , salary
    FROM employees E
    WHERE salary IN
    		(SELECT max(salary)
    		FROM employees E1
    		where job_id  = 'SA_REP'
    		GROUP BY job_id )
    AND WHERE E.department_id  = 100
    ORDER BY first_name desc; 
  4. SELECT E.first_name, job_id , salary
    FROM employees E
    WHERE salary IN
    		(SELECT max(salary)
    		FROM employees E1
    		WHERE E1.department_id  = 100
    		GROUP BY job_id )
    ORDER BY first_name ; 

Ответ: C.

88.В приведенных выше запросах (вариант C является правильным ответом) необходимо отобразить всех сотрудников с идентификатором JOB «SA_REP», у которых максимальная зарплата в отделе 100. Какой из следующих запросов даст требуемый результат ?

  1. SELECT E.first_name, job_id , salary
    FROM employees E
    WHERE salary IN
    		(SELECT max(salary)
    		FROM employees E1
    		WHERE E1.department_id  = 100
    		GROUP BY job_id )
    AND job_id  = 'SA_REP'
    ORDER BY first_name; 
  2. SELECT E.first_name, job_id , salary
    FROM employees E
    WHERE salary in
    		(SELECT max(salary)
    		FROM employees E1
    		WHERE E1.department_id  = 100)
    ORDER BY first_name; 
  3. SELECT E.first_name, job_id , salary
    FROM employees E
    WHERE salary in
    		(SELECT max(salary)
    		FROM employees E1
    		WHERE job_id  = 'SA_REP'
    		GROUP BY job_id )
    And WHERE E.department_id  = 100
    ORDER BY first_name desc; 
  4. SELECT E.first_name, job_id , salary
    FROM employees E
    WHERE salary in
    		(SELECT max(salary)
    		FROM employees E1
    		WHERE E1.department_id  = 100
    		GROUP BY job_id )
    ORDER BY first_name ; 

Ответ: А.

89. Выберите запрос, который даст вам максимальную зарплату и максимальный процент комм. В запросе также должен указываться максимальный процент вознаграждения, если сотрудник с наибольшим окладом получает максимальный процент вознаграждения.

  1. SELECT employee_id, max(salary), max(commission_pct )
    FROM employees E
    GROUP BY salary, commission_pct ; 
  2. SELECT employee_id, max(salary), max(commission_pct )
    FROM employees E
    GROUP BY salary; 
  3. SELECT employee_id, max(salary)
    FROM employees E
    GROUP BY salary, commission_pct 
    HAVING max(commission_pct ) = 100; 
  4. SELECT employee_id,
    (SELECT max(salary) FROM employees) * (SELECT max(commission_pct ) FROM employees)
    FROM DUAL; 

Ответ: D. Однострочный подзапрос также может быть вложен в предложение SELECT внешнего запроса. В этом случае значение, возвращаемое подзапросом, доступно для каждой строки вывода, сгенерированной внешним запросом. Как правило, этот метод используется для выполнения вычислений со значением, полученным из подзапроса.

90.Что верно в отношении подзапросов, используемых в предложении SELECT оператора SQL?

  1. Эти подзапросы одинаковы во всех аспектах, которые используются в предложениях FROM или WHERE
  2. Эти подзапросы обязательно должны быть подзапросами из одной строки
  3. Мы можем использовать многострочные операторы при написании таких подзапросов
  4. Ни один из вышеперечисленных

Ответ: Б.

91. Каков будет результат следующего запроса? (Рассмотрим структуру таблицы как дано)

SQL> DESC employees
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 FIRST_NAME			  VARCHAR2(20)
 LAST_NAME		 NOT NULL VARCHAR2(25)
 EMAIL			 NOT NULL VARCHAR2(25)
 PHONE_NUMBER			  VARCHAR2(20)
 HIRE_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
 MANAGER_ID			  NUMBER(6)
 DEPARTMENT_ID			  NUMBER(4)
SELECT sysdate,
(SELECT max(salary) FROM employees GROUP BY department_id )
FROM DUAL; 
  1. Это дает системную дату и максимальную зарплату для каждого отдела
  2. Это дает максимальную зарплату для всех отделов
  3. Выдает ошибку ORA
  4. Он успешно выполняется с 0 строк

Ответ: C. Многострочный подзапрос нельзя использовать в предложении SELECT оператора SQL. В предложение SELECT внешнего запроса может быть вложен только однострочный подзапрос.

Изучите данную структуру таблицы. Рассмотрите следующий запрос и ответьте на следующие вопросы с 92 по 95:

SQL> DESC employees
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 FIRST_NAME			  VARCHAR2(20)
 LAST_NAME		 NOT NULL VARCHAR2(25)
 EMAIL			 NOT NULL VARCHAR2(25)
 PHONE_NUMBER			  VARCHAR2(20)
 HIRE_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
 MANAGER_ID			  NUMBER(6)
 DEPARTMENT_ID			  NUMBER(4)
SELECT salary
FROM employees
WHERE salary > ALL (10, 20, 30); 

92.Какие из следующих запросов эквивалентны приведенному выше запросу?

  1. SELECT salary
    FROM employees
    WHERE salary >10 or salary > 20 and salary >30; 
  2. SELECT salary
    FROM employees
    WHERE salary <10 and salary < 20 and salary <30; 
  3. SELECT salary
    FROM employees
    WHERE salary >10 and salary > 20 and salary >30; 
  4. SELECT salary
    FROM employees
    WHERE salary >10 and salary > 20 or salary < 30; 

Ответ: C. Вопрос показывает предложение ALL в упрощенной форме, когда за ним следует список.

93. Если в приведенном выше запросе список (10,20,30) будет заменен подзапросом, какой из следующих запросов даст требуемый результат для отдела номер 100?

  1. SELECT E.salary
    FROM employees E
    WHERE E.salary > (SELECT  E1.salary
    FROM employees E1
    WHERE E1.department_id  = 100); 
  2. SELECT E.salary
    FROM employees E
    WHERE E.salary >ALL (SELECT  E1.salary
    FROM employees E1
    WHERE E1.department_id  = 100); 
  3. SELECT E.salary
    FROM employees E
    WHERE E.salary = (SELECT  E1.salary
    FROM employees E1
    WHERE E1.department_id  = 100); 
  4. SELECT E.salary
    FROM employees E
    WHERE E.salary >= (SELECT  E1.salary
    FROM employees E1
    WHERE E1.department_id  = 100); 

Ответ: B. Вопрос показывает предложение ALL в упрощенной форме, когда за ним следует подзапрос

94.В отношении вопроса 14 выше, что из следующего будет эквивалентным запросом, если ВСЕ должно быть заменено на ЛЮБОЕ?

  1. SELECT E.salary
    FROM employees E
    WHERE NOT EXISTS (E.salary =ANY (SELECT  E1.salary
    FROM employees E1
    WHERE E1.department_id  = 100); 
  2. SELECT E.salary
    FROM employees E
    WHERE E.salary >ANY (SELECT  E1.salary
    FROM employees E1
    WHERE E1.department_id  = 100); 
  3. SELECT E.salary
    FROM employees E
    WHERE E.salary =ANY (SELECT  E1.salary
    FROM employees E1
    WHERE E1.department_id  = 100); 
  4. SELECT E.salary
    FROM employees E
    WHERE NOT ( E.salary <= ANY (SELECT  E1.salary
    FROM employees E1
    WHERE E1.department_id  = 100)); 

Ответ: D. Оператор NOT, используемый при использовании ‘<= ANY’, используется для отрицания результатов, возвращаемых подзапросом.

95.В отношении вопроса 94, если оператор ЛЮБОЙ не должен использоваться, какой из следующих запросов будет правильным?

  1. SELECT E.salary
    FROM employees E
    WHERE NOT EXISTS (E.salary = ANY (SELECT  E1.salary
    FROM employees E1
    WHERE E1.department_id  = 100); 
  2. SELECT E.salary
    FROM employees E
    WHERE NOT EXISTS (SELECT  E1.salary
    FROM employees E1
    WHERE E1.department_id  = 100
    And E.salary <= E1.salary); 
  3. Либо А, либо Б
  4. Ни один из вышеперечисленных

Ответ: B. Коррелированный подзапрос ссылается на столбец во внешнем запросе и выполняет подзапрос один раз для каждой строки во внешнем запросе, а оператор EXISTS используется для проверки наличия связи или ссылки. Некоррелированный подзапрос сначала выполняет подзапрос и передает значение во внешний запрос.

Изучите данные таблицы структур. Рассмотрите следующий запрос и ответьте на следующие вопросы с 96 по 98:

SQL> DESC employees
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 FIRST_NAME			  VARCHAR2(20)
 LAST_NAME		 NOT NULL VARCHAR2(25)
 EMAIL			 NOT NULL VARCHAR2(25)
 PHONE_NUMBER			  VARCHAR2(20)
 HIRE_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
 MANAGER_ID			  NUMBER(6)
 DEPARTMENT_ID			  NUMBER(4)
SELECT salary
FROM employees
WHERE salary > ANY (10, 20, 30); 

96. Какие из следующих запросов эквивалентны вышеуказанному запросу?

  1. SELECT salary
    FROM employees
    WHERE salary >10 or salary > 20 and or >30; 
  2. SELECT salary
    FROM employees
    WHERE salary <10 and salary < 20 and salary <30; 
  3. SELECT salary
    FROM employees
    WHERE salary >10 and salary > 20 or salary >30; 
  4. SELECT salary
    FROM employees
    WHERE salary >10 and salary > 20 or salary < 30; 

Ответ: A. Вопрос показывает ЛЮБОЕ предложение в упрощенном виде, когда за ним следует список.

97. Если в приведенном выше запросе список (10, 20, 30) будет заменен подзапросом, какой из следующих запросов даст требуемый вывод для номера отдела 100?

  1. SELECT E.salary
    FROM employees E
    WHERE E.salary > (SELECT  E1.salary
    FROM employees E1
    WHERE E1.department_id  = 100); 
  2. SELECT E.salary
    FROM employees E
    WHERE E.salary >ANY (SELECT  E1.salary
    FROM employees E1
    WHERE E1.department_id  = 100); 
  3. SELECT E.salary
    FROM employees E
    WHERE E.salary = (SELECT  E1.salary
    FROM employees E1
    WHERE E1.department_id  = 100); 
  4. SELECT E.salary
    FROM employees E
    WHERE E.salary >= (SELECT  E1.salary
    FROM employees E1
    WHERE E1.department_id  = 100); 

Ответ: B. Вопрос показывает ЛЮБОЕ предложение в упрощенном виде, когда за ним следует подзапрос

98.В отношении вопроса 97 выше, что из следующего будет эквивалентным запросом, если ЛЮБОЙ будет удален?

  1. SELECT E.salary
    FROM employees E
    WHERE NOT EXISTS (E.salary =ANY (SELECT  E1.salary
    FROM employees E1
    WHERE E1.department_id  = 100); 
  2. SELECT E.salary
    FROM employees E
    WHERE EXISTS (SELECT  E1.salary
    FROM employees E1
    WHERE E1.department_id  = 100
    And E.salary >E1.salary); 
  3. SELECT E.salary
    FROM employees E
    WHERE EXISTS (SELECT  E1.salary
    FROM employees E1
    WHERE E1.department_id  = 100
    ); 
  4. SELECT E.salary
    FROM employees E
    WHERE IN (SELECT  E1.salary
    FROM employees E1
    WHERE E1.department_id  = 100); 

Ответ: B. Оператор EXISTS может заменить ЛЮБОЙ оператор. Коррелированный подзапрос ссылается на столбец во внешнем запросе и выполняет подзапрос один раз для каждой строки во внешнем запросе, а оператор EXISTS используется для проверки наличия связи или ссылки.

99. Изучите данную структуру таблицы. Сколько строк будет сгенерировано, если упомянутый подзапрос вернет 0 строк?

SQL> DESC employees
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 FIRST_NAME			  VARCHAR2(20)
 LAST_NAME		 NOT NULL VARCHAR2(25)
 EMAIL			 NOT NULL VARCHAR2(25)
 PHONE_NUMBER			  VARCHAR2(20)
 HIRE_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
 MANAGER_ID			  NUMBER(6)
 DEPARTMENT_ID			  NUMBER(4)
SELECT E.salary
FROM employees E
WHERE E.salary > ANY ( select E1.salary FROM employees E1 where E1.department_id  = 100); 
  1. 1 ряд
  2. Нет строк
  3. Либо А, либо Б
  4. Ни один из вышеперечисленных

Ответ: B. Если подзапрос возвращает ноль строк, условие «> ЛЮБОЙ» оценивается как ЛОЖЬ, поэтому возвращается «Нет строк».

100. Подзапрос должен быть помещен в предложение HAVING внешнего запроса, если:

  1. Внутренний запрос должен ссылаться на значение, возвращаемое внешнему запросу.
  2. Значение, возвращаемое внутренним запросом, должно сравниваться с сгруппированными данными во внешнем запросе.
  3. Подзапрос возвращает более одного значения во внешний запрос.
  4. Ни один из вышеперечисленных. Подзапросы нельзя использовать в предложении HAVING внешнего запроса.

Ответ: B. Предложение HAVING используется, когда групповые результаты запроса должны быть ограничены на основании какого-либо условия. Если результат подзапроса необходимо сравнить с групповой функцией, вы должны вложить внутренний запрос в предложение HAVING внешнего запроса.