クエリの質問を解決するためのサブクエリ

1. Which of the following are the types of sub-queries?

  1. 注文したサブクエリ
  2. グループ化されたサブクエリ
  3. 単一行のサブクエリ
  4. 上記のどれでもない

Answer: C. サブクエリは、別のクエリのSELECT、FROM、HAVING、またはWHERE句にネストされた完全なクエリです。サブクエリは括弧で囲み、少なくともSELECT句とFROM句が必要です。単一行のサブクエリと複数行のサブクエリは、サブクエリの主なタイプです。

2.Which of the following is true about sub-queries?

  1. メインクエリの実行後に実行されます
  2. それらはメインクエリと並行して実行されます
  3. ユーザーはメインクエリを実行してから、必要に応じてサブクエリを実行できます。
  4. これらは、メインクエリが実行される前に実行されます。

Answer: D. サブクエリは常にメインクエリの実行前に実行されます。サブクエリが最初に完了します。サブクエリの結果は、外部クエリの入力として使用されます。

3.Which of the following is true about the result of a sub-query?

  1. サブクエリの結果は、通常、実行時に無視されます。
  2. サブクエリの結果は結果を提供しません。メインクエリの実行を高速化するのに役立ちます。
  3. サブクエリの結果は、メインクエリによって使用されます。
  4. サブクエリの結果は常にNULLです

Answer: C. サブクエリが最初に完了します。サブクエリの結果は、外部クエリの入力として使用されます。

4.Which of the following clause is mandatorily used in a sub-query?

  1. SELECT
  2. WHERE
  3. ORDER BY
  4. GROUP BY

Answer: A. サブクエリは、SELECT句で開始する必要がある他のクエリとまったく同じです。それらは外部クエリに含まれています。

5. Which of the following is a method for writing a sub-query in a main query?

  1. JOINSを使用する
  2. WHERE句を使用する
  3. GROUPBY句を使用する
  4. 別のSELECTステートメントの句に埋め込まれたSELECTステートメントを作成する

Answer: D. サブクエリは、別のクエリのSELECT、FROM、HAVING、またはWHERE句にネストされた完全なクエリです。サブクエリは括弧で囲み、少なくともSELECT句とFROM句が必要です。

6.In the given scenarios, which one would appropriately justify the usage of sub-query?

  1. 値を合計する必要がある場合
  2. 文字値を日付または数値に変換する必要がある場合
  3. 同じテーブルまたは異なるテーブルのデータに依存する条件でテーブルから行を選択する必要がある場合。
  4. 上記のどれでもない

Answer: C.

7.In which of the following clauses can a sub-query be used?

  1. HAVING
  2. WHERE
  3. FROM
  4. 上記のすべて

Answer: D. サブクエリは通常のクエリと同じです。SELECTステートメントのすべての主要な句を利用できます。

8.Which of the following single-row operators can be used for writing a sub-query?

  1. >=
  2. <
  3. =
  4. 上記のすべて

Answer: D. 単一行の演算子には、=、>、<、> =、<=、および<>が含まれます。

9.Which of the following multi-row operators can be used with a sub-query?

  1. IN
  2. ANY
  3. ALL
  4. 上記のすべて

Answer: D. 複数行のサブクエリは、複数行の結果を返します。複数行のサブクエリで使用できる演算子には、IN、ALL、ANY、およびEXISTSがあります。

10.What is true about the output obtained from a sub-query?

  1. バッファキャッシュに残ります
  2. サブクエリ内に残り、後で必要なときに使用できます
  3. これは、外部(メイン)クエリを完了するために使用されます
  4. AとCの両方

Answer: C. サブクエリが最初に完了します。サブクエリの結果は、外部クエリの入力として使用されます。

11.You need to find the salaries for all the employees who have a higher salary than the Vice President of a company 'ABC'.Which of the following queries will give you the required result? (Consider the table structure as given)

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. 上記のどれでもない

Answer: A. オプション「A」では、内側のサブクエリは、結果としてVPの給与を外側のクエリに提供します。

12.What among the following is true about sub-queries?

  1. サブクエリは、比較演算子のどちらの側にも記述できます
  2. サブクエリには括弧は必須ではありません
  3. 単一行のサブクエリでは複数行の演算子を使用できますが、その逆はできません。
  4. 上記のすべて

Answer: A. サブクエリは、クエリのインデントと使いやすさに応じて、比較演算子の左側または右側に配置できます。

13. What will be the outcome of the following query? (Consider the given table structure)

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. 正常に実行され、結果セットで取得された各行に2つの値が与えられます。

