Sous-requêtes pour résoudre des questions de requêtes

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

  1. Sous-requêtes ordonnées
  2. Sous-requêtes groupées
  3. Sous-requêtes à une seule ligne
  4. Aucune de ces réponses

Answer: C. Une sous-requête est une requête complète imbriquée dans la clause SELECT, FROM, HAVING ou WHERE d'une autre requête. La sous-requête doit être placée entre parenthèses et avoir une clause SELECT et une clause FROM, au minimum. Les sous-requêtes à une seule ligne et les sous-requêtes à plusieurs lignes sont les principaux types de sous-requêtes

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

  1. Ils s'exécutent après l'exécution de la requête principale
  2. Ils s'exécutent en parallèle de la requête principale
  3. L'utilisateur peut exécuter la requête principale puis, s'il le souhaite, exécuter la sous-requête
  4. Ils s'exécutent avant l'exécution de la requête principale.

Answer: D. La sous-requête s'exécute toujours avant l'exécution de la requête principale. Les sous-requêtes sont terminées en premier. Le résultat de la sous-requête est utilisé comme entrée pour la requête externe.

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

  1. Le résultat d'une sous-requête est généralement ignoré lors de son exécution.
  2. Le résultat d'une sous-requête ne donne pas de résultat, il est simplement utile pour accélérer l'exécution de la requête principale
  3. Le résultat d'une sous-requête est utilisé par la requête principale.
  4. Le résultat d'une sous-requête est toujours NULL

Answer: C. Les sous-requêtes sont terminées en premier. Le résultat de la sous-requête est utilisé comme entrée pour la requête externe.

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

  1. SELECT
  2. WHERE
  3. COMMANDÉ PAR
  4. PAR GROUPE

Answer: A. Une sous-requête est comme toute autre requête qui doit commencer par une clause SELECT. Ils sont contenus dans une requête externe.

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

  1. En utilisant JOINS
  2. En utilisant la clause WHERE
  3. En utilisant la clause GROUP BY
  4. En écrivant une instruction SELECT intégrée dans la clause d'une autre instruction SELECT

Answer: D. Une sous-requête est une requête complète imbriquée dans la clause SELECT, FROM, HAVING ou WHERE d'une autre requête. La sous-requête doit être placée entre parenthèses et avoir une clause SELECT et une clause FROM, au minimum.

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

  1. Quand nous avons besoin de résumer des valeurs
  2. Lorsque nous devons convertir des valeurs de caractères en valeurs de date ou de nombre
  3. Lorsque nous devons sélectionner des lignes dans une table avec une condition qui dépend des données de la même table ou d'une table différente.
  4. Aucune de ces réponses

Answer: C.

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

  1. HAVING
  2. WHERE
  3. FROM
  4. Tout ce qui précède

Answer: D. Une sous-requête n'est pas différente d'une requête normale. Il peut utiliser toutes les clauses primaires d'une instruction SELECT.

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

  1. >=
  2. <
  3. =
  4. Tout ce qui précède

Answer: D. Les opérateurs à une seule ligne incluent =,>, <,> =, <= et <>.

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

  1. IN
  2. ANY
  3. ALL
  4. Tout ce qui précède

Answer: D. Les sous-requêtes sur plusieurs lignes renvoient plusieurs lignes de résultats. Les opérateurs qui peuvent être utilisés avec des sous-requêtes sur plusieurs lignes incluent IN, ALL, ANY et EXISTS.

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

  1. Il reste dans le cache tampon
  2. Il reste à l'intérieur de la sous-requête et peut être utilisé plus tard si nécessaire
  3. Il est utilisé pour compléter la requête externe (principale)
  4. A et C

Answer: C. Les sous-requêtes sont terminées en premier. Le résultat de la sous-requête est utilisé comme entrée pour la requête externe.

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. Aucune de ces réponses

Answer: A. Dans l'option 'A', la sous-requête interne donne le salaire du VP à la suite de la requête externe.

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

  1. Les sous-requêtes peuvent être écrites de chaque côté d'un opérateur de comparaison
  2. La parenthèse n'est pas obligatoire pour les sous-requêtes
  3. Les sous-requêtes à une seule ligne peuvent utiliser des opérateurs à plusieurs lignes, mais l'inverse n'est pas possible
  4. Tout ce qui précède

