基本概念編輯SQL 子查詢 當一個查詢是另一個查詢的條件時,稱之為子查詢。 子查詢可以使用幾個簡單命令構(gòu)造功能強大的復(fù)合命令。 子查詢最常用于SELECT-SQL命令的WHERE子句中。 子查詢是一個 SELECT 語句,它嵌套在一個 SELECT、SELECT...INTO 語句、INSERT...INTO 語句、DELETE 語句、或 UPDATE 語句或嵌套在另一子查詢中。 2語法編輯可用三種語法來創(chuàng)建子查詢: comparison [ANY | ALL | SOME] (sqlstatement) expression [NOT] IN (sqlstatement) [NOT] EXISTS (sqlstatement) 子查詢可分為以下幾個部分: 組成部分comparison 一個表達式及一個比較運算符,將表達式與子查詢的結(jié)果作比較。 expression 用以搜尋子查詢結(jié)果集的表達式。 sqlstatement SELECT 語句,遵從與其他 SELECT 語句相同的格式及規(guī)則。它必須括在括號之中。 說明可以拿子查詢代替表達式 用于SELECT 語句字段表或 WHERE 或 HAVING 子句。在子查詢之中,在 WHERE 或 HAVING 子句的表達式中,用于計算的特定值是由 SELECT 語句提供的。 使用ANY 或 SOME 謂詞,它們是同義字,來檢索主查詢中的記錄,這些記錄要滿足在子查詢中檢索的任何記錄的比較條件。下列示例將返回全部單價比任何以 25% 或更高的折扣賣出的產(chǎn)品高的產(chǎn)品: SELECT * FROM Products WHERE UnitPrice > ANY (SELECT UnitPrice FROM OrderDetails WHERE Discount >= .25); 使用 ALL 謂詞只檢索主查詢中的這些記錄,它們滿足在子查詢中檢索的所有記錄的比較條件。如果將前一個示例中的 ANY 改為 ALL,查詢只會返回單價比全部以 25% 或更高的折扣賣出的產(chǎn)品高的產(chǎn)品。這是更多的限制。 用 IN 謂詞,只能在主查詢檢索那些記錄,在子查詢中的某些記錄也包含和它們相同的值。下列示例返回有 25% 或更高的折扣的所有產(chǎn)品: SELECT * FROM Products WHERE ProductID IN (SELECT ProductID FROM OrderDetails WHERE Discount >= .25); 相反,可用 NOT IN 在主查詢中檢索那樣的記錄,在子查詢中沒有包含與它們的值相同的記錄。 在 true/false 比較中使用 EXISTS 謂詞(與可選的 NOT 保留字一道)來決定子查詢是否會返回任何記錄。 示例還可用子查詢中的表名別名來查詢子查詢外的 FROM 子句的列表。下列示例返回工資等于或高于所有職位相同員工的平均工資的員工姓名。這張員工表的別名為 "T1": SELECT LastName, FirstName, Title, Salary FROM Employees AS T1 WHERE Salary >= (SELECT Avg(Salary) FROM Employees WHERE T1.Title = Employees.Title) Order by Title; 上例中AS保留詞可選。
|
|
|