Answer: C. 複数行の演算子は、単一行のサブクエリでは使用できません。その逆も同様です。

14.Which of the following is true about single-row sub-queries?

  1. メインクエリから1つの結果が得られます
  2. 結果セットに1行しか表示されません
  3. 内部のSELECTステートメントから1行だけを返します
  4. それらはメイン(外部)クエリから複数の行を提供します

Answer: C. 単一行のサブクエリは、最大1つの値を返すことができます。

15.What is true about multi-row sub-queries?

  1. 内部クエリの結果として、複数の列を返す可能性があります
  2. メインクエリでは複数の行を返しますが、内部クエリでは1つの結果セットのみを返します
  3. メインクエリでは単一の行を返しますが、内部サブクエリでは複数の行を返します
  4. 内部のSELECTステートメントから複数の行を返します

Answer: D. 複数列のサブクエリは結果セットに複数の列を返し、複数行のサブクエリは内部クエリから複数の行を返します。

16.What among the following is true about single-row sub-queries?

  1. それらは1行のみを返します
  2. 単一行の演算子を使用します
  3. AもBも
  4. 上記のどれでもない

Answer: C.

17.Which of the following operators cannot be used in a sub-query?

  1. AND
  2. <
  3. >
  4. <>

Answer: A. 単一行の演算子には、=、>、<、> =、<=、および<>が含まれます。複数行のサブクエリで使用できる複数行の演算子には、IN、ALL、ANY、およびEXISTSがあります。

Examine the exhibit and answer the questions 18 to 21 that follow.

18.You need to find out the names of all employees who belong to the same department as the employee 'Jessica Butcher' who is in department 100 and has an employee ID 40. Which of the following queries will be correct?

  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);

Answer: D. 「D」は「C」よりも適切です。これは、一意の従業員IDでフィルタリングし、サブクエリが単一行のみを返すようにするためです。同じ姓名の従業員が複数いる場合、「C」は失敗する可能性があります。

19.You need to find out the employees which belong to the department of 'Jessica Butcher' and have salary greater than the salary of 'Jessica Butcher' who has an employee ID of 40. Which of the following queries will work?

  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);

Answer: C. 1つのSQLステートメントに複数のサブクエリを記述して、複数の条件を追加できます。

20.Based on the answers for questions 18th and 19th, what type of sub-queries is used by them?

  1. 単一行のサブクエリ
  2. 複数行のサブクエリ
  3. AもBも
  4. インラインサブクエリ

Answer: A. 上記の18番目と19番目の質問は、SELECTステートメントの使用法サブクエリを示しています。

21.Consider two statements about outer and inner queries in context of SQL sub-queries?

私。内部クエリは、1つのテーブルからのみデータを取得できます

ii。内部クエリは、複数のテーブルからデータを取得できます

上記の説明のうち正しいものはどれですか?

  1. (i)
  2. (ii)
  3. (i)と(ii)の両方
  4. (i)でも(ii)でもない

Answer: B. サブクエリは、複数のテーブルからデータをフェッチできます。

Examine the table structure as follows and answer the questions 22 to 27 that follow:

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.What will be the outcome of the following query? (Choose the most appropriate answer)

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. 単一行のサブクエリには複数行の演算子が含まれている必要があるため、エラーがスローされます

Answer: A. グループ関数は、サブクエリ内で使用できます。

23.What will be the outcome of the query that follows?

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. エラーをスローします。

Answer: A. HAVING句は、次のようにサブクエリで使用できます。

24.You need to find the job which has a maximum average salary.Which of the following queries will give you the required results?

  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);

Answer: D. サブクエリでは、グループ関数とHAVING句を使用してグループを制限できます。

25.The following query throws an error. Choose the correct reason for the error as given in the options.

SELECT first_name, last_name
FROM employees
WHERE commission_pct  = (SELECT min(commission_pct )
          FROM employees
          GROUP BY department_id);
  1. GROUPBY句はサブクエリでは必要ありません
  2. 関数はサブクエリSELECTステートメントでは使用できません
  3. 単一行のサブクエリは複数のレコードを提供します
  4. 「=」演算子の使用は無効です。IN演算子は正しく機能します

Answer: C, D. GROUP BY句は、各部門の最小のcommission_pctを提供するため、複数の結果がメインクエリにフェッチされ、エラーが発生します。

26.Consider the query given below.How many records will be returned as a result of the above query? (Assuming the no employee with job id XX exists in the company)