Answer: A. Les sous-requêtes peuvent être placées sur le côté gauche ou droit de l'opérateur de comparaison en fonction de l'indentation et de l'utilisabilité de la requête.

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. Il s'exécute avec succès en donnant les résultats souhaités
  2. Il s'exécute avec succès mais ne donne pas les résultats souhaités
  3. Il jette une erreur ORA
  4. Il s'exécute avec succès et donne deux valeurs pour chaque ligne obtenue dans le jeu de résultats

Answer: C. Les opérateurs à plusieurs lignes ne peuvent pas être utilisés dans les sous-requêtes à une seule ligne et vice versa.

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

  1. Ils donnent un résultat de la requête principale
  2. Ils ne donnent qu'une seule ligne dans le jeu de résultats
  3. Ils ne renvoient qu'une seule ligne de l'instruction SELECT interne
  4. Ils donnent plusieurs lignes de la requête principale (externe)

Answer: C. Une sous-requête à une seule ligne peut renvoyer au maximum une valeur.

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

  1. Ils peuvent renvoyer plusieurs colonnes à la suite de la requête interne
  2. Ils renvoient plusieurs lignes dans la requête principale mais un seul jeu de résultats dans la requête interne
  3. Ils renvoient une seule ligne dans la requête principale mais plusieurs lignes dans la sous-requête interne
  4. Ils renvoient plus d'une ligne à partir de l'instruction SELECT interne

Answer: D. Les sous-requêtes multi-colonnes renvoient plus d'une colonne dans leur jeu de résultats, les sous-requêtes multi-lignes renvoient plus d'une ligne à partir de la requête interne.

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

  1. Ils ne retournent qu'une seule ligne
  2. Ils utilisent des opérateurs à une seule ligne
  3. Les deux, A et B
  4. Aucune de ces réponses

Answer: C.

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

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

Answer: A. Les opérateurs à une seule ligne incluent =,>, <,> =, <= et <>. Les opérateurs à plusieurs lignes pouvant être utilisés avec des sous-requêtes à plusieurs lignes incluent IN, ALL, ANY et 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» est plus approprié que «C» car il filtre sur l'identifiant d'employé qui est unique et garantit que la sous-requête ne retournera qu'une seule ligne. «C» peut échouer s'il y a plus d'un employé avec le même prénom et le même nom.

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. Plusieurs sous-requêtes peuvent être écrites dans une instruction SQL pour ajouter plusieurs conditions.

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

  1. Sous-requête à une seule ligne
  2. Sous-requête sur plusieurs lignes
  3. Les deux, A et B
  4. Sous-requête en ligne

Answer: A. Les questions 18e et 19e données ci-dessus montrent les sous-requêtes d'utilisation dans une instruction SELECT.

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

je. Les requêtes internes peuvent obtenir des données à partir d'une seule table

ii. Les requêtes internes peuvent obtenir des données de plusieurs tables

Laquelle des affirmations ci-dessus est vraie?

  1. (i)
  2. (ii)
  3. Les deux (i) et (ii)
  4. Ni (i) ni (ii)

Answer: B. Les sous-requêtes peuvent extraire des données de plusieurs tables.

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. Il s'exécute avec succès et donne aux employés qui ont un salaire égal au salaire maximum.
  2. Il s'exécute avec succès mais ne donne pas les résultats requis
  3. Il génère une erreur lorsqu'une fonction de groupe est utilisée dans la sous-requête
  4. Il génère une erreur car une sous-requête à une seule ligne doit contenir un opérateur à plusieurs lignes

Answer: A. Une fonction de groupe peut être utilisée dans une sous-requête.

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. Il s'exécute avec succès et donne les noms et le salaire minimum supérieur au département 100 de tous les employés
  2. Il s'exécute avec succès et donne les salaires des employés du département 100
  3. Il s'exécute avec succès et donne les noms et les salaires minima de tous les employés.
  4. Il jette une erreur.

