標量子查詢

xychong123發表於2016-12-19

SQL允許子查詢出現在返回單個值的表示式能夠出現的任何地方,只要該子查詢只返回包含單個屬性的單個元組;這樣的子查詢稱為標量子查詢(scalar subquery)。例如,一個子查詢可以用到下面例子的select子句中,這個例子列出所有的系以及它們擁有的教師數:

  1. select dept_name,  
  2. (select count(*)  
  3. from instructor  
  4. where department.dept_name = instructor.dept_name)  
  5. as num_instructors  
  6. from department; 

上面例子中的子查詢保證只返回單個值,因為它使用了不帶group by的count(*)聚集函式。此例也說明了對相關變數的使用,即使用在外層查詢的from子句中關係的屬性,例如上例中的department.dept_name。

標量子查詢可以出現在select、where和having子句中。也可以不使用聚集函式來定義標量子查詢。在編譯時並非總能判斷一個子查詢返回的結果中是否有多個元組,如果在子查詢被執行後其結果中有不止一個元組,則產生一個執行時錯誤。

注意從技術上講標量子查詢的結果型別仍然是關係,儘管其中只包含單個元組。然而,當在表示式中使用標量子查詢時,它出現的位置是單個值出現的地方,SQL就從該關係中包含單屬性的單元組中取出相應的值,並返回該值。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/20747382/viewspace-2130910/,如需轉載,請註明出處,否則將追究法律責任。

相關文章