SELECT first_name, last_name
FROM employees
WHERE salary = (SELECT salary
		FROM employees
		WHERE job_id = 'XX');
  1. 1
  2. NULL
  3. 0
  4. サブクエリが無効であるため、クエリでORAエラーが発生します。

Answer: C. 会社にjob_id "XX"の従業員がいないため、サブクエリは結果を返しません。メインクエリのjob_idと同等の場合、結果は0になります。

27.What happens if the WHERE condition in the query given in question 26 is replaced with a new one (WHERE job_id IS NOT NULL)? (Assume the number of records in 'employees' table is 14).

  1. 1
  2. 14
  3. 0
  4. ORAエラー

Answer: D. クエリを実行すると、「ORA-01427:単一行のサブクエリが複数の行を返す」という例外が発生します。

28.Which of the following are valid multi row operators used for sub-queries?

  1. <=
  2. 任意> =
  3. !=
  4. >=

Answer: B. 複数行のサブクエリは複数行の結果を返します。複数行のサブクエリで使用できる演算子には、IN、ALL、ANY、およびEXISTSが含まれます。複数行の演算子IN、ANY、ALLは、図のように単一行の演算子で使用する必要があります。オプションBで。

Examine the table structure as given. Consider the query given below and answer the questions 29 to 33 that follow

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.What does the ANY operator evaluates to in the above query?

  1. TRUE
  2. FALSE
  3. NULL
  4. 0

Answer: A. 複数行の演算子はブール結果を返します。部門100に給与の結果があるため、TRUEを返します。結果が0の場合、FALSEと評価されます。

30.What will be the outcome of the query if we assume that the department 100 has only one employee?

  1. 正常に実行され、1つの結果が得られます
  2. それはすべての従業員の給料を与えることに成功します
  3. NULL
  4. ORAエラーをスローします

Answer: D. 部門100の結果が1つ(単一行のサブクエリ)の場合、<ANY演算子は複数行の演算子であるため、エラーが発生します。

31.What will be the outcome of the query given above if the < ANY operator is replaced with = ANY operator?

  1. Oracleは、サブクエリから返された給与の各値をIN演算子の場合と同じように扱います。
  2. 結果に違いはありません
  3. 結果は異なります
  4. 実行するとORAエラーがスローされます

Answer: A. = ANY演算子はIN演算子と同等です。

32.What can be said about the < ANY operator in the query given above?

  1. それは給与の最大値を与えます
  2. それは給与の最小値を与えます
  3. これは、最高値よりも小さい値を与えることを意味します
  4. 上記のどれでもない

Answer: C. 複数行演算子<ANYは、サブクエリの「最大値未満」というステートメントに評価されます。'> ALL'サブクエリによって返される最大値を超えています。'<ALL'サブクエリによって返される最小値未満。'<ANY'サブクエリによって返される最大値未満。'<ANY'サブクエリによって返される最小値を超えています。'= ANY'サブクエリによって返される任意の値に等しい(INと同じ)。'[NOT] EXISTS'行はサブクエリの値と一致する必要があります

33.Assume that the < ANY operator is replaced with the > ANY. What is true about this operator?

  1. それは最大の給料を与えます
  2. サブクエリから最大給与のみを検索します
  3. それは最低賃金以上を与えます
  4. それは最低賃金を与えます

Answer: C. 複数行演算子> ANYは、サブクエリの「最小値より大きい」ステートメントに評価されます。'> ALL'サブクエリによって返される最大値を超えています。'<ALL'サブクエリによって返される最小値未満。'<ANY'サブクエリによって返される最大値未満。'> ANY'サブクエリによって返される最小値を超えています。'= ANY'サブクエリによって返される任意の値に等しい(INと同じ)。'[NOT] EXISTS'行はサブクエリの値と一致する必要があります

34. Examine the given table structure and consider the following query:

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);

Answer: D. IN演算子を使用すると、Oracleはサブクエリの個々の結果をオプションDに示すように扱います。

Examine the structure of the EMPLOYEES table as given below and answer the questions 35 to 37 that follow.

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. You need to find out which of the employees have a salary less than that of the salary for the job ID 'FIN_ACT'. Which of the following queries will give you the required output?

  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';

Answer: A. <ALLは、最小値未満を意味します。'> ALL'サブクエリによって返される最大値を超えています。'<ALL'サブクエリによって返される最小値未満。'<ANY'サブクエリによって返される最大値未満。'> ANY'サブクエリによって返される最小値を超えています。'= ANY'サブクエリによって返される任意の値に等しい(INと同じ)。'[NOT] EXISTS'行はサブクエリの値と一致する必要があります