Answer: A. La clause HAVING peut être utilisée dans les sous-requêtes comme indiqué

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. Les sous-requêtes peuvent utiliser les fonctions de groupe et la clause HAVING pour restreindre les groupes.

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. La clause GROUP BY n'est pas requise dans la sous-requête
  2. Une fonction ne peut pas être utilisée dans une instruction SELECT de sous-requête
  3. La sous-requête à une seule ligne donne plusieurs enregistrements
  4. L'utilisation de l'opérateur "=" n'est pas valide; un opérateur IN fonctionnera correctement

Answer: C, D. La clause GROUP BY donne le commission_pct minimum pour chaque département et, par conséquent, plusieurs résultats sont récupérés dans la requête principale donnant une erreur.

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. La requête génère une erreur ORA car la sous-requête n'est pas valide.

Answer: C. Puisqu'il n'y a aucun employé avec job_id "XX" dans l'entreprise, la sous-requête ne renvoie aucun résultat, qui, lorsqu'elle est assimilée à job_id dans la requête principale, donne un 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. Erreur ORA

Answer: D. L'exécution de la requête déclenche l'exception «ORA-01427: la sous-requête à une seule ligne renvoie plusieurs lignes».

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

  1. <=
  2. TOUT> =
  3. !=
  4. >=

Answer: B. Les sous-requêtes sur plusieurs lignes renvoient plus d'une ligne de résultats.Les opérateurs pouvant être utilisés avec des sous-requêtes sur plusieurs lignes sont IN, ALL, ANY et EXISTS.Les opérateurs multi-lignes IN, ANY, ALL doivent être utilisés avec des opérateurs sur une seule ligne, comme indiqué dans l'option 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. Les opérateurs multi-lignes renvoient des résultats booléens. Comme il y a des résultats de salaire dans le département 100, il renvoie VRAI. S'il n'y a aucun résultat, il est évalué à FALSE.

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

  1. Il s'exécute avec succès en donnant le seul résultat
  2. Il exécute avec succès en donnant les salaires de tous les employés
  3. NULL
  4. Il jette une erreur ORA

Answer: D. Si le département 100 a un résultat (sous-requête à une seule ligne), l'opérateur <ANY donne l'erreur car il s'agit d'un opérateur à plusieurs lignes.

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

  1. Oracle traitera chaque valeur du salaire renvoyée par la sous-requête comme il le fait avec l'opérateur IN
  2. Il n'y aura aucune différence dans les résultats
  3. Les résultats seront différents
  4. L'exécution lèvera une erreur ORA

Answer: A. = L'opérateur ANY est équivalent à l'opérateur IN.

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

  1. Il donne la valeur maximale du salaire
  2. Il donne la valeur minimale du salaire
  3. Cela signifie qu'il donne les valeurs qui sont inférieures aux plus élevées
  4. Aucune de ces réponses

Answer: C. L'opérateur multi-lignes <ANY évalue les instructions "Inférieur au maximum" de la sous-requête. '> ALL' Plus que la valeur la plus élevée renvoyée par la sous-requête. '<ALL' Inférieur à la valeur la plus basse renvoyée par la sous-requête. '<ANY' Inférieur à la valeur la plus élevée renvoyée par la sous-requête. '<ANY' Plus que la valeur la plus basse renvoyée par la sous-requête. '= ANY' Égal à toute valeur renvoyée par la sous-requête (identique à IN). La ligne «[NOT] EXISTS» doit correspondre à une valeur de la sous-requête

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

  1. Il donne le salaire maximum
  2. Il ne trouve que le salaire maximum de la sous-requête
  3. Ça donne plus que le salaire minimum
  4. Il donne le salaire minimum

Answer: C. L'opérateur multi-lignes> ANY évalue les instructions "Supérieur au minimum" de la sous-requête. '> ALL' Plus que la valeur la plus élevée renvoyée par la sous-requête. '<ALL' Inférieur à la valeur la plus basse renvoyée par la sous-requête. '<ANY' Inférieur à la valeur la plus élevée renvoyée par la sous-requête. '> ANY' Plus que la valeur la plus basse renvoyée par la sous-requête. '= ANY' Égal à toute valeur renvoyée par la sous-requête (identique à IN). La ligne «[NOT] EXISTS» doit correspondre à une valeur de la sous-requête

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

