แบบสอบถามย่อยเพื่อแก้ไขคำถามการสืบค้น
1. Which of the following are the types of sub-queries?
- คำสั่งย่อยที่สั่งซื้อ
- แบบสอบถามย่อยที่จัดกลุ่ม
- แบบสอบถามย่อยแถวเดียว
- ไม่มีข้อใดข้างต้น
Answer: C. เคียวรีย่อยคือเคียวรีที่สมบูรณ์ที่ซ้อนอยู่ในส่วนคำสั่ง SELECT, FROM, HAVING หรือ WHERE ของเคียวรีอื่นเคียวรีย่อยต้องอยู่ในวงเล็บและมีส่วนคำสั่ง SELECT และ FROM เป็นอย่างน้อย แบบสอบถามย่อยแถวเดียวและแบบสอบถามย่อยหลายแถวเป็นประเภทหลักของแบบสอบถามย่อย
2.Which of the following is true about sub-queries?
- พวกเขาดำเนินการหลังจากการสืบค้นหลักดำเนินการ
- พวกเขาดำเนินการควบคู่ไปกับแบบสอบถามหลัก
- ผู้ใช้สามารถเรียกใช้แบบสอบถามหลักจากนั้นหากต้องการให้เรียกใช้แบบสอบถามย่อย
- พวกเขาดำเนินการก่อนที่แบบสอบถามหลักจะดำเนินการ
Answer: D. แบบสอบถามย่อยจะดำเนินการก่อนการดำเนินการของแบบสอบถามหลักเสมอการสืบค้นย่อยจะเสร็จสมบูรณ์ก่อนผลลัพธ์ของแบบสอบถามย่อยจะใช้เป็นอินพุตสำหรับแบบสอบถามภายนอก
3.Which of the following is true about the result of a sub-query?
- โดยทั่วไปผลลัพธ์ของแบบสอบถามย่อยจะถูกละเว้นเมื่อดำเนินการ
- ผลลัพธ์ของแบบสอบถามย่อยไม่ได้ให้ผลลัพธ์มันเป็นเพียงประโยชน์ในการเร่งการดำเนินการสืบค้นหลัก
- ผลลัพธ์ของแบบสอบถามย่อยถูกใช้โดยแบบสอบถามหลัก
- ผลลัพธ์ของแบบสอบถามย่อยจะเป็นค่าว่างเสมอ
Answer: C. แบบสอบถามย่อยจะเสร็จสมบูรณ์ก่อนผลลัพธ์ของแบบสอบถามย่อยจะใช้เป็นอินพุตสำหรับแบบสอบถามภายนอก
4.Which of the following clause is mandatorily used in a sub-query?
- SELECT
- WHERE
- สั่งโดย
- GROUP BY
Answer: A. แบบสอบถามย่อยก็เหมือนกับแบบสอบถามอื่น ๆ ที่ต้องขึ้นต้นด้วยคำสั่ง SELECT มีอยู่ในแบบสอบถามภายนอก
5. Which of the following is a method for writing a sub-query in a main query?
- โดยใช้ JOINS
- โดยใช้คำสั่ง WHERE
- โดยใช้คำสั่ง GROUP BY
- โดยการเขียนคำสั่ง 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?
- เมื่อเราต้องการสรุปค่า
- เมื่อเราต้องการแปลงค่าอักขระเป็นค่าวันที่หรือตัวเลข
- เมื่อเราต้องการเลือกแถวจากตารางที่มีเงื่อนไขขึ้นอยู่กับข้อมูลจากตารางเดียวกันหรือต่างกัน
- ไม่มีข้อใดข้างต้น
Answer: C.
7.In which of the following clauses can a sub-query be used?
- HAVING
- WHERE
- FROM
- ทั้งหมดที่กล่าวมา
Answer: D. แบบสอบถามย่อยไม่แตกต่างจากแบบสอบถามปกติ สามารถใช้ประโยชน์จากอนุประโยคหลักทั้งหมดของคำสั่ง SELECT
8.Which of the following single-row operators can be used for writing a sub-query?
- >=
- <
- =
- ทั้งหมดที่กล่าวมา
Answer: D. ตัวดำเนินการแถวเดียว ได้แก่ =,>, <,> =, <= และ <>
9.Which of the following multi-row operators can be used with a sub-query?
- IN
- ANY
- ALL
- ทั้งหมดที่กล่าวมา
Answer: D. แบบสอบถามย่อยหลายแถวส่งคืนผลลัพธ์มากกว่าหนึ่งแถวตัวดำเนินการที่สามารถใช้ได้กับแบบสอบถามย่อยหลายแถว ได้แก่ IN, ALL, ANY และ EXISTS
10.What is true about the output obtained from a sub-query?
- มันยังคงอยู่ในบัฟเฟอร์แคช
- ยังคงอยู่ในแบบสอบถามย่อยและสามารถใช้ได้ในภายหลังเมื่อจำเป็น
- ใช้เพื่อกรอกแบบสอบถามด้านนอก (หลัก)
- ทั้ง 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)
SELECT first_name, last_name, salary FROM employees WHERE salary > (SELECT salary FROM employees WHERE job_id = 'VICE-PRESIDENT');
SELECT first_name, last_name, salary FROM employees WHERE salary = (SELECT salary FROM employees WHERE job_id = 'VICE-PRESIDENT');
SELECT first_name, last_name, salary FROM employees WHERE job_id = 'VICE-PRESIDENT');
- ไม่มีข้อใดข้างต้น
Answer: A. ในตัวเลือก 'A' แบบสอบถามย่อยภายในจะให้เงินเดือนของ VP ซึ่งเป็นผลลัพธ์ของแบบสอบถามภายนอก
12.What among the following is true about sub-queries?
- แบบสอบถามย่อยสามารถเขียนได้ที่ด้านใดด้านหนึ่งของตัวดำเนินการเปรียบเทียบ
- วงเล็บไม่บังคับสำหรับแบบสอบถามย่อย
- แบบสอบถามย่อยแบบแถวเดียวสามารถใช้ตัวดำเนินการหลายแถวได้ แต่ในทางกลับกันไม่สามารถทำได้
- ทั้งหมดที่กล่าวมา
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);
- ดำเนินการสำเร็จให้ผลลัพธ์ที่ต้องการ
- ดำเนินการสำเร็จ แต่ไม่ได้ผลลัพธ์ที่ต้องการ
- มันแสดงข้อผิดพลาด ORA
- ดำเนินการสำเร็จและให้สองค่าสำหรับแต่ละแถวที่ได้รับในชุดผลลัพธ์
Answer: C. ไม่สามารถใช้ตัวดำเนินการหลายแถวในแบบสอบถามย่อยแถวเดียวและในทางกลับกัน
14.Which of the following is true about single-row sub-queries?
- พวกเขาให้ผลลัพธ์หนึ่งรายการจากแบบสอบถามหลัก
- พวกเขาให้แถวเดียวในชุดผลลัพธ์
- พวกเขาส่งคืนเพียงแถวเดียวจากคำสั่ง SELECT ภายใน
- พวกเขาให้หลายแถวจากแบบสอบถามหลัก (ด้านนอก)
Answer: C. แบบสอบถามย่อยแถวเดียวสามารถส่งคืนค่าได้สูงสุดหนึ่งค่า
15.What is true about multi-row sub-queries?
- พวกเขาสามารถส่งคืนมากกว่าหนึ่งคอลัมน์ซึ่งเป็นผลลัพธ์ของแบบสอบถามภายใน
- พวกเขาส่งคืนหลายแถวในแบบสอบถามหลัก แต่มีเพียงผลลัพธ์เดียวที่กำหนดไว้ในแบบสอบถามภายใน
- พวกเขาส่งคืนแถวเดียวในแบบสอบถามหลัก แต่มีหลายแถวในแบบสอบถามย่อยภายใน
- พวกเขาส่งคืนมากกว่าหนึ่งแถวจากคำสั่ง SELECT ภายใน
Answer: D. การสืบค้นย่อยแบบหลายคอลัมน์จะส่งคืนคอลัมน์มากกว่าหนึ่งคอลัมน์ในชุดผลลัพธ์การสืบค้นย่อยแบบหลายแถวจะส่งคืนมากกว่าหนึ่งแถวจากแบบสอบถามภายใน
16.What among the following is true about single-row sub-queries?
- พวกเขากลับเพียงแถวเดียว
- พวกเขาใช้ตัวดำเนินการแถวเดียว
- ทั้งเอและบี
- ไม่มีข้อใดข้างต้น
Answer: C.
17.Which of the following operators cannot be used in a sub-query?
- AND
- <
- >
- <>
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?
SELECT first_name, last_name FROM employees WHERE last_name = 'Butcher' And first_name = 'Jessica';
SELECT first_name, last_name FROM employees WHERE department =100;
SELECT first_name, last_name FROM employees WHERE department = (SELECT department FROM employees WHERE first_name = 'Jessica' AND last_name = 'Butcher');
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' เนื่องจากจะกรองรหัสพนักงานซึ่งไม่ซ้ำกันและทำให้มั่นใจได้ว่าแบบสอบถามย่อยจะส่งคืนแถวเดียวเท่านั้น '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?
SELECT first_name, last_name FROM employees WHERE last_name = 'Butcher' AND first_name = 'Jessica' AND salary > 10000;
SELECT first_name, last_name FROM employees WHERE department = 100;
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);
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. สามารถเขียนแบบสอบถามย่อยได้มากกว่าหนึ่งรายการในหนึ่งคำสั่ง SQL เพื่อเพิ่มมากกว่าหนึ่งเงื่อนไข
20.Based on the answers for questions 18th and 19th, what type of sub-queries is used by them?
- แบบสอบถามย่อยแถวเดียว
- แบบสอบถามย่อยหลายแถว
- ทั้งเอและบี
- แบบสอบถามย่อยแบบอินไลน์
Answer: A. คำถามที่ 18 และ 19 ที่ให้ไว้ข้างต้นแสดงให้เห็นถึงการใช้งานแบบสอบถามย่อยในคำสั่ง SELECT
21.Consider two statements about outer and inner queries in context of SQL sub-queries?
ผม. แบบสอบถามภายในสามารถรับข้อมูลจากตารางเดียวเท่านั้น
ii. แบบสอบถามภายในสามารถรับข้อมูลจากตารางมากกว่าหนึ่งตาราง
ข้อความใดข้างต้นเป็นจริง
- (i)
- (ii)
- ทั้ง (i) และ (ii)
- ไม่ (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);
- ดำเนินการสำเร็จและให้พนักงานที่มีเงินเดือนเท่ากับเงินเดือนสูงสุด
- ดำเนินการสำเร็จ แต่ไม่ให้ผลลัพธ์ที่ต้องการ
- มันแสดงข้อผิดพลาดเนื่องจากมีการใช้ฟังก์ชันกลุ่มในแบบสอบถามย่อย
- มันแสดงข้อผิดพลาดเป็นแบบสอบถามย่อยแถวเดียวควรมีตัวดำเนินการหลายแถว
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);
- ดำเนินการสำเร็จและให้ชื่อและเงินเดือนขั้นต่ำที่สูงกว่าแผนก 100 ของพนักงานทั้งหมด
- ดำเนินการสำเร็จและให้เงินเดือนของพนักงานในแผนก 100
- ดำเนินการสำเร็จและให้ชื่อและเงินเดือนขั้นต่ำของพนักงานทุกคน
- มันแสดงข้อผิดพลาด
Answer: A. HAVING clause สามารถใช้ในการสืบค้นย่อยดังที่แสดง
24.You need to find the job which has a maximum average salary.Which of the following queries will give you the required results?
SELECT job_id, avg(salary) FROM employees GROUP BY job_id;
SELECT job_id, avg(salary) FROM employees GROUP BY job_id HAVING job_id in (SELECT max(avg(salary) FROM employees);
SELECT job_id, avg(salary) FROM employees GROUP BY job_id HAVING max(avg(salary) in (SELECT max(avg(salary) FROM employees);
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);
- ไม่จำเป็นต้องใช้คำสั่ง GROUP BY ในแบบสอบถามย่อย
- ไม่สามารถใช้ฟังก์ชันในแบบสอบถามย่อยคำสั่ง SELECT
- แบบสอบถามย่อยแถวเดียวให้หลายระเบียน
- การใช้โอเปอเรเตอร์ "=" ไม่ถูกต้อง ตัวดำเนินการ IN จะทำงานได้อย่างถูกต้อง
Answer: C, D. GROUP BY clause ให้ค่าคอมมิชชันต่ำสุดสำหรับแต่ละแผนกและด้วยเหตุนี้ผลลัพธ์หลายรายการจึงถูกดึงไปยังเคียวรีหลักที่ให้ข้อผิดพลาด
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
- NULL
- 0
- แบบสอบถามทำให้เกิดข้อผิดพลาด 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
- 14
- 0
- ข้อผิดพลาด ORA
Answer: D. การดำเนินการค้นหาทำให้เกิดข้อยกเว้น "ORA-01427: การสืบค้นย่อยแถวเดียวส่งคืนมากกว่าหนึ่งแถว"
28.Which of the following are valid multi row operators used for sub-queries?
- <=
- ใด ๆ > =
- !=
- >=
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?
- TRUE
- FALSE
- NULL
- 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?
- มันดำเนินการสำเร็จโดยให้ผลลัพธ์เดียว
- ดำเนินการให้ประสบความสำเร็จในการให้เงินเดือนของพนักงานทุกคน
- NULL
- มันแสดงข้อผิดพลาด ORA
Answer: D. ถ้าแผนก 100 มีผลลัพธ์หนึ่งรายการ (แบบสอบถามย่อยแถวเดียว) ตัวดำเนินการ <ANY จะให้ข้อผิดพลาดเนื่องจากเป็นตัวดำเนินการหลายแถว
31.What will be the outcome of the query given above if the < ANY operator is replaced with = ANY operator?
- Oracle จะปฏิบัติต่อแต่ละค่าของเงินเดือนที่ส่งคืนจากแบบสอบถามย่อยเช่นเดียวกับตัวดำเนินการ IN
- จะไม่มีความแตกต่างในผลลัพธ์
- ผลลัพธ์จะแตกต่างกัน
- การดำเนินการจะทำให้เกิดข้อผิดพลาด ORA
Answer: A. = ตัวดำเนินการใด ๆ เทียบเท่ากับตัวดำเนินการ IN
32.What can be said about the < ANY operator in the query given above?
- ให้มูลค่าสูงสุดของเงินเดือน
- ให้มูลค่าขั้นต่ำของเงินเดือน
- หมายความว่าให้ค่าที่น้อยกว่าค่าสูงสุด
- ไม่มีข้อใดข้างต้น
Answer: C. ตัวดำเนินการหลายแถว <ANY ประเมินเป็นคำสั่ง "น้อยกว่าค่าสูงสุด" ของแบบสอบถามย่อย "> ทั้งหมด" มากกว่าค่าสูงสุดที่ส่งกลับโดยแบบสอบถามย่อย '<ALL' น้อยกว่าค่าต่ำสุดที่ส่งคืนโดยแบบสอบถามย่อย '<ANY' น้อยกว่าค่าสูงสุดที่ส่งกลับโดยแบบสอบถามย่อย '<ANY' มากกว่าค่าต่ำสุดที่ส่งคืนโดยแบบสอบถามย่อย '= ANY' เท่ากับค่าใด ๆ ที่ส่งคืนโดยแบบสอบถามย่อย (เช่นเดียวกับ IN) แถว '[NOT] EXISTS' ต้องตรงกับค่าในแบบสอบถามย่อย
33.Assume that the < ANY operator is replaced with the > ANY. What is true about this operator?
- ให้เงินเดือนสูงสุด
- พบเฉพาะเงินเดือนสูงสุดจากแบบสอบถามย่อย
- มันให้มากกว่าเงินเดือนขั้นต่ำ
- มันให้เงินเดือนขั้นต่ำ
Answer: C. ตัวดำเนินการหลายแถว> ANY จะประเมินเป็นคำสั่ง "มากกว่าค่าต่ำสุด" ของข้อความค้นหาย่อย "> ทั้งหมด" มากกว่าค่าสูงสุดที่ส่งกลับโดยแบบสอบถามย่อย '<ALL' น้อยกว่าค่าต่ำสุดที่ส่งคืนโดยแบบสอบถามย่อย '<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)
WHERE salary < ANY (SELECT max(salary) FROM employees GROUP BY department_id );
WHERE salary < ALL (SELECT max(salary) FROM employees GROUP BY department_id );
WHERE salary = (SELECT max(salary) FROM employees GROUP BY department_id );
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?
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';
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';
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';
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' น้อยกว่าค่าต่ำสุดที่ส่งคืนโดยแบบสอบถามย่อย '<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?
- มันจะดำเนินการสำเร็จโดยให้ผลลัพธ์เดียวกัน
- มันจะทำให้เกิดข้อผิดพลาด ORA
- จะดำเนินการสำเร็จ แต่ให้รายละเอียดของพนักงานที่มีเงินเดือนน้อยกว่าพนักงานทั้งหมดที่มี job_id 'FI_ACCOUNTANT'
- ไม่มีข้อใดข้างต้น
Answer: C. > ทั้งหมดหมายถึงน้อยกว่าขั้นต่ำ "> ทั้งหมด" มากกว่าค่าสูงสุดที่ส่งกลับโดยแบบสอบถามย่อย '<ALL' น้อยกว่าค่าต่ำสุดที่ส่งคืนโดยแบบสอบถามย่อย '<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?
-
SELECT employee_id, first_name, last_name FROM employees WHERE salary !=ALL (SELECT salary FROM employees WHERE department_id = 100) AND department_id <> 100;
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;
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;
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. ไม่สามารถใช้กับตัวดำเนินการหลายแถว 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?
- 10
- NULL
- ข้อผิดพลาด ORA
- 0
Answer: D. ค่าหนึ่งในแบบสอบถามย่อยภายในคือ NULL (พนักงานทุกคนไม่ใช่ผู้จัดการ!)
39.Which of the following WHERE clauses should be added / modified to the above query to give the expected results?
WHERE employee_id != (SELECT manager_id FROM employees);
WHERE employee_id IN (SELECT manager_id FROM employees);
WHERE employee_id <>ALL (SELECT manager_id FROM employees);
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?
- การสืบค้นย่อยจะต้องดำเนินการแยกต่างหากจากการสืบค้นหลัก
- แบบสอบถามย่อยสามารถดำเนินการได้ตามความประสงค์ของผู้ใช้ซึ่งไม่เกี่ยวข้องกับการดำเนินการสืบค้นหลัก
- แบบสอบถามย่อยเท่ากับสองคิวรีตามลำดับโดยที่แบบสอบถามหลักใช้ผลลัพธ์ของคิวรีภายใน
- ทั้งหมดที่กล่าวมา
Answer: C.
41. Which of the following is true about sub-queries?
- แบบสอบถามย่อยสามารถส่งคืน 0 แถวหรือมากกว่า
- สามารถใช้แบบสอบถามย่อยในส่วนคำสั่ง SELECT เท่านั้น
- การซ้อนแบบสอบถามย่อยถูก จำกัด ไว้ที่ 2 ระดับ
- ไม่สามารถใช้ฟังก์ชันกลุ่มในแบบสอบถามย่อย
Answer: A. แบบสอบถามย่อยคือแบบสอบถามที่สมบูรณ์ที่ซ้อนอยู่ในส่วนคำสั่ง SELECT, FROM, HAVING หรือ WHERE ของแบบสอบถามอื่น แบบสอบถามย่อยต้องอยู่ในวงเล็บและมีคำสั่ง SELECT และ FROM เป็นอย่างน้อย แบบสอบถามย่อยแถวเดียวสามารถส่งคืนค่าได้สูงสุดหนึ่งค่า แบบสอบถามย่อยหลายคอลัมน์ส่งคืนมากกว่าหนึ่งคอลัมน์ไปยังแบบสอบถามภายนอก
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);
แบบสอบถามนี้ส่งกลับข้อผิดพลาด สาเหตุของข้อผิดพลาดคืออะไร?
- ตัวดำเนินการ NOT IN ที่ใช้ไม่ถูกต้อง
- คำสั่ง WHERE ในแบบสอบถามย่อยเขียนไม่ถูกต้อง
- คอลัมน์ในคำสั่งย่อย SELECT ควรเป็นคอลัมน์เดียวเมื่อมีการใช้อสมการในแบบสอบถามหลัก
- แบบสอบถามย่อยใช้ตารางเดียวกันกับแบบสอบถามหลัก
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)
SELECT department_name FROM employees WHERE department_id IN (SELECT distinct (department_id ) FROM employees);
SELECT department_name FROM employees WHERE department_id ANY (SELECT distinct (department_id ) FROM employees);
SELECT department_name FROM employees WHERE department_id < ANY (SELECT distinct (department_id ) FROM employees);
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?
- 20
- 50
- Unlimited
- 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?
- ใช้ GROUP BY
- การใช้แบบสอบถามย่อย
- ใช้ HAVING
- ไม่มีข้อใดข้างต้น
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
WHERE job_id = (SELECT job_id FROM employees WHERE employee_id = 210);
WHERE job_id IN (SELECT job_id FROM employees WHERE employee_id = 210);
WHERE job_id > (SELECT job_id FROM employees WHERE employee_id = 210);
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);
ผลของการเปลี่ยนแปลงนี้จะเป็นอย่างไร?
- ผลลัพธ์จะเหมือนกัน
- เกิดข้อผิดพลาด ORA ในการดำเนินการ
- ผลลัพธ์จะแตกต่างกัน
- แบบสอบถามจะดำเนินการสำเร็จโดยให้ 0 แถว
Answer: B. แบบสอบถามย่อยให้ผลลัพธ์มากกว่าหนึ่งรายการในการเปลี่ยนแปลงที่กำหนดดังนั้นตัวดำเนินการหลายแถวควรแทนที่ "=" ในข้อความค้นหาหลักที่ระบุไว้ด้านบน
48.Examine the table structures as shown in the exhibit below.
คุณต้องแสดงชื่อของพนักงานที่มีเงินเดือนสูงสุด คำสั่ง SQL ใดต่อไปนี้จะถูกต้อง?
SELECT first_name, last_name, grade FROM employees, grade WHERE (SELECT max (salary) FROM employees) BETWEEN losal and hisal;
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;
SELECT first_name, last_name, grade FROM employees, grade WHERE salary = (SELECT max (salary) FROM employees) AND salary BETWEEN losal and hisal;
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)
- แบบสอบถามย่อยแถวเดียว
- แบบสอบถามย่อยหลายแถว
- มุมมองแบบอินไลน์
- แบบสอบถามย่อยที่เกี่ยวข้องกัน
Answer: C. ถ้าแบบสอบถามย่อยปรากฏในส่วนคำสั่ง FROM ของคำสั่ง SELECT จะสร้างเป็นมุมมองแบบอินไลน์ Oracle สร้างมุมมองชั่วคราวภายในสำหรับการดำเนินการสืบค้น
50.What is the maximum number of nesting level allowed in an Inline View type sub-query?
- 255
- 300
- 216
- Unlimited
Answer: D. เนื่องจากไม่มีการ จำกัด จำนวนตารางที่สามารถเข้าร่วมได้จึงไม่มีการ จำกัด จำนวนมุมมองแบบอินไลน์ในแบบสอบถาม
51.What is true about co-related sub-queries?
- ตารางที่ใช้ในแบบสอบถามหลักยังใช้ในแบบสอบถามย่อยที่เกี่ยวข้องกัน
- เคียวรีย่อยที่อ้างอิงคอลัมน์ที่ใช้ในคิวรีหลักเรียกว่าเคียวรีย่อยที่เกี่ยวข้องกัน
- เคียวรีย่อยที่เขียนโดยไม่มีวงเล็บเรียกว่าเคียวรีย่อยที่เกี่ยวข้องกัน
- คิวรีย่อยที่ใช้ตารางต่างจากที่ใช้ในคิวรีหลักอย่างมีระเบียบเรียกว่าคิวรีย่อยที่เกี่ยวข้องกัน
Answer: B. เคียวรีย่อยที่สัมพันธ์กันอ้างอิงคอลัมน์ในคิวรีภายนอกและเรียกใช้เคียวรีย่อยหนึ่งครั้งสำหรับทุกแถวในคิวรีภายนอกในขณะที่เคียวรีย่อยที่ไม่เกี่ยวข้องจะรันเคียวรีย่อยก่อนและส่งผ่านค่าไปยังเคียวรีภายนอก
52.Which of the following statements cannot be parent statements for a sub-query?
- SELECT
- GROUP BY
- UPDATE
- DELETE
Answer: B. ตัวเลือกที่เหลือสามารถอยู่ในแบบสอบถามหลัก (แบบสอบถามหลัก) ของแบบสอบถามย่อย
53.What is true about a co-related sub-query?
- มีการประเมินเพียงครั้งเดียวสำหรับแบบสอบถามหลัก
- มีการประเมินเพียงสามครั้งสำหรับการสืบค้นระดับบนสุด
- มีการประเมินหนึ่งครั้งสำหรับแต่ละแถวที่ประมวลผลโดยแบบสอบถามย่อยหลัก
- ทั้งหมดที่กล่าวมา
Answer: C. เคียวรีย่อยที่สัมพันธ์กันอ้างอิงคอลัมน์ในคิวรีภายนอกและรันคิวรีย่อยหนึ่งครั้งสำหรับทุกแถวในคิวรีภายนอกและตัวดำเนินการ 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)
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 ;
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 ;
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 ;
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)
SELECT * FROM employees E WHERE exists (SELECT 1 FROM employees E1 WHERE E.employee_id = E1.employee_id);
SELECT * FROM employees E WHERE exists (SELECT 1 FROM employees E1 WHERE E.employee_id = E1.employee_id AND E.ROWID < E1.ROWID);
SELECT * FROM employees E WHERE exists (SELECT 1 FROM employees E1 WHERE E.ROWID < E1.ROWID);
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. เคียวรีย่อยที่สัมพันธ์กันอ้างอิงคอลัมน์ในคิวรีภายนอกและรันคิวรีย่อยหนึ่งครั้งสำหรับทุกแถวในคิวรีภายนอกและตัวดำเนินการ EXISTS ใช้เพื่อทดสอบว่ามีความสัมพันธ์หรือลิงก์อยู่หรือไม่ สามารถใช้เพื่อค้นหาแถวที่ซ้ำกันในตารางที่การซ้ำกันอยู่ภายใต้คอลัมน์หรือชุดของคอลัมน์
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?
SELECT sysdate, (SELECT * FROM departments) dept_count, (SELECT * FROM employees) emp_count FROM DUAL;
SELECT sysdate, (SELECT count(*) FROM departments) dept_count, (SELECT count(*) FROM employees) emp_count FROM DUAL GROUP BY department_id ;
SELECT sysdate, (SELECT * FROM departments) dept_count, (SELECT * FROM employees) emp_count FROM DUAL GROUP BY employee_id;
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'?
SELECT employee_id, manager_id FROM employees A WHERE employee_id ANY (SELECT manager_id from employees B) ORDER BY manager_id desc;
SELECT employee_id, manager_id FROM employees A WHERE employee_id < ALL (SELECT manager_id from employees B)
SELECT employee_id, manager_id FROM employees A WHERE employee_id IN (SELECT manager_id from employees B) ORDER BY manager_id desc;
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?
SELECT max (salary), city FROM (SELECT salary, department_id , loc, city FROM employees natural join departments natural join locations);
SELECT salary, city FROM (SELECT salary, department_id , loc, city FROM employees natural join departments natural join locations);
SELECT max (salary), city FROM (SELECT salary, department_id , loc, city FROM employees natural join departments natural join locations) GROUP BY city;
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?
SELECT department_name FROM departments WHERE department_id = ANY (SELECT department_id FROM employees);
SELECT department_name FROM departments WHERE department_id IN (SELECT distinct(department_id ) FROM employees);
SELECT department_name FROM departments WHERE department_id = (SELECT distinct(department_id ) FROM employees);
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 );
ผลลัพธ์ของการเปลี่ยนแปลงนี้จะเป็นอย่างไร? (เลือกคำตอบที่เหมาะสมที่สุด)
- มันจะสั่งให้ department_id ดึงข้อมูลจากเคียวรีย่อยและแสดงตามลำดับจากน้อยไปมาก
- จะทำให้เกิดข้อผิดพลาด ORA เนื่องจากคำสั่ง ORDER BY ควรมาพร้อมกับคำสั่ง GROUP BY
- จะทำให้เกิดข้อผิดพลาด ORA เนื่องจากไม่สามารถใช้คำสั่ง ORDER BY ภายในแบบสอบถามย่อยได้
- มันจะดำเนินการสำเร็จ
Answer: C. แบบสอบถามย่อยยกเว้นหนึ่งในส่วนคำสั่ง FROM ไม่สามารถมีคำสั่ง ORDER BY ได้หากคุณต้องการแสดงผลลัพธ์ตามลำดับที่ระบุให้รวมคำสั่ง ORDER BY เป็นอนุประโยคสุดท้ายของแบบสอบถามภายนอก
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;
ผลลัพธ์ของการเปลี่ยนแปลงนี้จะเป็นอย่างไร? (เลือกคำตอบที่เหมาะสมที่สุด)
- มันจะสั่งให้ department_id ดึงข้อมูลจากเคียวรีย่อยและแสดงตามลำดับจากน้อยไปมาก
- มันจะสั่งให้ department_id ดึงข้อมูลจากเคียวรีย่อยและแสดงตามลำดับจากมากไปหาน้อย
- จะทำให้เกิดข้อผิดพลาด ORA เนื่องจากไม่สามารถใช้คำสั่ง ORDER BY ภายในแบบสอบถามย่อยได้
- ไม่มีข้อใดข้างต้น
Answer: D. แบบสอบถามย่อยยกเว้นหนึ่งในส่วนคำสั่ง FROM ไม่สามารถมีคำสั่ง ORDER BY ได้หากคุณต้องการแสดงผลลัพธ์ตามลำดับที่ระบุให้รวมคำสั่ง ORDER BY เป็นอนุประโยคสุดท้ายของแบบสอบถามภายนอก
62.Which of the following can be used to order results in a sub-query?
- สั่งโดย
- HAVING
- GROUP BY
- ทั้งหมดที่กล่าวมา
Answer: C. โดยค่าเริ่มต้นคำสั่ง GROUP BY จะดำเนินการสั่งซื้อในแบบสอบถามย่อย
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?
- ให้ AU_ID และ AU_TITLE ทั้งหมดที่ขึ้นต้นด้วยตัวอักษร "S%"
- ให้ AU_ID และ AU_TITLE ทั้งหมดที่ขึ้นต้นด้วยตัวอักษร "S%" เรียงลำดับตามชื่อเรื่องจากน้อยไปหามาก
- มันแสดงข้อผิดพลาด ORA
- ส่งคืนค่า 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);
แบบสอบถามนี้ส่งกลับข้อผิดพลาด สาเหตุของข้อผิดพลาดคืออะไร?
- ควรใช้คำสั่ง GROUP BY เมื่อใช้ฟังก์ชัน MAX
- แบบสอบถามย่อยทั้งสองไม่สามารถใช้ ID แผนกเดียวกันในแบบสอบถามภายนอกเดียวกัน
- ไม่สามารถใช้ตัวดำเนินการระหว่าง BETWEEN กับแบบสอบถามย่อย
- ส่วนคำสั่ง SELECT ควรมีคอลัมน์ที่กล่าวถึงไม่ใช่เครื่องหมายดอกจัน (*)
Answer: C. สามารถใช้ตัวดำเนินการ BETWEEN ภายในแบบสอบถามย่อย แต่ใช้กับแบบสอบถามย่อยไม่ได้
65.What is true about using NOT IN when writing queries with sub-queries in them?
- NOT IN ละเว้นค่า NULL ทั้งหมดและให้เฉพาะค่า NOT NULL
- NOT IN ทำให้ค่า NULL ทั้งหมดเป็นค่าสุดท้ายและให้ NOT NULL แสดงก่อน
- ไม่ควรใช้ NOT IN หากคาดว่าค่า NULL ในชุดผลลัพธ์
- NOT IN เป็นเพียงการปฏิเสธของตัวดำเนินการ IN และสามารถเปลี่ยนแปลงได้โดยไม่มีข้อแม้
Answer: C. SQL จัดการค่า NULL ด้วยวิธีที่แตกต่างออกไปดังนั้นจึงเป็นแนวทางปฏิบัติที่ดีที่จะหลีกเลี่ยง NOT IN หากชุดผลลัพธ์อาจมีค่า 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.
SELECT department_id , min(salary) FROM employees GROUP BY department_id HAVING min(salary) > ( select max(salary) FROM employees where department_id = 10 )
SELECT department_id , min(salary) FROM employees GROUP BY department_id HAVING min(salary) > ANY ( select max(salary) FROM employees )
SELECT department_id , min(salary) FROM employees HAVING max(salary) < ANY ( select min(salary) FROM employees where department_id = 10 )
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)
SELECT employee_id, Salary FROM employees WHERE salary in ( SELECT salary FROM employees where department_id = 10 )
SELECT employee_id, Salary FROM employees WHERE salary =ANY ( SELECT salary FROM employees where department_id = 10 )
SELECT employee_id, Salary FROM employees WHERE salary ALL ( SELECT salary FROM employees where department_id = 10 )
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?
SELECT employee_id, Salary FROM employees WHERE salary >= ANY ( SELECT salary FROM employees where department_id = 10 )
SELECT employee_id, Salary FROM employees WHERE salary > ANY ( SELECT salary FROM employees where department_id = 10 )
SELECT employee_id, Salary FROM employees WHERE salary < ANY ( SELECT salary FROM employees where department_id = 10 )
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?
SELECT employee_id, Salary FROM employees WHERE salary > ALL ( SELECT salary FROM employees where department_id = 10 )
SELECT employee_id, Salary FROM employees WHERE salary =ALL ( SELECT salary FROM employees where department_id = 10 )
SELECT employee_id, Salary FROM employees WHERE salary < ALL ( SELECT salary FROM employees where department_id = 10 )
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?
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) )
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) )
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) )
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)
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
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;
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
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)
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'
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' )
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' )
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)
SELECT employee_id, Job_id FROM employees E WHERE exists ( SELECT 1 FROM employees E1 WHERE E.job_id = E1.job_id )
SELECT employee_id, Job_id FROM employees E WHERE exists ( SELECT * FROM employees E1 WHERE E.job_id = E1.job_id )
SELECT employee_id, Job_id FROM employees E WHERE not exists ( SELECT * FROM employees E1 WHERE E.job_id = E1.job_id )
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 เคียวรีย่อยที่สัมพันธ์กันอ้างอิงคอลัมน์ในคิวรีภายนอกและรันคิวรีย่อยหนึ่งครั้งสำหรับทุกแถวในคิวรีภายนอกและตัวดำเนินการ 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)
SELECT employee_id, Job_id FROM employees E WHERE exists ( SELECT * FROM employees E1 WHERE E.job_id = E1.job_id )
SELECT employee_id, Job_id FROM employees E WHERE not exists ( SELECT 1 FROM employees E1 WHERE E.job_id = E1.job_id )
SELECT employee_id, Job_id FROM employees E WHERE not exists ( SELECT * FROM employees E1 WHERE E.job_id = E1.job_id )
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)
SELECT * FROM employees E WHERE salary = (SELECT count(distinct salary ) FROM employees WHERE e.salary = salary );
SELECT * FROM employees E WHERE 1 = (SELECT count(distinct salary ) FROM employees WHERE e.salary < salary );
SELECT * FROM employees E WHERE 2 = (SELECT count(distinct salary ) FROM employees WHERE e.salary >salary );
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)
SELECT salary FROM ( SELECT rowid as user_sal FROM (SELECT distinct salary from employees ORDER BY salary desc) ) WHERE user_sal=&N ;
SELECT salary FROM ( SELECT rownum as user_sal FROM (SELECT distinct salary FROM employees GROUP BY salary ) ) WHERE user_sal <= &N ;
SELECT salary FROM ( SELECT rownum as user_sal, salary FROM (SELECT distinct salary FROM employees ORDER BY salary desc) ) WHERE user_sal=&N ;
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)
- คำสั่งจะทำให้เกิดข้อผิดพลาด ORA
- คำสั่งจะส่งคืนแถวทั้งหมดในตาราง
- คำสั่งจะคืนค่า NULL เป็นผลลัพธ์ผลลัพธ์
- คำสั่งจะไม่ส่งคืนแถวในผลลัพธ์
Answer: D.
78.What is the maximum level up to which Sub-queries can be nested?
- 255
- 100
- 2
- 16
Answer: A.
79.What is true about the EXISTS operator in SQL queries with respect to sub-queries?
- คอลัมน์ที่เลือกในแบบสอบถามย่อยมีความสำคัญ
- คำค้นหาภายในควรส่งคืนแถวผลลัพธ์ใด ๆ คือสิ่งที่สำคัญไม่ใช่สิ่งที่เลือก
- ทั้งเอและบี
- ทั้ง A และ B
Answer: B.
80.What is true about the ANY operator used for sub-queries?
- ส่งคืนแถวที่ตรงกับค่าทั้งหมดในรายการ / แบบสอบถามย่อย
- ส่งคืนแถวที่ตรงกับ 5 ค่าแรกในรายการ / แบบสอบถามย่อย
- ส่งคืนแถวที่ตรงกับค่าใด ๆ ในรายการ / แบบสอบถามย่อย
- ส่งคืนค่า 0 เมื่อแถวทั้งหมดตรงกับรายการ / แบบสอบถามย่อย
Answer: C.
81.What is true about the ALL operator used for sub-queries? (Choose the most appropriate answer.)
- ส่งคืนแถวที่ตรงกับค่าทั้งหมดในรายการ / แบบสอบถามย่อย
- ส่งคืนแถวที่ตรงกับค่าบางค่าในรายการ / แบบสอบถามย่อย
- ส่งคืนแถวก็ต่อเมื่อค่าทั้งหมดตรงกันในรายการ / แบบสอบถามย่อย
- ทั้งหมดที่กล่าวมา
Answer: C. "> ทั้งหมด" มากกว่าค่าสูงสุดที่ส่งกลับโดยแบบสอบถามย่อย '<ALL' น้อยกว่าค่าต่ำสุดที่ส่งคืนโดยแบบสอบถามย่อย '<ANY' น้อยกว่าค่าสูงสุดที่ส่งกลับโดยแบบสอบถามย่อย "> ใด ๆ " มากกว่าค่าต่ำสุดที่ส่งกลับโดยการสืบค้นย่อย '= ANY' เท่ากับค่าใด ๆ ที่ส่งคืนโดยแบบสอบถามย่อย (เช่นเดียวกับ IN) แถว '[NOT] EXISTS' ต้องตรงกับค่าในแบบสอบถามย่อย
82.What is true about using sub-queries in INSERT statements in Oracle?
- สามารถใช้ในประโยค INSERT ได้โดยไม่มีข้อ จำกัด
- สามารถใช้ได้ในส่วนคำสั่ง INSERT สำหรับค่าตัวเลขเท่านั้น
- รายการ SELECT ของแบบสอบถามย่อยควรเหมือนกับรายการคอลัมน์ของคำสั่ง INSERT
- ไม่มีข้อใดข้างต้น
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)
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' );
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' );
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' );
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?
SELECT employee_id , salary FROM employees WHERE salary < ALL (SELECT salary FROM employees WHERE department_id=100);
SELECT employee_id , salary FROM employees WHERE salary < (SELECT min(salary) FROM employees WHERE department_id=100);
SELECT employee_id FROM employees WHERE salary not >= ANY (SELECT salary FROM employees WHERE department_id=100);
- ไม่มีข้อใดข้างต้น
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');
สิ่งที่สามารถพูดได้เกี่ยวกับทั้งสองงบ?
- ทั้งสองแบบสอบถามควรสร้างผลลัพธ์เดียวกัน
- ข้อความค้นหาทั้งสองจะทำให้เกิดข้อผิดพลาด
- หากมีสองแผนกที่มีชื่อเดียวกันทั้งสองการสืบค้นจะล้มเหลว
- ทั้งสองแบบสอบถามจะทำงานได้สำเร็จแม้ว่าจะมีแผนกที่ชื่อ 'บัญชี' มากกว่าหนึ่งแผนกก็ตาม
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);
ผลลัพธ์ของข้อความค้นหาข้างต้นจะเป็นอย่างไร
- ดำเนินการสำเร็จและให้ผลลัพธ์ที่ต้องการ
- ดำเนินการสำเร็จ แต่ไม่ได้ให้ผลลัพธ์ที่ต้องการ
- มันแสดงข้อผิดพลาด ORA ในการดำเนินการ
- ดำเนินการสำเร็จและให้ผลลัพธ์ที่ต้องการเมื่อ> ALL ถูกแทนที่ด้วย> = ALL
Answer: B, D. > ALL จะไม่ให้ผลลัพธ์ที่ต้องการเนื่องจากอาจมีพนักงานสองคนที่มีเงินเดือนเท่ากันและใครเป็นผู้มีรายได้สูงสุดในแผนก 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)
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;
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;
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;
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?
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;
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;
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;
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.
SELECT employee_id, max(salary), max(commission_pct ) FROM employees E GROUP BY salary, commission_pct ;
SELECT employee_id, max(salary), max(commission_pct ) FROM employees E GROUP BY salary;
SELECT employee_id, max(salary) FROM employees E GROUP BY salary, commission_pct HAVING max(commission_pct ) = 100;
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?
- แบบสอบถามย่อยเหล่านี้เหมือนกันในทุกด้านเหมือนกับที่ใช้ในส่วนคำสั่ง FROM หรือ WHERE
- แบบสอบถามย่อยเหล่านี้ต้องเป็นแบบสอบถามย่อยแถวเดียว
- เราสามารถใช้ตัวดำเนินการหลายแถวเมื่อเขียนแบบสอบถามย่อยดังกล่าว
- ไม่มีข้อใดข้างต้น
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;
- จะให้วันที่ของระบบและเงินเดือนสูงสุดสำหรับแต่ละแผนก
- ให้เงินเดือนสูงสุดสำหรับทุกแผนก
- มันแสดงข้อผิดพลาด ORA
- ดำเนินการสำเร็จด้วย 0 แถว
Answer: C. ไม่สามารถใช้แบบสอบถามย่อยหลายแถวในส่วนคำสั่ง SELECT ของคำสั่ง SQL เฉพาะคิวรีย่อยแถวเดียวเท่านั้นที่สามารถซ้อนอยู่ในส่วนคำสั่ง 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?
SELECT salary FROM employees WHERE salary >10 or salary > 20 and salary >30;
SELECT salary FROM employees WHERE salary <10 and salary < 20 and salary <30;
SELECT salary FROM employees WHERE salary >10 and salary > 20 and salary >30;
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?
SELECT E.salary FROM employees E WHERE E.salary > (SELECT E1.salary FROM employees E1 WHERE E1.department_id = 100);
SELECT E.salary FROM employees E WHERE E.salary >ALL (SELECT E1.salary FROM employees E1 WHERE E1.department_id = 100);
SELECT E.salary FROM employees E WHERE E.salary = (SELECT E1.salary FROM employees E1 WHERE E1.department_id = 100);
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?
SELECT E.salary FROM employees E WHERE NOT EXISTS (E.salary =ANY (SELECT E1.salary FROM employees E1 WHERE E1.department_id = 100);
SELECT E.salary FROM employees E WHERE E.salary >ANY (SELECT E1.salary FROM employees E1 WHERE E1.department_id = 100);
SELECT E.salary FROM employees E WHERE E.salary =ANY (SELECT E1.salary FROM employees E1 WHERE E1.department_id = 100);
SELECT E.salary FROM employees E WHERE NOT ( E.salary <= ANY (SELECT E1.salary FROM employees E1 WHERE E1.department_id = 100));
Answer: D. ตัวดำเนินการ NOT ที่ใช้ในขณะที่ใช้ '<= ANY' ใช้สำหรับการปฏิเสธของผลลัพธ์ที่ส่งคืนโดยแบบสอบถามย่อย
95.With respect to the question 94, if the operator ANY is not to be used, which of the following queries will be correct?
SELECT E.salary FROM employees E WHERE NOT EXISTS (E.salary = ANY (SELECT E1.salary FROM employees E1 WHERE E1.department_id = 100);
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);
- A หรือ B
- ไม่มีข้อใดข้างต้น
Answer: B. เคียวรีย่อยที่สัมพันธ์กันอ้างอิงคอลัมน์ในคิวรีภายนอกและรันคิวรีย่อยหนึ่งครั้งสำหรับทุกแถวในคิวรีภายนอกและตัวดำเนินการ 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?
SELECT salary FROM employees WHERE salary >10 or salary > 20 and or >30;
SELECT salary FROM employees WHERE salary <10 and salary < 20 and salary <30;
SELECT salary FROM employees WHERE salary >10 and salary > 20 or salary >30;
SELECT salary FROM employees WHERE salary >10 and salary > 20 or salary < 30;
Answer: A. คำถามจะแสดงอนุประโยคใด ๆ ในลักษณะที่เรียบง่ายเมื่อตามด้วยรายการ
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?
SELECT E.salary FROM employees E WHERE E.salary > (SELECT E1.salary FROM employees E1 WHERE E1.department_id = 100);
SELECT E.salary FROM employees E WHERE E.salary >ANY (SELECT E1.salary FROM employees E1 WHERE E1.department_id = 100);
SELECT E.salary FROM employees E WHERE E.salary = (SELECT E1.salary FROM employees E1 WHERE E1.department_id = 100);
SELECT E.salary FROM employees E WHERE E.salary >= (SELECT E1.salary FROM employees E1 WHERE E1.department_id = 100);
Answer: B. คำถามจะแสดงอนุประโยคใด ๆ ในลักษณะที่เรียบง่ายเมื่อตามด้วยแบบสอบถามย่อย
98.With respect to the question 97 above, what among the following will be an equivalent query if ANY is removed?
SELECT E.salary FROM employees E WHERE NOT EXISTS (E.salary =ANY (SELECT E1.salary FROM employees E1 WHERE E1.department_id = 100);
SELECT E.salary FROM employees E WHERE EXISTS (SELECT E1.salary FROM employees E1 WHERE E1.department_id = 100 And E.salary >E1.salary);
SELECT E.salary FROM employees E WHERE EXISTS (SELECT E1.salary FROM employees E1 WHERE E1.department_id = 100 );
SELECT E.salary FROM employees E WHERE IN (SELECT E1.salary FROM employees E1 WHERE E1.department_id = 100);
Answer: B. ผู้ดำเนินการ EXISTS สามารถแทนที่ตัวดำเนินการใดก็ได้ เคียวรีย่อยที่สัมพันธ์กันอ้างอิงคอลัมน์ในคิวรีภายนอกและรันคิวรีย่อยหนึ่งครั้งสำหรับทุกแถวในคิวรีภายนอกและตัวดำเนินการ 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 แถว
- ไม่มีแถว
- A หรือ B
- ไม่มีข้อใดข้างต้น
Answer: B. ถ้าแบบสอบถามย่อยส่งคืนแถวศูนย์เงื่อนไข "> ใด ๆ " จะประเมินเป็น FALSE ดังนั้น "ไม่มีแถว" จะถูกส่งกลับ
100. A subquery must be placed in the outer query's HAVING clause if:
- แบบสอบถามภายในจำเป็นต้องอ้างอิงค่าที่ส่งกลับไปยังแบบสอบถามภายนอก
- ค่าที่ส่งคืนโดยแบบสอบถามภายในจะถูกเปรียบเทียบกับข้อมูลที่จัดกลุ่มในแบบสอบถามภายนอก
- แบบสอบถามย่อยส่งคืนค่ามากกว่าหนึ่งค่าไปยังแบบสอบถามภายนอก
- ไม่มีข้อใดข้างต้น ไม่สามารถใช้การสืบค้นย่อยใน HAVING clause ของแบบสอบถามภายนอกได้
Answer: B. HAVING clause จะใช้เมื่อต้องการ จำกัด ผลลัพธ์กลุ่มของคิวรีตามเงื่อนไขบางประการ หากต้องเปรียบเทียบผลลัพธ์ของเคียวรีย่อยกับฟังก์ชันกลุ่มคุณต้องซ้อนคิวรีภายในในส่วนคำสั่ง HAVING ของคิวรีภายนอก