36.What will be the outcome of the above query (the option A in the question above), if the < ALL is replaced with the >ALL?

  1. 正常に実行され、同じ結果が得られます。
  2. ORAエラーをスローします
  3. 正常に実行されますが、job_idが「FI_ACCOUNTANT」のすべての従業員よりも給与が低い従業員の詳細が表示されます。
  4. 上記のどれでもない

Answer: C. > ALLは、最小値未満を意味します。'> ALL'サブクエリによって返される最大値を超えています。'<ALL'サブクエリによって返される最小値未満。'<ANY'サブクエリによって返される最大値未満。'> ANY'サブクエリによって返される最小値を超えています。'= ANY'サブクエリによって返される任意の値に等しい(INと同じ)。'[NOT] EXISTS'行はサブクエリの値と一致する必要があります

37.You need to find the salaries for all employees who are not in the department 100. Which of the following queries will give you the required result?

  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;

Answer: 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.What will be the result of the query given above?

  1. 10
  2. NULL
  3. ORAエラー
  4. 0

Answer: D. 内部サブクエリの値の1つがNULLです(すべての従業員がマネージャーではありません!)

39.Which of the following WHERE clauses should be added / modified to the above query to give the expected results?

  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);

Answer: B, D. サブクエリにNULL値が含まれる可能性がある場合は、NOT IN演算子を使用しないでください。使用する場合は、追加のWHERE句(オプションD)を使用してサブクエリを変更してください。

40.What is true about sub-queries in general?

  1. サブクエリは、メインクエリとは別に実行する必要があります
  2. サブクエリはユーザーの意志で実行でき、メインクエリの実行とは関係ありません。
  3. サブクエリは、内部クエリの結果がメインクエリによって使用される2つの連続したクエリに相当します
  4. 上記のすべて

Answer: C.

41. Which of the following is true about sub-queries?

  1. サブクエリは0以上の行を返すことができます
  2. サブクエリはSELECT句でのみ使用できます
  3. サブクエリのネストは2レベルに制限されています
  4. グループ関数はサブクエリでは使用できません

Answer: A. サブクエリは、別のクエリのSELECT、FROM、HAVING、またはWHERE句にネストされた完全なクエリです。サブクエリは括弧で囲み、少なくともSELECT句とFROM句を含める必要があります。単一行のサブクエリは、最大1つの値を返すことができます。複数列のサブクエリは、複数の列を外部クエリに返します。

42. Examine the table structure as given.

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. 使用されているNOTIN演算子が無効です
  2. サブクエリのWHERE句が正しく記述されていない
  3. サブクエリのSELECT句の列は、メインクエリで使用される不等式がある場合にのみ1つにする必要があります
  4. サブクエリはメインクエリと同じテーブルを使用します

Answer: C. サブクエリで選択される列は、比較演算子の反対側と同じである必要があります。データ型または列数が等しくないと、ORAエラーが発生します。

43.A report has to be extracted which displays all the departments that have one or more employees assigned to them. Which of the following queries will give the required output? (Consider the table structure as given)

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);

Answer: A, D.

44.What is the maximum level of sub-queries allowed in Oracle in a single SQL statement?

  1. 20
  2. 50
  3. Unlimited
  4. 255

Answer: D. Oracleは、255レベルへのクエリのネストをサポートしています。

45. What should be the best practice to follow when we know what values we need to pass on to the main query in Oracle queries?

  1. GROUPBYの使用
  2. サブクエリの使用
  3. HAVINGの使用
  4. 上記のどれでもない

Answer: D. サブクエリの結果がNULLになる可能性があり、その結果、メインの結果の行が0になります。したがって、必要な値がわかっている場合にのみ使用することをお勧めします。

Examine the table structure as given. Consider the following query and answer the questions 46 and 47 that follow:

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.You need to find all the employees whose job ID is the same as that of an employee with ID as 210. Which of the following WHERE clauses would you add / modify to achieve this result? (Consider the table structure as given

  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);

Answer: A.

47.Assume that you change the WHERE clause as given in the option A in question 46 as the following.

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

この変更の結果はどうなりますか?

  1. 結果は同じになります
  2. 実行時にORAエラーがスローされました
  3. 結果は異なります
  4. クエリは正常に実行され、0行になります。

Answer: B. サブクエリは、指定された変更に対して複数の結果を提供するため、複数行の演算子は、上記のメインクエリの「=」を置き換える必要があります。

48.Examine the table structures as shown in the exhibit below.

給与が最も高い従業員の名前を表示する必要があります。次の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;

Answer: B, C. サブクエリは、演算子のどちらの側にも書き込むことができます