Quelle clause WHERE parmi les suivantes est équivalente à celle donnée dans la requête ci-dessus? (Supposons que les salaires sont de 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. Lorsque l'opérateur IN est utilisé, Oracle traite les résultats individuels de la sous-requête comme indiqué dans l'option 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. <TOUT signifie moins que le minimum. '> ALL' Plus que la valeur la plus élevée renvoyée par la sous-requête. '<ALL' Inférieur à la valeur la plus basse renvoyée par la sous-requête. '<ANY' Inférieur à la valeur la plus élevée renvoyée par la sous-requête. '> ANY' Plus que la valeur la plus basse renvoyée par la sous-requête. '= ANY' Égal à toute valeur renvoyée par la sous-requête (identique à IN). La ligne «[NOT] EXISTS» doit correspondre à une valeur de la sous-requête

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. Il s'exécutera avec succès en donnant le même résultat.
  2. Cela lancera une erreur ORA
  3. Il s'exécutera avec succès mais fournira les détails des employés qui ont des salaires inférieurs à tous les employés avec job_id 'FI_ACCOUNTANT'.
  4. Aucune de ces réponses

Answer: C. > TOUT signifie moins que le minimum. '> ALL' Plus que la valeur la plus élevée renvoyée par la sous-requête. '<ALL' Inférieur à la valeur la plus basse renvoyée par la sous-requête. '<ANY' Inférieur à la valeur la plus élevée renvoyée par la sous-requête. '> ANY' Plus que la valeur la plus basse renvoyée par la sous-requête. '= ANY' Égal à toute valeur renvoyée par la sous-requête (identique à IN). La ligne «[NOT] EXISTS» doit correspondre à une valeur de la sous-requête

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 peut être utilisé avec les opérateurs multi-lignes IN, ANY et ALL.

Examinez la structure du tableau comme indiqué. Examinez la question suivante et répondez aux questions 38 et 39 qui suivent. Vous devez trouver les employés qui n'ont pas de subordonné qui leur relève. (Supposons qu'il y ait 0 résultats attendus)

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. Erreur ORA
  4. 0

Answer: D. L'une des valeurs de la sous-requête interne est NULL (tous les employés ne sont pas des managers!)

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. Si la sous-requête est susceptible d'avoir des valeurs NULL, n'utilisez pas l'opérateur NOT IN ou si vous utilisez, modifiez la sous-requête avec une clause WHERE supplémentaire (option D)

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

  1. Les sous-requêtes doivent être exécutées séparément des requêtes principales
  2. Les sous-requêtes peuvent être exécutées à la volonté de l'utilisateur, elles ne sont pas liées à l'exécution de la requête principale
  3. Les sous-requêtes sont égales à deux requêtes séquentielles où les résultats de la requête interne sont utilisés par la requête principale
  4. Tout ce qui précède

Answer: C.

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

  1. Une sous-requête peut renvoyer 0 ou plusieurs lignes
  2. Une sous-requête ne peut être utilisée que dans la clause SELECT
  3. L'imbrication des sous-requêtes est limitée à 2 niveaux
  4. Les fonctions de groupe ne peuvent pas être utilisées dans les sous-requêtes

Answer: A. Une sous-requête est une requête complète imbriquée dans la clause SELECT, FROM, HAVING ou WHERE d'une autre requête. La sous-requête doit être placée entre parenthèses et comporter au minimum une clause SELECT et une clause FROM. Une sous-requête à une seule ligne peut renvoyer au maximum une valeur. Les sous-requêtes à plusieurs colonnes renvoient plusieurs colonnes à la requête externe.

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)

Considérez la requête suivante.

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

