LONGEPASS
Q57.

關聯式資料表(Relational Table)Employee(EID,DNo,Salary) ,分別表示員工之員工編號、所屬部門編號、薪水,假設要列出一些員工編號,其條件為其薪水小於任何一個部門編號為5 的員工薪水,若用巢狀(Nested)結構查詢,則其外層(第一層)的WHERE 條件應如何寫才對?

電腦軟體設計共同科目 · 乙級 · Q57

難易度分析

3 / 5

本題要求考生區分 SQL 巢狀查詢中量詞運算子的正確語法與邏輯含義。除了需要掌握特定關鍵字的定義外,還需能辨識非標準的偽關鍵字,並理解純量運算子與多值子查詢搭配時的限制,因此將難度評定為普通程度。

正確答案:④Salary <ANY(SELECT Salary FROM Employee WHERE DNo=5)

④ Salary <ANY(SELECT Salary FROM Employee WHERE DNo=5):<ANY 表示小於子查詢結果中的「至少一個值」,即小於子查詢回傳集合中的最大值,符合題目「小於任何一個部門編號為 5 的員工薪水」之語意要求。

錯誤選項解析

  • ① Salary<EVERY(SELECT Salary FROM Employee WHERE DNo=5):EVERY 關鍵字在 SQL 中並非標準語法,關聯式資料庫(如 SQL Server、MySQL)並不支援此運算子,正確應使用 ALL 來表示「小於所有值」的條件。
  • ② Salary < ANYONE(SELECT Salary FROM Employee WHERE DNo=5):ANYONE 不是 SQL 的合法關鍵字,子查詢比較運算子應使用 ANY 或 SOME,兩者功能完全相同。
  • ③ Salary < (SELECT Salary FROM Employee WHERE DNo=5):直接使用 < 搭配會回傳多筆結果的子查詢會產生執行錯誤,因為純量比較運算子無法處理多值回傳,必須搭配 ANY 或 ALL 等量詞運算子。
Learning Tip

"本題核心考點為 巢狀查詢中的量詞運算子(ANY vs ALL)。<ANY 代表小於子查詢結果的最大值即可成立,而 <ALL 則需小於最小值才成立。常見陷阱是混淆「任何一個」的語意:中文的「任何一個」在此題脈絡下對應 SQL 的 ANY,而非 ALL。另外需牢記 EVERY 與 ANYONE 均非標準 SQL 關鍵字。"

學員答題分佈

①Salary<EVERY(SELECT Salary FROM Employee WHERE DNo=5)0%
②Salary < ANYONE(SELECT Salary FROM Employee WHERE DNo=5)0%
③Salary < (SELECT Salary FROM Employee WHERE DNo=5)0%
④Salary <ANY(SELECT Salary FROM Employee WHERE DNo=5)0%

此答題分佈是根據學員在 LongePass 模擬考等實際作答紀錄計算而成。與考友分享這道歷屆試題與詳細解析!

相似類型題目