49.What is the sub-query in the FROM clause of an SQL statement? (Choose the most appropriate answer)

  1. 単一行のサブクエリ
  2. 複数行のサブクエリ
  3. インラインビュー
  4. 相互に関連するサブクエリ

Answer: C. SELECTステートメントのFROM句にサブクエリが表示されると、インラインビューが形成されます。Oracleは、クエリ実行用の一時ビューを内部的に作成します。

50.What is the maximum number of nesting level allowed in an Inline View type sub-query?

  1. 255
  2. 300
  3. 216
  4. Unlimited

Answer: D. 結合できるテーブルの数に制限はないため、クエリのインラインビューの数に制限はありません。

51.What is true about co-related sub-queries?

  1. メインクエリで使用されるテーブルは、相互に関連するサブクエリでも使用されます
  2. メインクエリで使用される列を参照するサブクエリは、相互関連サブクエリと呼ばれます
  3. 括弧なしで記述されたサブクエリは、相互関連サブクエリと呼ばれます。
  4. メインクエリで使用されているものとは異なるテーブルを強制的に使用するサブクエリは、相互関連サブクエリと呼ばれます。

Answer: B. 相関サブクエリは外部クエリの列を参照し、外部クエリのすべての行に対して1回サブクエリを実行しますが、非相関サブクエリは最初にサブクエリを実行し、値を外部クエリに渡します。

52.Which of the following statements cannot be parent statements for a sub-query?

  1. SELECT
  2. GROUP BY
  3. UPDATE
  4. DELETE

Answer: B. 残りのオプションは、サブクエリのメインクエリ(親クエリ)に含めることができます。

53.What is true about a co-related sub-query?

  1. 親クエリに対して1回だけ評価されます
  2. 親クエリに対して3回だけ評価されます
  3. 親サブクエリによって処理される行ごとに1回評価されます
  4. 上記のすべて

Answer: C. 相関サブクエリは、外部クエリの列を参照し、外部クエリのすべての行に対して1回サブクエリを実行します。また、EXISTS演算子を使用して、関係またはリンクが存在するかどうかをテストします。

54.Examine the given table structure. You need to write a query which returns the names of the employees whose salaries exceed their respective department's average salary. Which of the following will work? (Choose the most appropriate answer)

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 ;

Answer: A. ここで部門IDが取得され、親クエリの評価に使用されます。その行の給与がその行の部門の平均給与よりも大きい場合、その結果が返されます。

55.Examine the given table structure. Which of the following queries will display duplicate records in a table EMPLOYEES?

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);

Answer: A. 相関サブクエリは、外部クエリの列を参照し、外部クエリのすべての行に対して1回サブクエリを実行します。また、EXISTS演算子を使用して、関係またはリンクが存在するかどうかをテストします。これを使用して、重複が1つの列または列のセットの対象となるテーブル内の重複する行を見つけることができます。

Examine the structures for the tables DEPARTMENTS and EMPLOYEES and answer the questions 56 and 57 that follow.

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.Which of the following queries will display the system date and count of records in the DEPARTMENTS and EMPLOYEES table?

  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;

Answer: D. 単一行のサブクエリは、外部クエリのSELECT句にネストすることもできます。この場合、サブクエリが返す値は、外部クエリが生成する出力のすべての行で使用できます。通常、この手法は、サブクエリから生成された値を使用して計算を実行するために使用されます。

57.Which of the following queries will tell whether a given employee is a manager in a Company '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 ;

Answer: C.

Examine the exhibit and answer the question 58 that follows:

58.Which of the following queries will give you maximum salary of an employee in a particular city?

  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);

Answer: C. 複数列のサブクエリが外部クエリのFROM句で使用されると、外部クエリの他の句から参照できる一時テーブルが作成されます。この一時テーブルは、正式にはインラインビューと呼ばれます。サブクエリの結果は、FROM句の他のテーブルと同様に扱われます。一時テーブルにグループ化されたデータが含まれている場合、グループ化されたサブセットは、テーブル内のデータの個別の行として扱われます。

Examine the table structures as given below.

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.Which of the following queries can replace the above query by using sub-queries giving the same result?

  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);

Answer: A, B.

60.Assume that the sub-query as shown in the query given above is modified to the following.

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

この変更の結果はどうなりますか?(最も適切な答えを選択してください)

  1. サブクエリからフェッチされたdepartment_idを並べ替え、昇順で表示します
  2. ORDERBY句にはGROUPBY句を付ける必要があるため、ORAエラーがスローされます。
  3. サブクエリ内でORDERBY句を使用できないため、ORAエラーがスローされます。
  4. 正常に実行されます。