Cette requête renvoie une erreur. Quelle est la raison de l'erreur?

  1. L'opérateur NOT IN utilisé n'est pas valide
  2. La clause WHERE dans la sous-requête n'est pas écrite correctement
  3. La colonne de la clause SELECT de la sous-requête ne doit être qu'une lorsqu'il existe une inégalité utilisée dans la requête principale
  4. La sous-requête utilise la même table que la requête principale

Answer: C. Les colonnes sélectionnées dans la sous-requête doivent être identiques à celles de l'autre côté de l'opérateur de comparaison. Toute inégalité de type de données ou de nombre de colonnes entraînerait une erreur 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 prend en charge l'imbrication des requêtes à 255 niveaux.

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. Utilisation de GROUP BY
  2. Utilisation de sous-requêtes
  3. Utilisation de HAVING
  4. Aucune de ces réponses

Answer: D. Il peut devenir possible que les sous-requêtes donnent un résultat NULL, ce qui donne 0 ligne dans le résultat principal; c'est donc une bonne pratique de ne les utiliser que si nous savons de quelles valeurs nous avons besoin.

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

Quel sera le résultat de ce changement?

  1. Les résultats seront les mêmes
  2. Erreur ORA lancée lors de l'exécution
  3. Les résultats seront différents
  4. La requête s'exécutera avec succès en donnant 0 lignes.

Answer: B. La sous-requête donne plus d'un résultat sur le changement donné et donc un opérateur multi-lignes doit remplacer le "=" dans la requête principale donnée ci-dessus.

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

Vous devez afficher les noms des employés qui ont le salaire le plus élevé. Laquelle des instructions SQL suivantes sera correcte?

  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. Les sous-requêtes peuvent être écrites de chaque côté de l'opérateur

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

  1. Sous-requête à une seule ligne
  2. Sous-requête multi-lignes
  3. Vue en ligne
  4. Sous-requête co-liée

Answer: C. Si une sous-requête apparaît dans la clause FROM des instructions SELECT, elle forme une vue en ligne. Oracle crée en interne une vue temporaire pour l'exécution de la requête.

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. Comme il n'y a pas de limite sur le nombre de tables qui peuvent être jointes, il n'y a pas de limite sur le nombre de vues en ligne dans une requête.

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

  1. Les tables utilisées dans la requête principale sont également utilisées dans une sous-requête co-liée
  2. Les sous-requêtes qui référencent une colonne utilisée dans la requête principale sont appelées sous-requêtes co-liées
  3. Les sous-requêtes écrites sans parenthèses sont appelées sous-requêtes co-liées
  4. Les sous-requêtes qui utilisent obligatoirement des tables différentes de celles utilisées dans la requête principale sont appelées sous-requêtes co-liées

Answer: B. La sous-requête corrélée fait référence à une colonne dans la requête externe et exécute la sous-requête une fois pour chaque ligne de la requête externe tandis que la sous-requête non corrélée exécute la sous-requête en premier et transmet la valeur à la requête externe.

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

  1. SELECT
  2. PAR GROUPE
  3. UPDATE
  4. DELETE

Answer: B. Le reste des options peut se trouver dans la requête principale (requête parente) d'une sous-requête.

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

  1. Il n'est évalué qu'une seule fois pour la requête parent
  2. Il n'est évalué que trois fois pour la requête parente
  3. Il est évalué une fois pour chaque ligne traitée par la sous-requête parent
  4. Tout ce qui précède

