电竞比分网-中国电竞赛事及体育赛事平台

分享

子查詢

 昵稱16660868 2014-04-03

基本概念編輯

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保留詞可選。
某些子查詢在交叉表查詢中是允許的,特別是謂詞(那些在 WHERE 子句中的)。將子查詢作為輸出(那些列在 SELECT 中的)在交叉表查詢中是不允許的。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多