Answer: C. FROM句のサブクエリを除き、サブクエリにORDER BY句を含めることはできません。出力を特定の順序で表示する必要がある場合は、外部クエリの最後の句としてORDERBY句を含めます。

61.Assume that the query given above is modified as the below one.

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. サブクエリ内でORDERBY句を使用できないため、ORAエラーがスローされます。
  4. 上記のどれでもない

Answer: D. FROM句のサブクエリを除き、サブクエリにORDER BY句を含めることはできません。出力を特定の順序で表示する必要がある場合は、外部クエリの最後の句としてORDERBY句を含めます。

62.Which of the following can be used to order results in a sub-query?

  1. ORDER BY
  2. HAVING
  3. GROUP BY
  4. 上記のすべて

Answer: C. デフォルトでは、GROUPBY句はサブクエリで順序付けを実行します。

Examine the exhibit below and answer the questions 63 to 65 that follow:

次のクエリについて考えてみます。

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.What will be the outcome of the query given above?

  1. 文字「S%」で始まるすべてのAU_IDおよびAU_TITLEを指定します
  2. これは、文字「S%」で始まるすべてのAU_IDおよびAU_TITLEを、タイトルの昇順で示します。
  3. ORAエラーをスローします
  4. 0の値を返します

Answer: C. CLOB、BLOB、NCLOB、またはARRAYを含む列は、サブクエリでは使用できません。

64. What will be the outcome of the following query?

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. 関数MAXが使用されるため、GROUPBY句を使用する必要があります
  2. 両方のサブクエリで、同じ外部クエリで同じ部門IDを使用することはできません
  3. BETWEEN演算子はサブクエリでは使用できません
  4. SELECT句には、アステリックス(*)ではなく、言及された列を含める必要があります。

Answer: C. BETWEEN演算子は、サブクエリ内で使用できますが、サブクエリでは使用できません。

65.What is true about using NOT IN when writing queries with sub-queries in them?

  1. NOT INはすべてのNULL値を無視し、NOTNULL値のみを提供します
  2. NOT INは、すべてのNULL値を最後に置き、NOTNULLを最初に表示します。
  3. 結果セットにNULL値が予想される場合は、NOTINを使用しないでください。
  4. NOT INは、演算子INの否定であり、警告なしに変更できます。

Answer: C. SQLはNULL値を別の方法で処理するため、結果セットにNULLが含まれている可能性がある場合は、NOTINを回避することをお勧めします。

Consider the following table structures and answer the questions 66 to 72 that follow:

66. You need to find out the names and IDs of the departments in which the least salary is greater than the highest salary in the department 10. Which of the following queries will give the required result.

  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
    		)

Answer: A.

67.Write a query to find the employees whose salary is equal to the salary of at least one employee in department of id 10. (Choose the best answer)

  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
    		)

Answer: A, B.

68.You need to find out all the employees who have salary greater than at least one employee in the department 10. Which of the following queries will give you the required output?

  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
    		)

Answer: B.

69.You need to find out all the employees who have salary lesser than the salary of all the employees in the department 10. Which of the following queries will give you the required output?

  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
    		)

Answer: C. 複数行のサブクエリは、複数行の結果を返します。複数行のサブクエリで使用できる演算子には、IN、ALL、ANY、およびEXISTSが含まれます。複数列のサブクエリは、外部クエリに複数の列を返します。データの列は、サブクエリのSELECT句にリストされているのと同じ順序で外部クエリに渡されます。

70.You need to find out all the employees who have their manager and department matching with the employee having an Employee ID of 121 or 200. Which of the following queries will give you the required output?

  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)
    		)

Answer: A, D. 複数行のサブクエリは、複数行の結果を返します。複数行のサブクエリで使用できる演算子には、IN、ALL、ANY、およびEXISTSがあります。複数列のサブクエリは、複数の列を外部クエリに返します。データの列は、サブクエリのSELECT句にリストされているのと同じ順序で外部クエリに渡されます。

71.You need to find the department name of an employee with employee ID 200. Which of the following queries will be correct? (Choose the most appropriate answer)

  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

Answer: C.

72.You need to find the highest earning employee with the job ID as 'SA_REP'. Which of the following queries will be correct? (Choose the most appropriate answer)

  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'
    )

Answer: B.

Consider the EMPLOYEES table structure as shown in the exhibit and answer the questions 73 to 77 that follow:

73.You need to find the job which has at least one employee in it. Which of the following queries will be correct? (Choose the most appropriate answer)

  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 )