Answer: C. La sous-requête corrélée fait référence à une colonne dans la requête externe et exécute la sous-requête une fois pour chaque ligne de la requête externe; et l'opérateur EXISTS est utilisé pour tester si la relation ou le lien est présent.

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. Ici, l'ID de service est obtenu, utilisé pour évaluer la requête parente et si le salaire de cette ligne est supérieur au salaire moyen des départements de cette ligne, ce résultat est renvoyé.

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. La sous-requête corrélée fait référence à une colonne dans la requête externe et exécute la sous-requête une fois pour chaque ligne de la requête externe; et l'opérateur EXISTS est utilisé pour tester si la relation ou le lien est présent. Il peut être utilisé pour rechercher les lignes dupliquées dans une table où la duplicité est soumise à une colonne ou à un ensemble de colonnes.

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. Une sous-requête à une seule ligne peut également être imbriquée dans la clause SELECT de la requête externe. Dans ce cas, la valeur renvoyée par la sous-requête est disponible pour chaque ligne de sortie générée par la requête externe. En règle générale, cette technique est utilisée pour effectuer des calculs avec une valeur produite à partir d'une sous-requête.

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. Lorsqu'une sous-requête à plusieurs colonnes est utilisée dans la clause FROM de la requête externe, elle crée une table temporaire qui peut être référencée par d'autres clauses de la requête externe. Cette table temporaire est plus formellement appelée une vue en ligne. Les résultats de la sous-requête sont traités comme n'importe quelle autre table dans la clause FROM. Si la table temporaire contient des données groupées, les sous-ensembles groupés sont traités comme des lignes de données séparées dans une table.

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)

Examinez la question suivante et répondez aux questions 59 à 62 qui suivent.

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

Quel sera le résultat de ce changement? (Choisissez la réponse la plus appropriée)

  1. Il ordonnera le department_id extrait de la sous-requête et les affichera par ordre croissant
  2. Cela lancera une erreur ORA car la clause ORDER BY doit être accompagnée de la clause GROUP BY
  3. Il lancera une erreur ORA car une clause ORDER BY ne peut pas être utilisée dans une sous-requête
  4. Il s'exécutera avec succès.

Answer: C. Une sous-requête, sauf une dans la clause FROM, ne peut pas avoir de clause ORDER BY. Si vous devez afficher la sortie dans un ordre spécifique, incluez une clause ORDER BY en tant que dernière clause de la requête externe.

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;

Quel sera le résultat de ce changement? (Choisissez la réponse la plus appropriée)

  1. Il ordonnera le department_id extrait de la sous-requête et les affichera par ordre croissant
  2. Il ordonnera le department_id extrait de la sous-requête et les affichera dans l'ordre décroissant
  3. Il lancera une erreur ORA car une clause ORDER BY ne peut pas être utilisée dans une sous-requête
  4. Aucune de ces réponses

Answer: D. Une sous-requête, sauf une dans la clause FROM, ne peut pas avoir de clause ORDER BY. Si vous devez afficher la sortie dans un ordre spécifique, incluez une clause ORDER BY en tant que dernière clause de la requête externe.

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

  1. COMMANDÉ PAR
  2. HAVING
  3. PAR GROUPE
  4. Tout ce qui précède

Answer: C. Par défaut, la clause GROUP BY effectue le tri dans une sous-requête.

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

Considérez la requête suivante:

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. Il donne tous les AU_ID et AU_TITLEs commençant par la lettre 'S%'
  2. Il donne tous les AU_ID et AU_TITLEs commençant par la lettre 'S%' triés par les titres dans l'ordre croissant
  3. Il jette une erreur ORA
  4. Il renvoie une valeur 0

Answer: C. Une colonne avec un CLOB, un BLOB, un NCLOB ou un ARRAY ne peut pas être utilisée dans une sous-requête.

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

Cette requête renvoie une erreur. Quelle est la raison de l'erreur?

  1. Une clause GROUP BY doit être utilisée lorsque la fonction MAX est utilisée
  2. Les deux sous-requêtes ne peuvent pas utiliser le même ID de service dans la même requête externe
  3. L'opérateur BETWEEN ne peut pas être utilisé avec une sous-requête
  4. La clause SELECT doit avoir des colonnes mentionnées et non un astérisque (*)

Answer: C. L'opérateur BETWEEN peut être utilisé dans une sous-requête mais pas avec une sous-requête.

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

  1. NOT IN ignore toutes les valeurs NULL et ne donne que les valeurs NOT NULL
  2. NOT IN met toutes les valeurs NULL en dernier et donne le NOT NULL à afficher en premier
  3. NOT IN ne doit pas être utilisé si une valeur NULL est attendue dans le jeu de résultats
  4. NOT IN n'est qu'une négation de l'opérateur IN et peut être modifié sans aucune mise en garde.

Answer: C. SQL gère les valeurs NULL d'une manière différente et il est donc recommandé d'éviter NOT IN si le jeu de résultats peut contenir un NULL.

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. Les sous-requêtes sur plusieurs lignes renvoient plus d'une ligne de résultats. Les opérateurs qui peuvent être utilisés avec des sous-requêtes à plusieurs lignes incluent IN, ALL, ANY et EXISTS. Les sous-requêtes à plusieurs colonnes renvoient plusieurs colonnes à la requête externe. Les colonnes de données sont transmises à la requête externe dans le même ordre dans lequel elles sont répertoriées dans la clause SELECT de la sous-requête.

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. Les sous-requêtes sur plusieurs lignes renvoient plus d'une ligne de résultats. Les opérateurs qui peuvent être utilisés avec des sous-requêtes à plusieurs lignes incluent IN, ALL, ANY et EXISTS. Les sous-requêtes à plusieurs colonnes renvoient plusieurs colonnes à la requête externe. Les colonnes de données sont transmises à la requête externe dans le même ordre dans lequel elles sont répertoriées dans la clause SELECT de la sous-requête.

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. L'opérateur EXISTS est utilisé pour vérifier et faire correspondre les enregistrements entre les requêtes. Il renvoie une valeur BOOLEAN. La sous-requête corrélée fait référence à une colonne dans la requête externe et exécute la sous-requête une fois pour chaque ligne de la requête externe; et l'opérateur EXISTS est utilisé pour tester si la relation ou le lien est présent. Une sous-requête non corrélée exécute d'abord la sous-requête et transmet la valeur à la requête externe.

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 est l'opérateur de négation pour 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 est une pseudo colonne utilisée pour trouver les résultats du nième ordre.

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. La déclaration générerait une erreur ORA
  2. L'instruction renverrait toutes les lignes de la table
  3. L'instruction renverrait NULL comme résultat de sortie.
  4. L'instruction ne renverrait aucune ligne dans le résultat.

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. Les colonnes sélectionnées dans les sous-requêtes sont importantes
  2. Les requêtes internes doivent renvoyer des lignes, tout résultat est ce qui est important, pas ce qui est SELECTED
  3. Les deux, A et B
  4. Ni A ni B

Answer: B.

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

  1. Renvoie les lignes qui correspondent à toutes les valeurs d'une liste / sous-requête
  2. Renvoie les lignes qui correspondent aux 5 premières valeurs d'une liste / sous-requête
  3. Renvoie les lignes qui correspondent à n'importe quelle valeur dans une liste / sous-requête
  4. Renvoie la valeur 0 lorsque toutes les lignes correspondent dans une liste / sous-requête

Answer: C.

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

  1. Renvoie les lignes qui correspondent à toutes les valeurs d'une liste / sous-requête
  2. Renvoie les lignes qui ne correspondent qu'à certaines valeurs d'une liste / sous-requête
  3. Renvoie des lignes uniquement si toutes les valeurs correspondent dans une liste / sous-requête
  4. Tout ce qui précède

Answer: C. '> ALL' Plus que la valeur la plus élevée renvoyée par la sous-requête. '<ALL' Inférieur à la valeur la plus basse renvoyée par la sous-requête. '<ANY' Inférieur à la valeur la plus élevée renvoyée par la sous-requête. '> ANY' Plus que la valeur la plus basse renvoyée par la sous-requête. '= ANY' Égal à toute valeur renvoyée par la sous-requête (identique à IN). La ligne «[NOT] EXISTS» doit correspondre à une valeur de la sous-requête.

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

  1. Ils peuvent être utilisés dans la clause INSERT sans aucune restriction
  2. Ils ne peuvent être utilisés dans la clause INSERT que pour les valeurs numériques
  3. La liste SELECT d'une sous-requête doit être la même que la liste des colonnes de l'instruction INSERT.
  4. Aucune de ces réponses

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. Aucune de ces réponses

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