Answer: A. EXISTS演算子は、クエリ間のレコードをチェックして照合するために使用されます。BOOLEAN値を返します。相関サブクエリは、外部クエリの列を参照し、外部クエリのすべての行に対して1回サブクエリを実行します。また、EXISTS演算子を使用して、関係またはリンクが存在するかどうかをテストします。無相関サブクエリは、最初にサブクエリを実行し、その値を外部クエリに渡します。

74.You need to find the job which has no employees in it. Which of the following queries will be correct? (Choose the most appropriate answer)

  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 )

Answer: B. NOT EXISTSは、EXISTSの否定演算子です。

75.You need to find the 3rd maximum salary from the EMPLOYEES table. Which of the following queries will give you the required results? (Choose the most appropriate answer)

  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 
    		);

Answer: D.

76. You need to find the maximum salary by using the user input for getting the value of N. Which of the following queries will give you the required results? (Choose the most appropriate answer)

  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 ;

Answer: C. ROWNUMは、n次の結果を見つけるために使用される疑似列です。

77.What will happen if a value is provided to the &N variable in the above query (option C in question 76) does not match with any row? (Choose the best answer)

  1. ステートメントはORAエラーをスローします
  2. ステートメントは、テーブル内のすべての行を返します
  3. ステートメントは、出力結果としてNULLを返します。
  4. ステートメントは結果に行を返しません。

Answer: D.

78.What is the maximum level up to which Sub-queries can be nested?

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

Answer: A.

79.What is true about the EXISTS operator in SQL queries with respect to sub-queries?

  1. サブクエリで選択された列は重要です
  2. 内部クエリは行を返す必要があります。結果は重要であり、SELECTEDではありません。
  3. AもBも
  4. AでもBでもない

Answer: B.

80.What is true about the ANY operator used for sub-queries?

  1. リスト/サブクエリのすべての値に一致する行を返します
  2. リスト/サブクエリの最初の5つの値に一致する行を返します
  3. リスト/サブクエリの任意の値に一致する行を返します
  4. リスト/サブクエリですべての行が一致すると、値0を返します

Answer: C.

81.What is true about the ALL operator used for sub-queries? (Choose the most appropriate answer.)

  1. リスト/サブクエリのすべての値に一致する行を返します
  2. リスト/サブクエリの一部の値にのみ一致する行を返します
  3. リスト/サブクエリですべての値が一致する場合にのみ行を返します
  4. 上記のすべて

Answer: C. '> ALL'サブクエリによって返される最大値を超えています。'<ALL'サブクエリによって返される最小値未満。'<ANY'サブクエリによって返される最大値未満。'> ANY'サブクエリによって返される最小値を超えています。'= ANY'サブクエリによって返される任意の値に等しい(INと同じ)。'[NOT] EXISTS'行はサブクエリの値と一致する必要があります。

82.What is true about using sub-queries in INSERT statements in Oracle?

  1. INSERT句で制限なく使用できます
  2. これらは、数値に対してのみINSERT句で使用できます。
  3. サブクエリのSELECTリストは、INSERTステートメントの列リストと同じである必要があります。
  4. 上記のどれでもない

Answer: C.

Examine the table structures as given below and answer the questions 83 to 86 that follow.

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.You need to find the details of all employees who were hired for the job ID 'SA_REP' in the month of June, 2013. Which of the following queries will give the required results? (Consider the table structure as given)

  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'
    );

Answer: B.

84.Which of the following statements are equivalent?

  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. 上記のどれでもない

Answer: A, B.

85.Consider the following two queries:

Query 1:
SELECT first_name 
FROM employees e join departments d
ON e.department_id  = d.department_id
WHERE department_name='ACCOUNTS';
Query 2:
SELECT first_name 
FROM employees  e 
WHERE department_id  = ANY (SELECT department_id 		FROM departments d 
		WHERE department_name='ACCOUNTS');

2つのステートメントについて何が言えますか?

  1. どちらのクエリも同じ結果を生成するはずです。
  2. どちらのクエリもエラーをスローします。
  3. 同じ名前の部門が2つある場合、両方のクエリは失敗します。
  4. 'ACCOUNTS'という名前の部門が複数ある場合でも、両方のクエリは正常に実行されます。

Answer: A, D.

86.You need to display all the employees who have the highest salary in a department 100. You fire a query as below.

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に置き換えられると、正常に実行され、必要な結果が得られます。

Answer: B, D. >同じ給与の従業員が2人いて、部門100で最も稼いでいる可能性があるため、ALLは必要な結果を出しません。