Que peut-on dire des deux déclarations?

  1. Les deux requêtes doivent générer le même résultat.
  2. Les deux requêtes généreront une erreur.
  3. S'il existe deux services portant le même nom, les deux requêtes échoueront.
  4. Les deux requêtes s'exécuteront avec succès même s'il y a plus d'un service nommé «COMPTES».

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

Quel sera le résultat de la requête ci-dessus?

  1. Il s'exécute avec succès et donne les résultats requis
  2. Il s'exécute avec succès mais ne donne pas la sortie requise
  3. Il jette une erreur ORA lors de l'exécution
  4. Il s'exécute avec succès et donne le résultat requis lorsque> ALL est remplacé par> = ALL

Answer: B, D. > TOUS ne donneront pas le résultat requis car il peut y avoir deux employés avec le même salaire et qui sont les plus hauts revenus du département 100

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. Une sous-requête à une seule ligne peut également être imbriquée dans la clause SELECT de la requête externe. Dans ce cas, la valeur renvoyée par la sous-requête est disponible pour chaque ligne de sortie générée par la requête externe. En règle générale, cette technique est utilisée pour effectuer des calculs avec une valeur produite à partir d'une sous-requête.

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

  1. Ces sous-requêtes sont les mêmes dans tous les aspects que celles utilisées dans les clauses FROM ou WHERE
  2. Ces sous-requêtes doivent obligatoirement être des sous-requêtes à une seule ligne
  3. Nous pouvons utiliser des opérateurs multi-lignes lors de l'écriture de telles sous-requêtes
  4. Aucune de ces réponses

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. Il donne la date du système et le salaire maximum pour chaque département
  2. Il donne le salaire maximum pour tous les départements
  3. Il jette une erreur ORA
  4. Il s'exécute avec succès avec 0 lignes

Answer: C. Une sous-requête à plusieurs lignes ne peut pas être utilisée dans la clause SELECT d'une instruction SQL. Seule une sous-requête à une seule ligne peut être imbriquée dans la clause SELECT de la requête externe.

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. La question montre la clause ALL de manière simplifiée lorsqu'elle est suivie d'une liste.

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. La question montre la clause ALL de manière simplifiée lorsqu'elle est suivie d'une sous-requête

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. L'opérateur NOT utilisé lors de l'utilisation de '<= ANY' est utilisé pour la négation des résultats renvoyés par la sous-requête

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 ou B
  4. Aucune de ces réponses

Answer: B. La sous-requête corrélée fait référence à une colonne dans la requête externe et exécute la sous-requête une fois pour chaque ligne de la requête externe; et l'opérateur EXISTS est utilisé pour tester si la relation ou le lien est présent. Une sous-requête non corrélée exécute d'abord la sous-requête et transmet la valeur à la requête externe.

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. La question montre la clause ANY de manière simplifiée lorsqu'elle est suivie d'une liste.

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. La question montre la clause ANY de manière simplifiée lorsqu'elle est suivie d'une sous-requête

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. L'opérateur EXISTS peut remplacer l'opérateur ANY. La sous-requête corrélée fait référence à une colonne dans la requête externe et exécute la sous-requête une fois pour chaque ligne de la requête externe; et l'opérateur EXISTS est utilisé pour tester si la relation ou le lien est présent.

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 rangée
  2. Pas de lignes
  3. A ou B
  4. Aucune de ces réponses

Answer: B. Si la sous-requête renvoie zéro ligne, la condition '> ANY' est évaluée à FALSE, par conséquent "Aucune ligne" n'est renvoyée.

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

  1. La requête interne doit référencer la valeur renvoyée à la requête externe.
  2. La valeur renvoyée par la requête interne doit être comparée aux données groupées dans la requête externe.
  3. La sous-requête renvoie plusieurs valeurs à la requête externe.
  4. Aucune de ces réponses. Les sous-requêtes ne peuvent pas être utilisées dans la clause HAVING de la requête externe.

Answer: B. Une clause HAVING est utilisée lorsque les résultats de groupe d'une requête doivent être restreints en fonction d'une condition. Si le résultat d'une sous-requête doit être comparé à une fonction de groupe, vous devez imbriquer la requête interne dans la clause HAVING de la requête externe.