Consider table structures as shown in the exhibit and answer the questions 87 to 89 that follow:

87.You need to fetch the first names (in a reverse alphabetical order) of all the employees in the department ID = 100 and who have the maximum salary in the JOB ID = 'SA_REP'. Which of the following queries will give the required output? (Choose the most appropriate output)

  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 ;

Answer: C.

88.In the queries given above (option C is the correct answer), you need to display all the employees with the JOB ID 'SA_REP' who have the maximum salary in the department 100. Which of the following queries will give the required output?

  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 ;

Answer: A.

89.Select the query which will give you the maximum salary and maximum comm percentage. The query should also give the maximum comm percentage paid if the highest salaried employee gets the maximum comm percentage.

  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;

Answer: D. 単一行のサブクエリは、外部クエリのSELECT句にネストすることもできます。この場合、サブクエリが返す値は、外部クエリが生成する出力のすべての行で使用できます。通常、この手法は、サブクエリから生成された値を使用して計算を実行するために使用されます。

90.What is true about the sub-queries used in the SELECT clause of an SQL statement?

  1. これらのサブクエリは、FROM句またはWHERE句で使用されるものとすべての面で同じです。
  2. これらのサブクエリは、強制的に単一行のサブクエリである必要があります
  3. このようなサブクエリを作成するときに、複数行の演算子を使用できます
  4. 上記のどれでもない

Answer: B.

91.What will be the outcome of the following query? (Consider the table structure as given)

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行で正常に実行されます

Answer: C. 複数行のサブクエリは、SQLステートメントのSELECT句では使用できません。単一行のサブクエリのみを外部クエリのSELECT句にネストできます。

Examine the given table structure. Consider the following query and answer the questions 92 to 95 that follow:

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.Which of the following queries are equivalent to the above query?

  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;

Answer: C. 質問の後にリストが続く場合、ALL句が簡略化されて表示されます。

93. If in the above query the list (10,20,30) is replaced by a sub-query, which of the following queries will give the required output for the department number 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);

Answer: B. 質問の後にサブクエリが続く場合、ALL句が簡略化されて表示されます

94.With respect to the question 14 above, what among the following will be an equivalent query if ALL has to be replaced with ANY?

  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));

Answer: D. '<= ANY'の使用中に使用されるNOT演算子は、サブクエリによって返される結果の否定に使用されます

95.With respect to the question 94, if the operator ANY is not to be used, which of the following queries will be correct?

  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. AまたはBのどちらか
  4. 上記のどれでもない

Answer: B. 相関サブクエリは、外部クエリの列を参照し、外部クエリのすべての行に対して1回サブクエリを実行します。また、EXISTS演算子を使用して、関係またはリンクが存在するかどうかをテストします。無相関サブクエリは、最初にサブクエリを実行し、その値を外部クエリに渡します。

Examine the given table structures. Consider the following query and answer the questions 96 to 98 that follow:

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. Which of the following queries are equivalent to the above query?

  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;

Answer: A. 質問の後にリストが続く場合、ANY句が簡略化されて表示されます。

97. In the above query, if the list (10, 20, 30) is replaced by a sub-query, which of the following queries will give the required output for the department number 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);

Answer: B. 質問の後にサブクエリが続く場合、ANY句が簡略化されて表示されます

98.With respect to the question 97 above, what among the following will be an equivalent query if ANY is removed?

  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);

Answer: B. EXISTS演算子は、ANY演算子に置き換えることができます。相関サブクエリは、外部クエリの列を参照し、外部クエリのすべての行に対して1回サブクエリを実行します。また、EXISTS演算子を使用して、関係またはリンクが存在するかどうかをテストします。

99.Examine the given table structure. How many rows will get generated if the sub-query mentioned returns 0 rows?

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. AまたはBのどちらか
  4. 上記のどれでもない

Answer: B. サブクエリがゼロ行を返す場合、「> ANY」条件はFALSEと評価されるため、「行なし」が返されます。

100. A subquery must be placed in the outer query's HAVING clause if:

  1. 内部クエリは、外部クエリに返される値を参照する必要があります。
  2. 内部クエリによって返される値は、外部クエリのグループ化されたデータと比較されます。
  3. サブクエリは、外部クエリに複数の値を返します。
  4. 上記のどれでもない。サブクエリは、外部クエリのHAVING句では使用できません。

Answer: B. HAVING句は、クエリのグループ結果を何らかの条件に基づいて制限する必要がある場合に使用されます。サブクエリの結果をグループ関数と比較する必要がある場合は、内側のクエリを外側のクエリのHAVING句にネストする必要があります。